web-dev-qa-db-ja.com

tmux、TERM、256色をサポート

前書き

私の質問は、理解の必要性から生じますなぜ私は(複数の試行の後)ターミナルtmuxは256色をサポートし、tput colorsは8色しかないことを教えてくれます。


バックグラウンド

最初から始めましょう。

Ubuntuボックス、GuaketmuxVimと私はテーマSolarizedが大好きです。それらはかなりひどく見えたので、256色のサポートを有効にして、少し遊んでみることにしました。

私のTerminalがどうなるか見てみましょう。 tput colorsは、8色あると言っています。個人的には左側を紫に設定し、右側がもちろん右側に2種類の青の濃淡があります。 $TERMxtermと言います。 (色付きのls I evalthis.bashrcに含めるには。)

enter image description here

Vimも正常に見えますが、256色がサポートされている環境で256フラグを使用して呼び出しますnotがサポートされています。

set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized

色空間の減少について不満を言うのは、tmuxだけです。 tmuxを呼び出すと、「間違った」期待される結果が得られます。

enter image description here

しかし、tmux-2フラグ付きで呼び出すと、すべてが正常に機能しますmagically

enter image description here

今私が理解している唯一のことは、-2export TERM=screen-256colorsource )と同等であることです。

GuakeTerminalと同様に動作し、どちらもxtermを質問echo $TERMに回答します。


質問

基本的に、誰もがそうでない場合でもすべてが機能する理由を理解していますか?

  • なぜ物事が機能するのか不平を言うのは悲しいですか?多分。
  • もっと良い理由はありますか?もちろん、オフィスの他のUbuntuボックスの外観を修正したいのですが、なぜ機能するのか機能しないのかを理解したいと思います。

追加の実験

xtermこのスクリプト (わずかに変更された)を実行すると、次の結果が得られます。256色ですが、16色しか正しく表示されません。

enter image description here

次に、端末のプロファイルを変更すると、これらの16色も変更されます。

enter image description here

より多くのテストが続いています。

左から右、上から下に、Solarizedカラーテーマ、dircoloransi-darkおよび256darkがあり、その後デフォルト(Tango)配色、dircoloransi-darkおよび256dark

enter image description here

観察:理論的には、dircoloransi-darkSolarizedカラースキームはdircolorと厳密に一致している必要があります256dark。これは、リストされている特定のファイルでは明確に発生していません。代わりに、作業ディレクトリにフォルダーテキストファイルおよびシンボリックリンクがあると、これはかなり起こります結論256dark色をエンコードする際に注意が払われていません。


予備的な結論

xtermは、tput colorsのコメントにかかわらず、256色をサポートしています。プログラムはansiパレット(ユーザーがカスタマイズ可能)を参照するか、合計256色から選択して色を定義できます。

51
Atcold

tmux FAQ に256色のサポートに関する情報があります。

端末がサポートする色の数を検出することは、歴史的な理由により、残念ながら簡単ではありません。説明については、 端末エミュレータがサポートする色数の確認 を参照してください。この意味は

  • tmuxは、端末が8色以上をサポートしているかどうかを確実に判断できません。
  • tmuxは、8色以上をサポートするアプリケーションと確実に通信できません。

Tmuxを使用している場合、対話する端末はtmuxです。 xtermのすべての制御シーケンスをサポートしているわけではありません。特に、色の値を照会または設定するためのOSC 4 ; …制御シーケンスをサポートしていません。 tmux外のxtermで直接実行しているときに、それを使用する必要があります。

tmux -2を実行すると、端末が256色をサポートしているとは考えられていなくても(かなり一般的です)、tmuxは256色のサポートから始まります。

デフォルトでは、tmuxは256色のサポートなしでscreenとして自分自身をアドバタイズします。 .tmux.confTERMの値を変更して、256色のサポートを示すことができます。

set -g default-terminal "screen-256color"

UbuntuではTERM=xterm-256colorまたはTERM=screen-256colorを使用できます。これらの値は、これらの名前のtermcap/terminfoエントリがないリモートマシンにログインした場合にのみ問題を引き起こします。エントリをリモートマシンのホームディレクトリにコピーできます。これは、最新のterminfo実装で機能します。

# From the Ubuntu machine to a machine that doesn't have *-256color terminfo entries
ssh somewhere.example.com mkdir -p .terminfo/s .terminfo/x
scp -p /lib/terminfo/s/screen-256color somewhere.example.com:.terminfo/s/
scp -p /lib/terminfo/x/xterm-256color somewhere.example.com:.terminfo/x/

solarized directory colorsに関連する限り、追加の実験のみに対処する補足的な回答を提供します。

セットアップ

テストスクリプトからの同じカラー出力があります。唯一の違いは、OpenBoxslimxcompmgrでlxterminalを使用したことですDMなし。したがって、ターミナルエミュレータはGUIでこれらの設定を提供せず、特定の theme がないため、カスタムパレットを簡単に設定することはできません(これらはいくつかのターミナルエミュレータにのみ存在します) )。だから私はいくつかの半透明の装飾されていない端末とその青を前景色として使用し、背景は青Gentooです。 ansiバージョンのカラーファイルを使用できないため、dircolors.256darkを使用して結果を取得することに専念しました。つまり、「劣化した」単純なバージョンです。

次の関連設定とinconsolata中型フォントを使用しました。

echo $TERM
xterm

.bashrc:
eval `dircolors /path/to/dircolors.256dark`

.vimrc:
set t_Co=256
let g:solarized_termcolors=256
syntax enable
set background=dark
colorscheme solarized

.tmux.conf:
nothing at all related to colors!
start tmux with "tmux -2"

Dircolors

以下の画像は、これらの設定でtmuxの内部と外部の両方で何が発生するかを示しています。左側の最初の3分の1は、装飾されていないlxterminalウィンドウを縦に積み重ねたものです(3)。右側には、同じプログラムを示すtmuxアセンブリがあります(3)また、solarizedxterm1 フルパッケージ に含まれる.Xresourcesファイルを使用してnanoを表示(およびxrdb -load ~/.Xresourcesでサンプリング):

enter image description here 右クリック/画像を表示してフル解像度で検査してください

左上隅の最初のターミナルは、デフォルトのディレクトリの色を示しています。すぐ下は、劣化したsolarizedバージョンです。追加した.cファイルのピンクの背景に青色の背景を除いて、これから予想されるものと同じです(下の画像を参照してください)。デフォルトと比較して、それは拡張属性、つまりボールド/ライト/リバースなどにさらに基づいており、色は明らかに異なります。多くのディストリビューションの.txtファイルのデフォルトの色割り当ては緑ですが、solarizedの場合は代わりに灰色にする必要があります。 ansiファイルが.txtファイルを緑色としてレンダリングすると、正しくレンダリングされないか、まったくレンダリングされません。あなたが示した右側の結果は、次の参照との関係で正しいもの(256dark)です:

enter image description here solarized "degraded" dircolorsリファレンスマップ

観察

私が使用した構成では、結果はtmuxの内部と外部で同じように見えます(viではコメント(#)が逆になっていますが、それ以外の場合、プラグインは正常に動作し、マルチプレクサは影響しませんこれについて)。フォントはsolarized機能の定義で大きな役割を果たし、エクスペリエンスを最大化するには適切なフォントが必要です。 256darkファイルを使用したsolarizedディレクトリの色は参照と一致し、特定の端末エミュレーター構成は必要ありません。


結論

実際、ディレクトリの色のansiレンダリングは、劣化したsolarized(256dark)とは 完全に異なる です。 ansiの下の.txtファイルは緑色になるほどで​​す。一方を他方のレンダリングの検証に使用することはできません。どちらのソリューションも異なる構成を必要とし、まったく異なる結果を生成します。

5
user44370