Quais são as condições para um terminal ser “capaz de ter cor”?

2

Estou curioso em saber como um programa determina seu terminal como suporte a cor, já que estou tentando criar alguns aplicativos de terminal como este , no entanto ele não parece estar produzindo cores (simplesmente texto cinza) e ao inspecionar o ambiente do java que ele roda, eu encontrei

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

Que tem $TERM de cores de suporte.

E ao inspecionar o ambiente de outro processo que produz cores corretamente (FYI it's bash), eu encontrei

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

que também tem $TERM de cores de suporte.

A minha pergunta é, como um programa determina se as cores são suportadas porque tenho problemas em descobrir isso.

    
por lkp111138 11.06.2017 / 14:55

1 resposta

3

O valor de TERM denota cor se um deles for verdadeiro:

  • um programa usa TERM para encontrar uma descrição do terminal (em terminfo ou termcap) e examina os recursos nessa descrição para ver se ela suporta cores ou

  • um programa usa algum outro mecanismo outro (geralmente codificado) para associar esse valor a "cor".

Um aplicativo Java não estará usando o banco de dados do terminal, exceto raramente (raro o suficiente para você ter como certo que não é uma possibilidade). Ele pode usar algum comportamento codificado (mas, então, ele terá que construir sequências de escape e escrevê-las - de novo, nem sempre feito).

Alguns programas que podem produzir seqüências de escape irão verificar se sua saída é redirecionada (não indo para um terminal), e suprimirão essas seqüências de escape para facilitar a leitura de arquivos de log, etc. . Você pode contorná-los executando-os em script (o que torna o processo em execução em script "ver" que está sendo gravado em um terminal, enquanto script captura a saída em seu próprio arquivo typescript ). / p>     

por 11.06.2017 / 15:21