
私はgccのようなコンソールプログラムを実行し、その出力を色で表示するプログラムを書こうとしています。使ったopenpty
pipe
キャラクターデバイスであるふりをする代わりに、ANSIエスケープコード色情報を渡します。私はいくつかのプログラムを試してみましたが、時にはコードを提供しましたCSI [ 49 m
。両方ウィキペディアそしてxtermエスケープコードドキュメント(検索)デフォルトの背景色を使用する必要があることを意味するPs = 4 9
コードに同意します。CSI [ 49 m
しかし、DebianのxtermとzshとUbuntuのLinuxコンソールは同意しません。
printf '\033[\061mTest\n\033[\060m'
xtermなどのコンソールで実行すると、デフォルトの背景色として「Test」を印刷する必要があります(\033
エスケープされ、escape + [
CSI(Control Sequence Introducer)を作成して\061
8進数)10 進数 49)、しかし実際には」テスト「を太字で表示します(\061
最後のものは「太字で表示されなくなりました」という意味ですが、Wikipediaやxtermカラーコード文書には文書化されていません)。上記のコンソールはすべて同意します。
持つさまざまなコンソールと標準のカラーコードのリストしかし、それらのどれもCSI 49 m
「太字」が何を意味するかをリストしません。
この不一致はどこから来るか。 xterm、zsh、またはLinuxコンソールで使用されるカラーコードに対応するカラーコードのリストはどこにありますか?
答え1
\61
1
はASCII文字の8進コードなので、\e[\61m
またはまたは\33[\61m
またはです。\33\133\61\155
\33[1m
<ESC>[1m
それはCSI 1 m
。バラよりウィキペディアまたはxterm
出荷書類ビーチ。
$ printf '\e[\61m' | od -An -vto1 -tc
033 133 061 155
033 [ 1 m
$ tput bold | od -An -vto1 -tc
033 133 061 155
033 [ 1 m
~のためデフォルトの背景色、必要です\e[49m
、必要ありません\e[\61m
。これら1
と49
数字は、バイト値ではなく10進文字列表現で表されます。