Gccのようなコンソールプログラムを実行し、出力をカラーで表示するプログラムを書こうとしています。 openpty
の代わりに pipe
を使用して、キャラクターデバイスのふりをして、色情報を含む ANSIエスケープコード を取得しました。私はいくつかのプログラムを試しました、そしてそれらは時々私にコード_CSI [ 49 m
_を与えます。 wikipedia と xtermエスケープコードのドキュメント (_Ps = 4 9
_を検索)の両方で、コード_CSI [ 49 m
_はデフォルトの背景色を使用する必要があることに同意します。
ただし、debianのxtermとzsh、およびubuntuのLinuxコンソールは同意しません。
_printf '\033[\061mTest\n\033[\060m'
_ xtermのようなコンソールで実行すると、デフォルトの背景色で「テスト」が印刷されます(_\033
_はエスケープであり、_escape + [
_はCSI(制御シーケンスイントロデューサ)を作成します)および_\061
_は8進数 10進数の49 )ですが、実際には「Test」が太字で表示されます(そして末尾の_\061
_は「もう太字ではない」という意味のようですが、ウィキペディアにもxtermカラーコードのドキュメントにも記載されていません)。上記のすべてのコンソールはこれに同意します。
さまざまなコンソールおよび標準のカラーコードのリスト はありますが、「太字」を意味する_CSI 49 m
_のリストはありません。
この矛盾はどこから来たのですか? xterm、zsh、またはLinuxコンソールのいずれかが使用しているものに対応するカラーコードのリストはどこにありますか?
\61
はASCIIの1
文字の8進コードであるため、\e[\61m
または\33[\61m
または\33\133\61\155
または\33[1m
は<ESC>[1m
です。
それはCSI 1 m
です。 Wikipedia または the xterm
documentation を参照してください。
$ 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進数の文字列表現で表現されることを意図しています。