tmux、TERMおよび256色のサポート


48

前書き

私の質問は、理解することの必要性から生じる、なぜ私が持っている今、(複数の試行後)ターミナルtmuxの 256色をサポートし、tput colorsわずか8それらのがある私に告げます。


バックグラウンド

最初から始めましょう。

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

Terminalで何が起こるか見てみましょう。tput colors8色あります。個人的には左に紫色に設定しました。もちろん、右には2種類の青色があります。$TERMと言うxterm。(色付きのls私はeval これを私の.bashrc。)

ここに画像の説明を入力してください

256256色がサポートされていない環境でフラグを付けて呼び出すという事実にもかかわらず、Vimも正常に見えます。

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

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

ここに画像の説明を入力してください

しかしtmux-2フラグを使用して呼び出すと、すべてが魔法のようにうまく動作します。

ここに画像の説明を入力してください

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

GuakeTerminalと同様に動作し、両方ともxterm質問に答えecho $TERMます。


質問

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

  • 私は物事がなぜ機能するのか不平を言っているのはサディスティックですか?多分。
  • より良い理由はありますか?確かに、私は私のオフィスの他のUbuntuボックスの外観を修正したいと思います。そして、物事がなぜ機能するか、または機能しないのかを理解したいと思います。

追加実験

このスクリプトを(少し変更して)実行xtermすると、次の結果が得られます。256色ですが、16色のみが正しく表示されます。

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

さらにテストが続きます。

左から右、上から下に、ソラリゼーションカラーテーマがdircolor ansi-darkあり256dark、デフォルト(タンゴ)カラースキーム、dircolor ansi-darkおよびがあり256darkます。

ここに画像の説明を入力してください

観察:理論的にはdircolor ansi-darkソラライズされた配色は、厳密に一致する必要がありdircolor 256darkます。リストされた特定のファイルでは、これは明らかに発生していません。代わりに、作業ディレクトリにフォルダテキストファイルシンボリックリンクが存在する場合、これはかなり起こります結論256dark色のエンコード中に注意が払われていません。


予備的結論

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


1
この回答とその下のコメントを読んでください。それはあなたの質問に答えますか?また、見ていこのスクリプトサポート色の実数を取得するために。
テルドン

ええと…私はまだ少し混乱しています...しかし、私は少なくともそれtput colorsが信頼できないテストであることを理解していると思います。私の予備的な結論を確認してもらえますか?
Atcold

2
Gilleśの答えを読むtput colorsと、1つの値しか返せず、2,8,16,88または256色のいずれかをサポートする端末では、最初の値(この場合は8)だけが返されます。真の値を取得するには、前回のコメントのスクリプトを使用します。それは何を返しますか?
テルドン

上記の追加の実験を確認してください:)
Atcold 14年

ああ、申し訳ありませんが、私の悪い。
テルドン

回答:


33

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

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

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

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

を実行するtmux -2と、端末が256色をサポートしているとは思わない場合でも、tmuxは256色をサポートします(かなり一般的です)。

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

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

TERM=xterm-256colorまたはTERM=screen-256colorUbuntuで使用できます。これらの値は、これらの名前の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/

私は説明に感謝しますが、それが私の質問を対象にしているのかどうかわかりません。まあ、私の質問はかなり広範であることに同意しますが、私は特にtmuxに焦点を合わせていませんでした。実際、期待通りに動作していたのはtmuxだけでした。もっと不思議なのは、8と言っxtermていても256色を表示できることtput colorsでした。この特定の質問への答えは、質問に対するコメントで@terdonによって対処されたと思います。
Atcold

@Atcoldそれは長い質問ですが、私が答える限り、私が知る限りでは。非tmux関連部分は、terdonと私がリンクした(そして私が書いた)答えによってカバーされています。あなたの質問は、tmuxの側面に関するものではなかった場合、その質問の複製でした。あなたは答えにさらに何を期待していましたか?
ジル 'SO-悪であるのをやめる' 14年

1
@Gilles、私は意地悪に聞こえたくありませんでした。彼が別の質問であなたの答えを参照しているにもかかわらず、は「受け入れられた答え」のことを@terdonに認めようとしていました。それにもかかわらず、このset -g default_terminal "screen-256color"コマンドはtmuxで 256色を有効にするのに十分ではありません。あなたはalias tmux='export TERM=screen-256color; /usr/bin/tmux'参照)する必要があります。
Atcold

@Atcoldいいえ、エイリアスは必要ありません(テストしました)。さらに、このエイリアスは意味がありません。tmuxが画面またはtmux内で実行されているように見せかけます。ただし、tmux -2tmuxが現在の端末が256色をサポートしていると思わない場合は、前の段落に従って実行する必要がありますalias tmux='tmux -2'
ジル 'SO-悪であるのをやめる' 14年

2
@Atcold U&Lの回答にはTERM=xterm-256color tmuxがありTERM=screen-256color tmuxます。ローカルterminfoデータベースになくtmux -2ても機能するため、優れていscreen-256colorます。
ジル 'SO-悪であるのをやめる' 14年

20

回答(および質問!)がいかに豊かにフォーマットされ、詳細にされているかに感銘を受けました。あなたが言及したツールについての貴重な情報と解決策を提供しますが、何が起こっているのかについての洞察はほとんど提供しません。

基本的な質問についての洞察を以下に示します。

  • 端末がサポートするものと報告するものは異なります。たとえば、Gnome端末は256色を表示できますが、エミュレータ(8色)として(変数を介して)環境に通知$TERMますxterm

  • 以下に設定されているものにtput従うようなツールTERMtput colors8 env TERM=xterm-256color tput colorsを印刷し、端末が実際にそのような機能をサポートしているかどうかに関係なく256を印刷します。

  • vimまた、続くTERMデフォルトでは、しかし、としてあなたが(フラグまたは経由で256色を使用するように言いましたset t_Co=256)、それは256色を使用します。そして、それはあなたの端末が実際にそれをサポートしているからです。

  • tmux、Gnomeターミナルと同様に、デフォルトでは8色のターミナルとしてもレポートします。ただし、Gnomeターミナルとは異なり、フラグを使用する場合 256色の機能のみが有効になり、互換性のあるエミュレーターとして報告されます。-2xterm-256color

  • xterm、のようなX11用の端末エミュレータソフトウェア、確かに、256色をサポートしています。しかし、xtermのようなTERM=xterm8色の「標準」です。それはオリジナル の能力を意味しますxterm。ずっと前に256色をサポートするようにアップグレードされたとき、それはそのxterm-256color用語を作り出しました。

したがって、すべては次のようになります。

  • 端末が実際にサポートしている機能(およびサポートしている機能)

  • そのような機能を環境にどのように報告するか TERM

  • ツールがTERMそれに従って解釈し、調整する方法。

  • 上記から推測できるように、あなたのスクリプトやそのようなスクリプトを叩かないexport TERM=xterm-256colorでください~/.bashrc。これらのファイルは、実際に使用している端末に関係なく実行されるため、Puttyを使用したWindowsからのリモート接続、Linuxコンソール端末など、すべての端末がxterm-256color互換として報告されます。これは一部の人には当てはまりますが、すべての人には当てはまりません。たとえば、gettyでアクセスするLinuxコンソールCTRL+ALT+1..6はそうではありません。

  • 端末は、最も互換性のある「標準」として自身を報告する必要があります。256色を処理できることがわかっている場合は、そのように広告するように設定します。

最後になりましたがTERM、256色についての驚くべき読み方は次のとおりです。

http://blog.sanctum.geek.nz/term-strings/

http://blog.sanctum.geek.nz/256-colour-terminals/


1つまたは2つのシナリオの例は、この回答に追加するのに適しています。
イライジャ・リン

5

ソラライズされたディレクトリの色に関連する限り、追加の実験のみに対処する補完的な回答を提供します

セットアップ

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

次の関連する構成とinconsolata mediumフォントを使用しました。

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)。フルパッケージに 含まれている.Xresourcesファイルを使用してnanoを示すソラリゼーションxterm1も含まれています(およびでサンプリングしますxrdb -load ~/.Xresources)。

ここに画像の説明を入力してください 画像を右クリック/表示して、最大解像度で検査してください

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

ここに画像の説明を入力してください ソラリゼーションされた「劣化した」dircolors参照マップ

観察

使用した構成では、結果はtmuxの内部と外部で同一に見えます(viでコメント(#)を逆にしましたが、プラグインは正常に動作し、マルチプレクサはこれに影響しません)。フォントは、ソラリゼーション機能の定義で大きな役割を果たします。エクスペリエンスを最大化するには、優れたフォントが必要です。solarized使用してディレクトリ色256darkのファイルは、基準に一致し、具体的な端末エミュレータの設定を必要としません。


結論

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


「実際には、ソラライズされたディレクトリリストを生成する唯一のカラーファイルである256darkエンコーディングにあまり注意が払われていないというあなたの結論は理解できませんか?」私の混乱は、ansi-dark(非劣化バージョンを使用しているため)正しい出力として考えていたという事実から生じます。次に、の出力を参照として使用256darkすると、考え方が逆になります。
Atcold 14年

「私が使用した構成では、結果はtmuxの内外で同じように見えます」もちろん、256色を使用している場合は、もちろん、256色をサポートしていればどこでも同じようにレンダリングされます。「このコンテキストでANSIソリューションがさらに提供するものは明らかではありません...」結果は、(近似ではなく)真の ソラリゼーションを持っていることです。
Atcold 14年

わかります。ANSIの部分を実際に調査していないので、どこから来たのか把握できませんでした。いずれにせよ、私はあなたのQが非常に有効であることに感謝します。たぶん、私はそれをかなり笑いだと思うので、viをもっと使うでしょう。ANSIの結果については、実際にどのように見えるか見てきました... dir-colorsの場合のみをここで紹介しています。なぜh。彼らはその下に異なるコーディングを持っていますか...私は.txt緑が見えることを意味します...灰色はどのように緑に近いですか?私は彼らのプロジェクトを真剣に理解していません。

ええ、私は個人的に著者に連絡しました、そして、答えは「彼がそのように好きだったので、それは彼の個人的なカスタマイズでした」ということです。私は言葉がありません...私は私のQが誰かを助けてくれてうれしいです:)
Atcold 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.