2012/05/20

GNU Screenのhardstatusを有効活用する

GNU Screen の windowlisthardstatus を表示してみると作業がはかどるかもよ、というお話しです。

どんなソフトウェアでもそうでしょうが、ある程度日常的に使うようになるとカスタマイズに凝り出す時期が一度は訪れます。私の GNU Screen における最初のそれは captionhardstatus でした。タブ風に表示するにはどうすればよいのか、フォーカスがあるウィンドウを強調するにはどうしたらよいのか、いろいろ考えたものです。

そうした末につぎのような設定に行き着きました。

caption always '%?%F%{= gW}%:%{= Kk}%?%2n%f%07=%t%='
hardstatus alwayslastline '%m/%d %02c:%s %{= .g}%H%{-} %L=%-w%45L>%{= g.}%n %t%{-}%+w %-17<%=%{= .y}(%l)'

windowlist title  '%{u .g}Num Flags Title%='
windowlist string '%{.g}%3n %{.y}%f%09=%{-} %t %='
環境によっては backtick を使うときもありますが、概ねこれをテンプレートとして使用しています。最近のコミット だと %E なるエスケープ押下を判定できるシーケンスが増えて、さてどう取り込んだものかとまた考え始めたあたりでもあります。

前置きが長くなりましたが、そんな設定に満足しきっていたところ、以下の記事が目にとまりました。

  • 指向性メモ::2012-05-14::GNU Screenを改造してhardstatusを積極的に使う
    SSH先のシェルからローカルScreenのタイトルを更新することが出来ません。こうなると沢山SSHの接続ウィンドウを開いて、特に同じホストが多かったりする場合に困ります。ウィンドウタイトルがみんな同じになってしまうので、どのウィンドウで何をしていたのかが分からなくなってしまい、しばしば迷子になるのです。
スゴクよく分かります。zsh やそれら設定が好き勝手に仕込める環境だと楽なのですが、なかなかそうも行かないことが多く、私の場合はログインする度に title するようなマッピングを作ってランチャ代わりにしています。それでも同じホストのウィンドウを開くときは :2 、:3 などの suffix を付けるマイルールを課しています。通常、ウィンドウタイトルより長いであろう端末タイトルを横にたくさん表示させても、自分の用途ではあまり嬉しくないかもなーと思ってこのパッチは試していませんが、STRING ESCAPE に %h があることを気づかせてくれました。

この手の一覧こそ windowlist に表示すべきだと思い、windowlistcaption に試してみたところ、かなりいい感じです。いままで無駄に感じていた windowlist の右余白が有効活用できますね。

でもよく見ると Vim の「無名」があきらかにおかしな表示ですね。とはいえ文字コードや端末の深遠なお話になると、とても私の手には負えません。そんなときは、何となくつぶやいてみることにしています。

tanasinn terminal emulator の @kefir_ さんからの的確なアドバイス。他にも screen の実装についてダメ出しの数々。でも悲しいかな OSC が何だかわからない。。。

とかなんとか思っているうちに @kefir_ さんがパッチを作ってくださいました。それに甘えて、パッチについて何回も追加リクエストしてしまいました。でもそれらすべてに応じてくださったお陰で、今では UTF-8 の文字幅と、文字幅が曖昧(ambiguous)な文字以外はほとんど問題なく表示できるようになりました。感激です!(ωは Unicode では曖昧な文字と定義されているらしい)

上記は OSX Lion で git 版に @kefir_ さんパッチ と以下サイトの screen-utf8-nfd パッチ を当てています。 日本語ファイル名を扱うことは基本的にないのですが、あったときに備えて正しく表示されるようにしておけば安心して screen が使えますね。

ちなみに git 版の GNU Screen だと hardstatus がきちんと端末側にも反映されるようになっています。細かいですがこういう修正は嬉しいですね。

0 件のコメント:

コメントを投稿