ターミナルエミュレータがサポートする色の数を確認する


21

ターミナルエミュレータがサポートする色数を確認する信頼できる方法はありますか?

echo $TERMprintの場合、ターミナルエミュレータがサポートしている色の数xterm明確にわかりますか?この情報を確実に確認するにはどうすればよいですか?


回答:


20

の値は$TERM、サポートされている色の数に関する多くの情報を提供しません。多くの端末はxterm、自身をとしてアドバタイズし、任意の数の色をサポートする場合があります(2、8、16、88、および256は一般的な値です)。

OSC 4 ; c ; ? BEL 制御シーケンスを使用して、各色の値を照会できます。色番号cがサポートされており、端末がこの制御シーケンスを理解している場合、端末は色の値で応答します。色番号がサポートされていない場合、または端末がこの制御シーケンスを理解していない場合、端末は何も応答しません。以下は、カラー42がサポートされているかどうかを照会するためのbash / zshスニペットです(必要に応じて、ターミナルへ/からリダイレクト)。

printf '\e]4;%d;?\a' 42
if read -d $'\a' -s -t 1; then … # color 42 is supported

一般的な端末の中で、xtermおよびVTEライブラリに基づく端末(Gnome-terminal、Terminator、Xfce4-terminalなど)は、この制御シーケンスをサポートしています。rxvt、konsole、screen、tmuxはサポートしていません。

もっと直接的な方法は知りません。


@Gillesに感謝します。これは素晴らしいですね。何を聞いてread -d $'\a' -s -t 1もいいですか?
アメリオバスケスレイナ

1
@intrpc入力\aをエコーせずに、1秒のタイムアウトで、最初(ベル文字)まで入力を読み取ります。
ジル 'SO-悪であるのをやめる'

5
@ l0b0 tput colorsは、terminfoデータベースを照会します。チャンスはあなたが持っていることですTERM=xterm。Xtermは、バージョン、コンパイル時および実行時のオプションに応じて、少なくとも2、8、16、88、または256色をサポートできますが、terminfoデータベースは1つの値しか保存できません。たとえばを設定TERM=xterm+256colorできますが、termcap / terminfoデータベースにこのエントリがないマシンにログインするとイライラします。
ジル 'SO-悪であるのをやめる'

2
@ l0b0パイプは明らかにターミナルとは関係ありません。端末(printf … >/dev/tty)に印刷してから、端末(read … </dev/tty)から読み取る必要があります。XtermはOSC 4; …; ? BELキーストロークを注入することでシーケンスに応答します。
ジル「SO-悪であるのをやめる」

5
素晴らしいです、ありがとう!XTermが実際にサポートする色の数を決定するスクリプトを次に示します
l0b0


9

使用できます

$ tput colors

私のdebianインストールでは、tputはncurses-binデフォルトでインストールされるパッケージの一部です。


6
これは、適切な場合に端末が実際にサポートできる色の数ではなく、端末が環境に報告している色の数のみを通知しますTERMTERM
-MestreLion
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.