GNU Screen Watch: January 2011 - April 2013 - Keep It Simple, Stupidで%Eで入力待機状態が取れると言う情報を頂いたので、早速試したところ
残念なことになってしまいました。使っているversionが古いのかも知れません。
$ screen --version Screen version 4.00.03jw4 (FAU) 2-May-06
特段古いようにも見えませんが・・・。取り敢えずscreenのgitからソースを落としてきてリビルドしました。
$ cd /usr/local/src $ sudo git clone git://git.sv.gnu.org/screen.git Cloning into 'screen'... remote: Counting objects: 3940, done. remote: Compressing objects: 100% (913/913), done. remote: Total 3940 (delta 3024), reused 3915 (delta 3011) Receiving objects: 100% (3940/3940), 2.38 MiB | 311 KiB/s, done. Resolving deltas: 100% (3024/3024), done. $ cd screen/ $ sudo chown -R moguriso:moguriso ./ $ cd src/ $ ./autogen.sh autoheader: WARNING: Using auxiliary files such as `acconfig.h', `config.h.bot' autoheader: WARNING: and `config.h.top', to define templates for `config.h.in' autoheader: WARNING: is deprecated and discouraged. autoheader: autoheader: WARNING: Using the third argument of `AC_DEFINE' and autoheader: WARNING: `AC_DEFINE_UNQUOTED' allows one to define a template without autoheader: WARNING: `acconfig.h': autoheader: autoheader: WARNING: AC_DEFINE([NEED_FUNC_MAIN], 1, autoheader: [Define if a function `main' is needed.]) autoheader: autoheader: WARNING: More sophisticated templates can also be produced, see the autoheader: WARNING: documentation. $ ./configure --enable-colors256 --enable-locale configure: WARNING: unrecognized options: --enable-locale this is screen version 4.1.0 〜(略)〜 configuration section in config.h. Then type 'make' to make screen. Good luck.
までは良かったのですが、makeするとerrorになります。
$ make -j5 〜(略)〜 gcc -c -I. -I. -DETCSCREENRC='"/usr/etc/screenrc"' -DSCREENENCODINGS='"/usr/share/screen/utf8encodings"' -DHAVE_CONFIG_H -DGIT_REV=\""`git describe --always 2>/dev/null`"\" \ -g -O2 -D_GNU_SOURCE ansi.c ansi.c: 関数 ‘MFindUsedLine’ 内: ansi.c:2930:12: エラー: ‘struct win’ は ‘encoding’ という名前のメンバを持っていません make: *** [ansi.o] エラー 1
周辺コードを眺めるとtypoなのかケアレスミスか"w_"のプリフィックスが抜けてるだけなので↓なパッチをあてました。
$ git diff diff --git a/src/ansi.c b/src/ansi.c index 471b35f..04c9012 100644 --- a/src/ansi.c +++ b/src/ansi.c @@ -2927,7 +2927,7 @@ int ys, ye; # endif #endif #ifdef UTF8 - if (p->encoding == UTF8) + if (p->w_encoding == UTF8) { if (ml->font != null && bcmp((char*)ml->font, null, p->w_width)) break;
そして、冒頭で参照させて頂いたページで修正方法まで記載されていることに後になって気づきました...orz
$ sudo make install $ screen --version Screen version 4.01.00devel (GNUd94037c) 2-May-06
末尾の日付が更新されなかったのでミスったかと思いましたが、versionは確かに変わってました。
ただ、これだけだとプロセス名が常にbashです。。。
という訳でiandeth. - 続 screen の使い方を参考にさせて頂き、.bashrcを修正しました。
やりたいことは出来るようになったからよしとしよう。。。
.screenrc
escape ^Tt startup_message off vbell off autodetach on shelltitle "$ |bash" attrcolor b ".I" termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm' caption always "%?%F%{= Wk}%:%{= KW}%?%-w%{=u bW}%?%?%E%{Yb}%? %n %t%{-}%+w" defbce on defscrollback 10000 defmousetrack on #caption always "%?%F%{Wk}%:%{KW}%?%?%E%{Yr}%? %n %?%F%{gW}%:%{.w}%?%?%E%{.r}%? %t%=" #caption always "%?%F%{= wk}%:%{= ww}%?%-w%{=u Wk}%n %t%{-}%+w" #mousetrack on #termcapinfo xterm* ti@:te@
いろいろ弄ってみました。一番何とかしたかったマウスホイール*1の挙動で、
- 通常の挙動ではスクロールバッファを遡って見られる(要はコンソールスクロールする)
- 何らかの拍子にコマンド履歴を見るようになってしまう(スクロールしなくなる)
という現象が出て非常に面倒くさかったのですが、screenの性ではなかったのかと・・・取り敢えず
の最下段”キー押し下げを代替スクリーンでスクロールに使う”のチェックを外したら今のところ再現しなくなった模様です。不意のタイミングで出るので地味にいらっと来るので、コレで治ってくれると良いのですが・・・。
*1:厳密にはトラックパット