Tera Term5: GNU screen で選択範囲の反転表示が消えずに残る
再現方法についての補足です。 Ctrl-Lでクリアすると、表示文字と一緒に選択範囲の反転状態は一時的に消えますが、反転していた場所に文字を表示させるとその場所の文字表示が反転した状態になっているように見えます。
ありがとうございます。
現象を確認しました。 調査します。
この問題は
に分けられます。
画面を消去してからカーソル位置より下の部分をマウスで選択した後、ls等のコマンドを実行してマウスで選択した領域に文字が出力されるようにします。
その時の動作が
となっています。4と5で動作が変わったのはこの部分のみです。
Tera Term 4では出力された部分は反転されなくなりますが、内部的にはマウスで選択されたままである為
というような事が起きます。
この部分に関しては、個人的には Tera Term 5 の動作の方が一貫性が有っていいと思います。
ED(画面消去)やEL(行消去)等の制御シーケンスの効果がマウス選択領域にかかった場合、Tera Term 4, 5共にマウス選択されているという状態が無視される(EDの場合選択が解除されたように見える)という動作になります。
しかし内部的には選択されたままである為、一つ目の問題でのTera Term 4の動作と同じような事が発生します。
hardstatusを表示している時の動作は、この問題で一時的に反転表示が解除された後に一つ目の問題で反転表示が復活している為に起きています。
一つ目の問題で現在のTera Term 5の動作を採用した場合、一貫性の観点からはこちらの動作を変更した方がよいように思います。
最後に、screen無しやhardstatus無しの場合に起きない(マウス選択が消えたように見える)理由についてです。
bashやzsh等は、Control-Lが押された時に ED 2(画面全体消去)制御シーケンスを使って表示を消しています。
Tera TermではED 2が送られて来た時、実際には画面を消去せず、画面の行数分のスクロールを発生させて表示内容をすべてスクロールアウトさせる事によって消去を行っています。
これは消去された内容をスクロールバックで容易に確認できるようにする為です。
ED 2でスクロールが発生した時、選択領域もスクロールアウトされる為、選択が解除されたように見えています。 (実際にはスクロールアウトされた部分が選択されている事がスクロールバックで確認できる)
screen無しやhardstatus無しの場合はシェルが送ったED 2がそのままTera Termまで届きます。
一方、hardstatusを表示している場合、ED 2ではhardstatusも一緒に消されてしまう為そのまま使う事が出来ません。
そこでscreenではhardstatusを表示している時にED 2を受け取った場合、各行に対するEL(行消去)に変換してTera Termへ送ります。
その為、Tera Term側ではスクロールアウトを使わずに消去を行うので前述の現象が発生します。
このED 2での動作に関しては特に変更する必要は無いと思います。
ありがとうございます。
EL(行消去)時の描画を修正しました。
従来、マウス選択領域を無視して背景を描画していましたが、 修正後は、マウス選択領域を考慮した描画になります。
修正したものを置きました。
https://osdn.net/projects/ttssh2/storage/snapshot/teraterm-5.0-dev-r10637-20230313-zmatsuo.zip
試してみてください。
つぎの2つはまだ修正していなくて、 マウス選択領域を無視して背景を描画します。
横から失礼します。
teraterm-5.0-dev-r10637-20230313_003314-masaaki-snapshot.zip (Version 5.0 dev (SVN# 10637)) で試してみたところ、下記のようになりました。
C-l の反転表示自体行われなくなったが消去されなくなったように見えます。。
Tera Term | screen無し | screen(hardstatusなし) | screen(hardstatus alwayslastline) |
ver4.106 (SVN# 9298) | C-lで選択範囲クリア | C-lで選択範囲クリア | C-lで選択範囲クリア |
ver5 beta1 (SVN# 10612) | C-lで選択範囲クリア | C-lで選択範囲クリア | C-lで選択範囲が一時的に消え、文字再出力で反転表示が復活 |
ver5 dev (SVN# 10637) | C-lで選択範囲クリア | C-lで選択範囲クリア | C-lで選択範囲が消えず、文字再出力後も反転表示のまま |
5 dev (SVN# 10637)の反転表示は意図したとおりです。 動作(表示)がなんだかしっくりこない感はあるかも知れないですね。
従来(Tera Term 4)からの動作そのままで、表示を正しくした、 dodaさんのおっしゃるように一貫性はある、と私は感じています。
選択領域の設定と、キャンセル(選択領域をなくす)方法をわかっている分をまとめてみました。
https://ttssh2.osdn.jp/manual/5/ja/usage/mouse.html
screen + ステータスライン表示時は、bashなどのC-Lの出力シーケンスが異なる
Puttyの動作がわかりやすい感じもしますね。
ご説明ありがとうございます。下記のように理解しました。
Tera Term の 4, 5 alpha1, 5 beta1 は本来の挙動ではなく、5 dev (SVN# 10637) が本来の挙動。
クローズさせていただきます。
確認です。
ED 0(カーソル位置から画面末尾までを消去する)
ED 1(画面先頭からカーソル位置までを消去する)
この修正を入れる予定はありますか?
r10637 の修正(と上の修正)を 4-stable へバックポートしますか?
わかったものはすべて修正してtrunkに入れました。r10639です。
バイナリを置きました。
https://osdn.net/projects/ttssh2/storage/snapshot/teraterm-5.0-dev-r10640-20230317-appveyor.zip
再度オープンに戻しますね。問題があったら教えてください。
マウスで選択領域を作っておいて echo でシーケンスを出力してテストしました。
4-stableへのバックポートですが、 4と5でソース的にはそんなに変わっていないところのはずなので 簡単に持っていけるのではないかという考えと、 ずっと気づかれなかったことなのでそっとしておいてもいいのではという考えがあります。
多少おいておいて、不具合の指摘がなければ始めましょうか。
4-stable に修正を入れました。r10677です。
trunkと同等の修正に加えて、全角(2cell)文字を考慮しました。
trunkでは気にかけていなかったので動作をチェック/修正を行います。
trunkに修正を入れました。r10678です。
全角文字が消えるとき、描画が正しく行われていなかったのを修正しました。
https://osdn.net/projects/ttssh2/storage/snapshot/teraterm-5.0-dev-r10680-20230416-appveyor.zip
(修正をバタバタしてしまってスナップショットはr10680から作っています)
次の点が気になりました。 こうするべきというのがわかったときチケットを切ればいいかなと思います。
2,3日様子を見て不具合など出なければ、このチケットはクローズしようと思います。
Tera Term5 ですが、GNU screen で .screenrc に下記設定を入れて Ctrl-L で画面をクリアした際、 選択範囲の反転表示状態が消えずに残るようです。 (クリックによる選択解除では反転表示が消えます)
$HOME/.screenrc
同一条件(同じ teraterm.ini)で Tera Term4 では Ctrl-L の画面クリアで反転状態がクリアされました。
TeraTerm の設定で見直すべき場所はありますでしょうか?
確認した環境は下記になります。