screen
を便利に使うため、ちょちょっと工夫。
まず.zshrc
にs
メソッドを作成。ディレクトリ名をセッション名にして、既にあればアタッチするようにしておく。
export SCREENDIR=/usr/local/screens
s () {
if [ -n "$1" ]; then
name="$1"
else
pwd=`pwd`
name=":`basename $pwd`:"
fi
screen -x $name || screen -r $name || screen -S $name
}
名前の前後に":"を付けているのは、ちょっとした理由から。アタッチする際にscreen
が部分一致で探してしまうため、番兵を置いておくようにしました。これで例えばfoo
ってディレクトリとfoobar
ってディレクトリ両方でデタッチしてあってもscreen
コマンドがエラーにならない。
で、複数のscreen
をタブで切り替えて使ってるわけですが、ひと目で見分けられるようにhardstatus
に表示しておきたい。しかし.screenrc
に$STY
が渡ってこないので、もう一工夫。
hardstatus alwayslastline '%m/%d %02c:%s %{= .g}%H:%`%{-} %L=%-w%45L>%{=u g.}%n %t%{-}%+w %-17<%=%{= .y}(%l)'
backtick 0 30 30 sh -c 'screen -ls | grep --color=no -o "$PPID[^[:space:]]*"'
加えたのは1行目の"%`"と2行目。
これで
- 任意のディレクトリで
s
を叩きscreen
を起動 - 他のディレクトリでも
s
で作業 - 各
screen
を切り替えてもセッション名が表示されているので混乱しない - 作業が一段落したらデタッチ
- 次回作業時、また該当ディレクトリで
s
のように作業できるようになりました。
前々から手を入れようと思っていた箇所でしたが、GWの最後にちょっと幸せに。