GNU screenで、screen -dmで生成した端末の挙動がどうもおかしい。

 たとえば、下線や反転色が表示されなかったりする。TERM=xterm-colorな端末からattachして、そのセッション内のシェルでTERMを再設定してやったりすると直り、detach後は問題なくなる。screen起動時のTERMをいじってみたりしたが効かない。termcap/terminfoのエントリ(screenxterm-color)は問題ない。

 作業用のメインセッションを自動生成し、各ウィンドウを設定しようと思ったのだけど、そんな具合で-dmではうまくいかないので、-xRRで作りつつ、同時にスクリプトを渡して表でやることにしてひとまず妥協した。

 ところで、GNU screenのscreen -dr name -X ...は強力で、キー入力で可能なことなら何でもできると言っていい。条件分岐(select対象が存在しなかったとき…とか)ができないのが残念だが、たいがいの望みは達成できる。「screen -dr wb -X eval 'screen -t proj1 8' 'register x "cd ~/src/proj1\015"' 'paste x'」とすれば、[wb」という名前のセッションに対して、8番ウィンドウを「proj1」という名前で開いてシェルを起動し、「cd ~/src/proj1[enter]」というテキストを送り込む。

 あ、セッション名だけど、俺はメイン作業環境は「wb」(workbench)、バックグラウンド用(Emacs-multi-ttyとかポート転送とか)は「wh」(warehouse)という名前にして、それぞれ同名のコマンドで制御したり開いたりできるようにしています。けっこう凝っていて、「wb hostname」とやると、別のホストに接続し、環境の違いを見て必要ならcocotで端末コード変換をしつつ、そのホスト上のwbを開いてくれたりします。~/.{wb,wh}{env,rc}を読んで必要ならウィンドウを生成したり。

 まあ、こういうこだわりを披露するたびにそこまでやるかと言われてしまうけど、いつも使う道具の最適化にまったくためらいは感じない。まっさらな環境ではイラッと来るけど、95%の作業時間の快適さの方が大事。


Categories : Tech