web-dev-qa-db-ja.com

tmuxがTERM変数をscreenに設定するのはなぜですか?

tmuxのマニュアルページの引用:

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

これは、tmuxセッションを任意の端末(リモートなど)に接続できるため、これですか?screenが最も一般的な分母ですか?端末を知っている場合、予期しない結果なしに端末を強制できますか、それともサポートされていない機能が(スクロールなど)壊れるのでしょうか?

20
sevo

これは、GNU screenの以前にインストールされた端末の説明を利用するために行われます。

tmuxscreen はどちらも、アプリケーションに「多かれ少なかれ」「同じ」端末記述を提供し、異なる端末からの接続を簡素化します。 tmuxおよびscreenプログラムは、内部(TERM = screen)と外部(xterm、linuxなど)の違いを処理することになっています。したがって、screen端末記述は「どこにでも」(通常はncursesによって)インストールされています。

いくつかの違いがあります:

  • GNU画面には 非常に古い問題 が「スタンドアウト」機能を表します(技術的には特定の端末機能ではなく、cursesアプリケーションの利便性のための抽象化です)。 tmuxにはその制限はありません。しかし、改良された TERM = tmux は必ずしも「どこでも」ではありません。
  • GNU画面には、ハイブリッド端末記述を使用するための機能があります。外部のTERM = xtermと「screen.xterm」が存在する場合、それは内部のTERM値としてそれを選択します。 (たとえば ターミナルデータベース を参照)。 tmuxはそれを行いません。
13
Thomas Dickey

tmux 2.1 以降、tmuxterminfo を使用できます。

'default-terminal'がセッションオプションになりました。さらに、これが「screen- *」に設定されている場合、画面の動作をエミュレートします。イタリックが必要な場合は、これを「tmux」に設定できますが、これはまだ新しいものであり、必ずしも古いncursesインストールのすべてのプラットフォームでサポートされているわけではありません。

5
jasonwryan