GNU Screen の windowlist
に hardstatus
を表示してみると作業がはかどるかもよ、というお話しです。
どんなソフトウェアでもそうでしょうが、ある程度日常的に使うようになるとカスタマイズに凝り出す時期が一度は訪れます。私の GNU Screen における最初のそれは caption
と hardstatus
でした。タブ風に表示するにはどうすればよいのか、フォーカスがあるウィンドウを強調するにはどうしたらよいのか、いろいろ考えたものです。
そうした末につぎのような設定に行き着きました。
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の接続ウィンドウを開いて、特に同じホストが多かったりする場合に困ります。ウィンドウタイトルがみんな同じになってしまうので、どのウィンドウで何をしていたのかが分からなくなってしまい、しばしば迷子になるのです。
title
するようなマッピングを作ってランチャ代わりにしています。それでも同じホストのウィンドウを開くときは :2 、:3 などの suffix を付けるマイルールを課しています。通常、ウィンドウタイトルより長いであろう端末タイトルを横にたくさん表示させても、自分の用途ではあまり嬉しくないかもなーと思ってこのパッチは試していませんが、STRING ESCAPE に %h があることを気づかせてくれました。
この手の一覧こそ windowlist
に表示すべきだと思い、windowlist
や caption
に試してみたところ、かなりいい感じです。いままで無駄に感じていた windowlist の右余白が有効活用できますね。
@yoshikaw 引き継ぎます。unixですか?
— mattnさん (@mattn_jp) 5月 17, 2012
@yoshikaw @mattn_jp screenはOSC(¥e]ではじまるエスケープシーケンス)の処理がちょっとだめみたいですね。具体的にはここ(git.savannah.gnu.org/cgit/screen.gi…)でユニコードポイントをcharに代入して、切り詰められちゃてました。どうしたものか…
— saitohaさん (@kefir_) 5月 17, 2012
screenはほかにもいっぱいいっぱいなかんじですね。DBCSのデータ構造をむりやり再利用してUTF-8に対応させちゃってるかんじで、¥u10000以上は捨ててる。でもオワコンか、ときかれると、そうでもない。ちゃんと把握してる人がスクリーンバッファのデータ構造をなおせば…
— saitohaさん (@kefir_) 5月 17, 2012
tanasinn terminal emulator の @kefir_ さんからの的確なアドバイス。他にも screen の実装についてダメ出しの数々。でも悲しいかな OSC が何だかわからない。。。
とかなんとか思っているうちに @kefir_ さんがパッチを作ってくださいました。それに甘えて、パッチについて何回も追加リクエストしてしまいました。でもそれらすべてに応じてくださったお陰で、今では UTF-8 の文字幅と、文字幅が曖昧(ambiguous)な文字以外はほとんど問題なく表示できるようになりました。感激です!(ωは Unicode では曖昧な文字と定義されているらしい)
上記は OSX Lion で git 版に @kefir_ さんパッチ と以下サイトの screen-utf8-nfd パッチ を当てています。 日本語ファイル名を扱うことは基本的にないのですが、あったときに備えて正しく表示されるようにしておけば安心して screen が使えますね。ちなみに git 版の GNU Screen だと hardstatus がきちんと端末側にも反映されるようになっています。細かいですがこういう修正は嬉しいですね。
0 件のコメント:
コメントを投稿