ローカルの screen で窓がこんな感じ

  1. 何かをエディタで編集中
  2. どこかに ssh
  3. 何かプログラムが走っている

になっていたとして。ssh している先で唐突にそういや放置していたアレ終わったかしらと screen -r とかやると

  1. 何かをエディタで編集中
  2. どこかに ssh
    1. 何かをエディタで編集中
    2. 空き
    3. ...
  3. 何かプログラムが走っている

こんな感じになるが、ローカルと ssh 先で screen の escape が同じだと ssh 先の screen を操作することができなくてキー!ってなって仕方がないのでローカルで ssh している窓を殺して新しくターミナルを起動して ssh でログインして再び screen -r して再開という、死ぬほどめんどくさいというほどめんどくさくはないような気はするものの軽くイラッとくることを割と頻繁にやってしまうので対策を考えた。まず最初に $TERM が screen だったら defescape が違う .screenrc を使うという方法を思いついたのだが、man を見る限り設定ファイルを指定して起動とかそういうのはできないっぽくて死。なんかないかなーとだらだら見ていたら -e オプションをつけて起動することで escape を指定できることがわかった。というわけで .zshrc に

if [ "$TERM" = "xterm" ]; then
    #なにやら雑多な設定
    alias -g scr='screen -xR -e ^Tt'
fi

if [ "$TERM" = "screen" ]; then
    #なにやら雑多な設定
    alias -g scr='screen -xR -e ^Zz'
fi

と書くことで $TERM が screen か否かで escape を変えることに成功した。調子にのって screen の窓の一つから ssh した先で screen を起動して分割したうえに emacs を起動して Cx 3 をしてみたら

ひどいことになった。えーっと、左上に行くためには……。