GNU screen を使うときにやるべきたった一行の設定と、Mac の Terminal.app でマウスを認識させる方法

タイトルは↓の記事へのオマージュです。

ここで紹介されてる

termcapinfo xterm* ti@:te@

について調べました。ここの FAQ に詳しく書いてありますが、ちょっと分かりにくいので順を追って説明します。


普通のターミナルで、less などのフルスクリーンプログラムを開いて、

ここで終了すると、

こうなりますよね?

ところが、GNU screen の中だと、デフォルトではこうなってしまいます。


これは、普通のターミナルの alternate screen という機能を使って「別画面で」フルスクリーンプログラムを実行しているからです。screen の中では alternate screen が有効ではないので、普段の感覚と違っていつもムキーってなります。このせいで僕は screen を敬遠してました。今日までは。

しかし、"alternate screen" "GNU screen" でググってみると、こんなオプションが!

altscreen on

これで screen の中でも、less 開いて閉じた後もいつもと同じように前のコマンドが見られて LifeChanging です!!!

話を戻して、

GNU screen が起動するときもこの alternate screen を使うので、GNU screen が終了した後は、起動する前の画面に戻ります。

ところが、termcapinfo xterm* ti@:te@ を使うと、screen が起動するときに alternate screen を使わないで起動するため、普通のターミナルのスクロールが進みます。screen を終了すると、↓みたいに「screen の中」の次の行から始まります。

だから termcapinfo xterm* ti@:te@ を使うとマウスでスクロールできるようになるのです。

でも、これだと、screen のコピーモードに入る → space でコピー開始 → スクロールでずーーっと上まで行く → space でコピー領域確定、という風にはできません。カーソルがついてきてくれないので。

よろしい、ならば MouseTerm だ

MouseTerm というのは Mac の Terminal.app がマウスを認識できるようにするための SIMBL プラグインです。

これさえあれば、termcapinfo xterm* ti@:te@ しなくても普通にマウスでスクロールできます。

それだけではなくて、VimEmacs でもマウスが使えるようになります。Vim なら .vimrc に

if has("mouse")
    set mouse=a
endif

と、Emacs なら .emacs にこのように書けばいいだけです。(だそうです)

(unless window-system
  (xterm-mouse-mode 1)
  (global-set-key [mouse-4] '(lambda ()
                               (interactive)
                               (scroll-down 1)))
  (global-set-key [mouse-5] '(lambda ()
                               (interactive)
                               (scroll-up 1))))

これは LifeChangingAgain !!!

まとめ

  • .screenrc には altscreen on を!
  • Mac の Terminal.app には MouseTerm を!