Edited at

screenに名前を自動的につけてhardstatusに表示する

More than 5 years have passed since last update.

screenを便利に使うため、ちょちょっと工夫。

まず.zshrcsメソッドを作成。ディレクトリ名をセッション名にして、既にあればアタッチするようにしておく。

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行目。

これで


  1. 任意のディレクトリでsを叩きscreenを起動

  2. 他のディレクトリでもsで作業

  3. screenを切り替えてもセッション名が表示されているので混乱しない

  4. 作業が一段落したらデタッチ

  5. 次回作業時、また該当ディレクトリでs

のように作業できるようになりました。

前々から手を入れようと思っていた箇所でしたが、GWの最後にちょっと幸せに。