infocmpではそうは言わないが、xtermとscreenの間のTERM ANSIエスケープシーケンスの互換性

infocmpではそうは言わないが、xtermとscreenの間のTERM ANSIエスケープシーケンスの互換性

私はMacのzshでtmuxを使ってスクリプトを作成しています。https://unix.stackexchange.com/users/22565/st%c3%a9phane-chazelas答えは、tmuxを使用するときにホストシステムとは異なるインタプリタを使用することを発見しました。

したがって、スクリプトされたtputコマンドの同じテキストをttyウィンドウとtmuxウィンドウの両方に出力するときに、生成されたANSIエスケープシーケンスといくつかの非互換性があるかどうか疑問に思います。

$TERMが私のMacではxterm-256colorで、tmuxウィンドウではscreen-256colorであることがわかったので発行します。

%> infocmp xterm-256color screen-256color

私はtputclear、civis、sgr0、cnorm、rc、sc、home、cd、cr、el、cub1、cud、cufを使用するコードを使用しています。コードが実行中で、出力はxtermコンテキストでtputを使用して生成され、ティーアップ時にttyとtmuxの両方でうまくレンダリングされます。

しかし、例えばinfocmpによると、Clearは2つの用語に対して異なるエスケープシーケンスを持っています。

comparing xterm-256color to screen-256color.
        clear: '\E[H\E[2J', '\E[H\E[J'

それでは、どのように機能しますか?

追加の質問として、私のコマンドのmsotは比較に表示されません。これは理論的にはサポートされていないのか、どちらの用語でも共通していますか?

答え1

(ECMA-48) 標準端子では、2 つの文字列の効果に差がないため動作します。どちらもカーソルを画面の左上に送ります。次に、一方(\E[J)は画面の残りの部分を消去し、もう一方(\E[2J)は画面全体を消去します。

CSI Ps J  Erase in Display (ED), VT100.
            Ps = 0  ⇒  Erase Below (default).
            Ps = 1  ⇒  Erase Above.
            Ps = 2  ⇒  Erase All.
            Ps = 3  ⇒  Erase Saved Lines, xterm.

(からXTerm制御シーケンス)

関連情報