本記事は ターミナルマルチプレクサ Advent Calendar 2011 : ATND の25日目です。24日目は 開発版GNU Screenでコピペを極める でした。連投スミマセン。今回は開発版 GNU Screen をもう少しだけ便利に利用するために私が当てているパッチについて説明したいと思います。
よりよい環境を求めて
どんな物もそうだと思うのですが、毎日本気で使用していると細かなところが気になりだしてきます。自分の欲求を満たすための設定はどうすればよいのか、ドキュメントやネットを見ては設定ファイルを練り上げてきましたが、それだけでは実現できないところも分かってきます。
C 言語でプログラムを書いたことはありませんが、ロジックを追う程度であれば出来ると思っていますので、とりあえずいつもコンパイルしている git 版のソースコードを眺めてみて、自分が手を付けられそうなところからはじめてみました。なお、ここで紹介するパッチは gist にあげましたので興味のある方はどうぞ。
- 開発版GNU Screenにあてているパッチ — Gist
(追記) Homebrew の Formula を追加しました
エンコーディング情報を常に表示したい
そもそもソースコードに手を入れるしかないと思った発端はコレです。caption
には様々な情報を表示できますが、encoding
の値は Ctrl-A
i
(info
) でしか表示できません。この手のウィンドウに関する情報は表示できるという選択肢があった方がいいと思いますので、まずはこれを実現するために GNU Screen のソースをながめる旅を始めました。
内部の情報を表示できるようにするだけですのでパッチそのものはすぐできました。その後 screen-devel を見ていると同じようなパッチの投稿を見かけましたので、現在はそちらを使っています。
このパッチをあてると%e
が使用できますので、caption
に設定しています。
caption always '%?%F%{= gW}%:%{= Kk}%?%2n%f%07=%t(%e)%?%P *** copy/paste mode ***%:%?%='
なお、このエンコーディング情報の表示については Feature Request が挙がっていましたが、これ以上エスケープ文字を増やしたくないと言うことで却下されています。
必要性については、多言語環境の理解を得るところから進めないと本体に取り込まれることは無いでしょうね。。。時刻は分けて定義したい
時刻に関する文字エスケープは次のようなものがあります。
c current time HH:MM in 24h format C current time HH:MM in 12h format日付や時刻を表示したいときには
%Y/%m/%d %02c:%s
と出来てよいのですが、logfile
や hardcopy
で指定するファイル名にタイムスタンプを付けたいときに、もれなく付いてくる :
が邪魔に感じるときがあります。strftime(3) のように細かい必要はありませんが、せめて時と分はわけて指定できてもよいと思います。
エンコーディング情報を表示するのと同様にしてパッチはすぐにできましたが、その後 screen-devel に投稿されたものを見かけましたので現在はそちらを使っています。
- [screen-devel] Screen patch for string escape, n and new escapes
The patch also includes new escapes: j, k, and K. j, displays the minutes; k, displays the hour in 24h format; and K displays the hour in 12h format.
logfile
を設定しています。
logfile 'screen/log/screenlog.%H.%Y%m%d_%0k%0j-%02n.%t.log'
プロンプト入力文字数を増やしたい
稼働監視に GNU Screen を使っていると、vmstat 風なコマンド出力を表示させたいウィンドウが出てきます。その手のコマンドには表示行の高さを判断してヘッダ行を再出力するものもありますが、そうではないものや自製のスクリプトではそこまで気は回りません。そのようなときに私はよく title
をヘッダ行代わりにします。
ですがコレ、よくみると 100 文字で切れていました。切れていると言うより入力できませんでした。せめて自分が使う端末幅くらいは欲しいなと言うことで 255 文字まで利用できるように文字数チェックに関わるところの数値を変更したパッチを書いて使ってます。
独自ビルド版は別名で管理したい
個別パッチを当てた screen を使っているとオリジナルを使用しているのか判断に迷うときがあります。開発版を使い続けることを選んだとはいえ、オリジナルの screen の機能を確認したいときも出てきます。シェルの設定を工夫すれば何とでも出来ますが、せっかくソースからビルドしているのでバイナリの名前を screenx
として、読み込む設定ファイルなどもあわせて変更したものを使っています。ついでに spec ファイルを書いて rpm 化したものを自分の環境には入れています。
OS Xで濁点、半濁点をまともに表示したい
普段使いの Mac OS X でも git 版にパッチを当てたものをコンパイルして使っていますが、ただ一点だけ不満がありました。濁点や半濁点の扱いです。OS 標準の zsh や screen では問題になりませんが、git 版を単純にコンパイルして使用するとそれら文字の後ろに謎の記号が見え隠れします。
上から順に、OS X の zsh、OS X の screen、git 版の screen、git 版にパッチを当てた screen
私の場合コマンドラインから日本語ファイル名を扱うことはまずありませんが、ls 結果に謎の記号がついているのは気持ちの良いものではありません。とはいえこのあたりの文字コードについては知識がありませんので、以下のサイトを参考にして試行錯誤を重ねた結果、マッピングテーブルの該当部分をコメントアウトするという荒技で表示上は何とかなりました。これで良いのか分かりませんが、1年以上穏やかに過ごせていますのでよしとします。
Patch: osx-comment-combined-char.patch | |
Probrem: display corruption at some combining characters. | |
Solution: comment out some combined char from mapping table | |
- 0x3099 voiced sound mark | |
- 0x309A semi-boiced sound mark | |
Author: Kazuhiro Yoshikawa <yoshikaw@gmail.com> | |
Files: src/encoding.c | |
--- a/src/encoding.c 2009-09-26 00:50:28.000000000 +0900 | |
+++ b/src/encoding.c 2010-05-03 00:26:03.000000000 +0900 | |
@@ -998,7 +998,7 @@ | |
{ 0x1B6B, 0x1B73 }, { 0x1DC0, 0x1DCA }, { 0x1DFE, 0x1DFF }, | |
{ 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2063 }, | |
{ 0x206A, 0x206F }, { 0x20D0, 0x20EF }, { 0x302A, 0x302F }, | |
- { 0x3099, 0x309A }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, | |
+ /*{ 0x3099, 0x309A }, */{ 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, | |
{ 0xA825, 0xA826 }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, | |
{ 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, | |
{ 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, |
おわりに
以上、私が開発版 GNU Screen に抱いている不満点と、それを解消するパッチの紹介でした。私の技量では見た目や数値を変える程度の変更しか出来ませんが、それでもかなり快適に利用できます。他にももう少し何とかしたいところ(コピーモード時における各種モードの表示、レイアウトやグループ情報の表示、レイアウト数、名前文字数の制限の拡張)がありますので、時間を見つけて何とかしてみたいところです。
すぐに使える tips を紹介したかったのですが、あいにく手持ちのネタを整理する余裕が無く、Advent Calendar の場をお借りして開発版 GNU Screen に関する持論を展開する場になってしまい申し訳なく思います。何か一つでもお役に立てるヒントがあれば幸いです。
あらためて思いますが、ソースコードを自由に入手出来るのはすばらしいですね。7日目の記事を見ると tmux のほうがサブコマンド単位でコードが分かれているようですので、screen よりは手を入れるのは楽そうですね。
あ、そうそう。以下については GNU Screen だとウィンドウタイトルを工夫しておけば at
で出来そうですね。
0 件のコメント:
コメントを投稿