web-dev-qa-db-ja.com

スクリーンとキティ$ TERMはどうあるべきですか?

tmuxが報告する理由

$TERM=screen-256color

通常kittyレポート

$TERM=xterm-kitty

tmux内でkittyを実行する場合、どちらを使用すればよいですか?明らかにkittyは高度な機能を提供し、xterm-kittyを報告することは理にかなっています。 screenがscreen-256であると報告するのはなぜですか?screenで実行されていることを認識する必要があるプログラムはありますか?キティxterm-kittyで実行されている画面を呼び出すことは問題がありますか?

3
Evan Carroll

kitty内でtmuxを実行する場合、どちらを使用すればよいですか?

tmuxを実行するときは、must _TERM=screen_、_TERM=tmux_、またはその派生物の1つを使用する必要があります。 _TERM=screen-256color_または_TERM=tmux-256color_。

man tmux(1)状態...

TERM環境変数は、tmux内で実行されるすべてのプログラムに対して「screen」に設定する必要があります。新しいウィンドウには自動的に「TERM = screen」が環境に追加されますが、シェルの起動ファイルでこれをリセットしないように注意する必要があります。

..さらに明確にすると...

このセッションで作成された新しいウィンドウのデフォルトのターミナル-TERM環境変数のデフォルト値を設定します。 tmuxが正しく機能するには、これを「screen」またはその派生物に設定する必要があります。

...彼らはmustも強調しています。

tmux wiki は、追加の説明と回答を続けています...

Tmuxの内部TERMは「screen」、「tmux」、または同様のもの(「tmux-256color」など)でなければなりません。それ以外の場所で問題を報告する気にしないでください!

画面で実行されていることを認識する必要のあるプログラムはありますか?

はい。 tputなどの多くのプログラムは、正しいscreenを使用していない限り、tmux(またはTERM)で実行すると正しく表示されません。値。

TERMとは何ですか?それは何をしますか?

環境変数TERMは、terminfo(5)データベースから読み取る端末記述の名前をアプリケーションに通知します。各記述は、端末を制御するために何を送信するかをアプリケーションに伝えるいくつかの名前付き機能で構成されています。たとえば、「cup」機能には、カーソルを上に移動するために使用されるエスケープシーケンスが含まれています。

TERMがアプリケーションが実行されている端末の正しい説明を指すことが重要です-そうでない場合、アプリケーションが誤動作する可能性があります。

Infocmp(1)コマンドは端末の説明の内容を表示し、tic(1)コマンドはファイルから説明を作成してインストールします(通常、両方で-xフラグが必要です)。

キティxterm-kittyで実行中の画面を呼び出すのは問題でしょうか?

必ずしもそうではありませんが、実行中の画面のTERM値が正しく設定されており(つまり、_TERM=screen-256color_)、そのための有効なterminfo文字列があり、screenまたはtmux処理方法を知っています。

他の派生物(私のマシン上)は次のとおりです。

_/usr/share/terminfo/s/screen
/usr/share/terminfo/s/screen-16color
/usr/share/terminfo/s/screen-256color
/usr/share/terminfo/s/screen.Eterm
/usr/share/terminfo/s/screen.gnome
/usr/share/terminfo/s/screen.konsole
/usr/share/terminfo/s/screen.linux
/usr/share/terminfo/s/screen.mlterm
/usr/share/terminfo/s/screen.mrxvt
/usr/share/terminfo/s/screen.rxvt
/usr/share/terminfo/s/screen.teraterm
/usr/share/terminfo/s/screen.vte
/usr/share/terminfo/s/screen.xterm-r6
/usr/share/terminfo/s/screen.xterm-new
/usr/share/terminfo/s/screen.xterm-xfree86
_

TERMが設定されたら、infocmpを実行できます。値の有効なterminfoがあるかどうかを報告します。その他のテストでは、次のような基本的なterminfo機能を検証できます。

for terminfos in $(find /usr/share/terminfo/s -type f -name 'screen*' -printf '%f\n' -o -name 'tmux*' -printf '%f\n'); do export TERM=$terminfos; printf "%s: %sthis is foreground color 10 %sitalics%s and now all attributes are turned off\n" "$terminfos" "$(tput setaf 10)" "$(tput sitm)" "$(tput sgr0)"; done

2
Joseph Tingiris

キティの高度な機能は、tmuxなどと互換性がありません。たとえば、tmuxを実行してから、

$ kitty icat ~/Pictures/fc.jpg 
Terminal does not support reporting screen sizes via the TIOCGWINSZ ioctl
$ TERM=xterm-kitty kitty icat ~/Pictures/fc.jpg 
Terminal does not support reporting screen sizes via the TIOCGWINSZ ioctl

したがって、tmuxの下でTERMをいじってキティのレポートと一致させても、せいぜい行き止まりになっていることがわかります。レンジャーでは、プレビューをレンダリングしようとすると、範囲がクラッシュします。

0
Evan Carroll

それはいくつかの質問です。より興味深いものに対する答えは次のとおりです。

  • Tmuxが報告する理由

    $TERM=screen-256color

Tmuxの古いリリースでは、「そこにあるため」TERM = screenまたはTERM = screen-256colorを使用します。最終的には、(a)tmuxの開発者が機能を追加したかったため、および(b)画面がイタリック体の使用を妨げたために、状況が変わりました。

  • 通常キティレポート

    $TERM=xterm-kitty

    Kitty内でtmuxを実行する場合、どちらを使用すればよいですか?

Tmuxに選択させる必要があります(カラーとファンクションキーの処理方法を確認するには、外部ターミナルの説明を参照してください)。

  • Screenがscreen-256であると報告する理由

おそらく「screen-256color」を意味するはずです。 GNU screenは外側の$ TERM値を調べ、内側の値を選択します。ただし、この特定の値はユーザーの.screenrcファイルから取得されます(通常-パッケージャーが関与する場合があります)。

  • 画面で実行されていることを認識する必要があるプログラムはありますか?

あんまり...

  • キティxterm-kittyで実行されている画面を呼び出すことは問題がありますか?

一部のscreen構成では、デフォルトでbce(バックカラー消去)が使用されます。 kittyはこの機能(ymmv)をサポートしていません。

0
Thomas Dickey