端末が「着色」される条件は何ですか?

端末が「着色」される条件は何ですか?

たとえば、一部の端末アプリケーションを作成しようとしているため、プログラムが端末が色をサポートしているかどうかを確認する方法がわかります。これところで、出力色がないようで(単色グレーのテキストのみあり)、java実行中の環境を確認してみると

HOME=/home/user
LANG=en_US.UTF-8
LOGNAME=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42
MAIL=/var/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
SHELL=/bin/bash
SUDO_COMMAND=/usr/local/bin/minecraftd -d
SUDO_GID=1000
SUDO_UID=1000
SUDO_USER=user
TERM=xterm-256color
USER=root
USERNAME=root

その中には$TERM補助色もあります。

色を正しく出力する他のプロセス(参考としてbashです)の環境を確認した後、

GCC_COLORS=error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01
HOME=/home/user
LANG=en_US.UTF-8
LESSCLOSE=/usr/bin/lesspipe %s %s
LESSOPEN=| /usr/bin/lesspipe %s
LOGNAME=user
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42
MAIL=/var/mail/user
MYSQL_PS1=\u@\h [\c/\d]>
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
PWD=/home/user
SHELL=/bin/bash
SHLVL=1
SSH_CLIENT=[irrelevant]
SSH_CONNECTION=[irrelevant]
SSH_TTY=/dev/pts/4
TERM=screen
TMUX=/tmp/tmux-1000/default,28912,0
TMUX_PANE=%3
USER=user
XDG_RUNTIME_DIR=/run/user/1000
XDG_SESSION_ID=c57
_=/usr/bin/tmux

$TERM補助色もあります。

私の質問は、色がサポートされているかどうかを把握するのが難しいので、プログラムでどのように色がサポートされているかを確認することです。

答え1

の価値TERM次のいずれかに該当する場合、色が表示されます。

  • TERM端末の説明(terminfoまたはtermcapで)を見つけ、その説明の機能を見て色をサポートしているかどうかを確認するプログラム、または

  • プログラムは一部を使用します。その他この値を「色」に関連付けるメカニズム(通常はハードコーディングされています)。

Javaアプリケーションは非常にまれに(あまりにもまれであり、当然不可能であると考えられる場合)を除いて、ターミナルデータベースを使用しません。いくつかのハードコーディングされた動作を使用することもできます(ただし、エスケープシーケンスを設定して作成する必要があります。繰り返しますが、頻繁には実行されません)。

一部のプログラムはできるエスケープシーケンスを作成すると、その出力がリダイレクトされていることを確認し(ターミナルに移動しない)、ログファイルなどを読みやすくするためにこれらのエスケープシーケンスを抑制します。これらの問題を実行して解決できますscript。これにより、実行中のプロセスがscript端末に書き込んでいることを「確認」し、script出力を独自のファイルtypescriptとしてキャプチャできます。

関連情報