2015年4月16日木曜日

Teratermでscreenコマンドを使うと画面が80桁になってしまう

TeratermでFreeBSD 9.1/9.2のscreenコマンドを使うと画面が80桁になってしまいました。調べると以下のサイト
screenで画面サイズが勝手に変わってしまう事象の対策(メモ)
http://blog.goo.ne.jp/sohgoh/e/362865b122f5151f78ea7c7f16267659
で回避方法が書かれており、そのように設定をすると現象は出なくなりました。

設定は、.screenrcに以下を追加するというものです。
termcapinfo xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'
これは端末起動時の初期化エスケープシーケンスを設定するものです。
意味を以下を参考に調べてみました。
対応制御シーケンス
http://ttssh2.sourceforge.jp/manual/ja/about/ctrlseq.html
\E[ :
ESC [ CSI CSIシーケンスを開始 (CSIシーケンスを参照)
CSI r:
CSI Ps1 ; Ps2 r DECSTBM 上下マージン(スクロールリージョン)を設定する。
Ps1    上マージンの行位置。省略時は 1。
Ps2    下マージンの行位置。省略時は画面下端。
CSI m:
CSI Pm m SGR 文字属性を設定する。省略時の Pm の値は 0。(文字属性を参照)
CSI 2J:
CSI Ps J ED 画面消去。Ps の省略時の値は 0。
Ps = 0      カーソル位置から画面末尾までを消去する。
   = 1      画面先頭からカーソル位置までを消去する。
   = 2      画面全体を消去する。
CSI H:
CSI Ps1 ; Ps2 H CUP カーソルを Ps1 行目の Ps2 桁目に移動する。Ps1, Ps2 の省略時の値は 1。
CSI ?7h
CSI ? Pm h DECSET DEC/xterm 拡張のモードを設定する。(モード (DEC/xterm拡張)を参照)
CSI ?1;4;6l
CSI ? Pm l DECRST DEC/xterm 拡張のモードを解除する。(モード (DEC/xterm拡張)を参照)
これで画面サイズが変更されないのは謎ですが、もともとのxtermの初期化制御シーケンス「is=\E[!p\E[?3;4l\E[4l\E> 」を入れ替えているようです。