Saída tmux de 256 cores no terminal de 256 cores, saída de 8 cores no terminal de 8 cores

Saída tmux de 256 cores no terminal de 256 cores, saída de 8 cores no terminal de 8 cores

Eu gostaria de tmuxescolher automaticamente o modo de 256 cores, ou seja, ter uma variável de ambiente

TERM=tmux-256color

dentro tmuxquando a variável de ambiente

TERM=xterm-256color

foi configuradofora.

Comportamento padrão

Emulador de terminal de 256 cores

O comportamento atual é tmuxescolher o modo de 8 cores em qualquer caso: use um emulador de terminal que suporte 256 cores, ou seja, Gnome Terminal ou xterm, e certifique-se de que ele suporta 256 cores

echo $TERM; tput colors
# xterm-256colors
# 256

então comece tmux. Por padrão tmuxmudará para 8 cores:

echo $TERM; tput colors
# screen
# 8

Emulador de terminal de 8 cores

Se, em vez disso, você mudar para um terminal de 8 cores, ou seja, mudando para /dev/tty2pressionando Ctrl+Alt+F2, você obterá

echo $TERM; tput colors
# linux
# 8

e dentro tmuxdo mesmo velho

echo $TERM; tput colors
# screen
# 8

Modo forçado de 256 cores

Posso forçar tmuxa escolha do modo de 256 coresadicionando o seguinte a~/.tmux.conf

set -s default-terminal "tmux-256color"

Contudo, isto também se aplica se oemulador de terminal externonão suportava 256 cores para começar. Não é isso que eu quero.

Modo adaptável de 256 cores

um problemae umPerguntas frequentesno GitHub que afirma definir um de (as pessoas estão relatando parâmetros contraditórios)

set -ga terminal-overrides ",xterm-256color*:Tc"
set -sa terminal-overrides ",xterm-256color*:Tc"
set -ga terminal-overrides ",*256col*:Tc"
set -sa terminal-overrides ",*256col*:Tc"

devo tmuxescolher o modo de cores do terminal, mas nenhum deles funciona na minha instalação (tmux 3.0 no Arch).

Existe uma maneira definitiva de escolher tmux8 ou 256 cores, dependendo do que o emulador de terminal atual suporta?

Responder1

Isso não é algo que o tmux possa fazer inteiramente por você, porque não pode alterar TERM em programas que já estão em execução, por exemplo, se você desconectar de um terminal com xterm-256color e reconectar a um terminal com xterm.

Você pode fazer isso sozinho, no entanto. O TERM do cliente está disponível no formato client_termname. Então você pode colocar algo assim no seu PS1 ou .profile ou qualquer outra coisa:

if [ -n "$TMUX" ]; then
    T=$(tmux display -p '#{client_termname}')
    case "$T" in
    *-256color)
         export TERM=tmux-256color
         ;;
    *)
         export TERM=tmux
         ;;
    esac
fi

Obviamente, o padrão será tmux se você criar painéis em uma sessão não anexada (client_termname estará vazio) ou o TERM do cliente usado mais recentemente se você tiver uma sessão anexada a vários clientes.

Se você não quiser fazer isso em seu shell assim, você pode usar o gancho anexado ao cliente para alterar o terminal padrão - mas isso só se aplicará a novos painéis, não aos existentes.

Outra opção seria rodar com tmux-256color o tempo todo, e deixar o tmux traduzir a cor para baixo quando o terminal externo não puder fazer 256 cores.

Todo o conteúdo do FAQ sobre Tc é sobre cores RGB (cor verdadeira), não sobre o que você está perguntando.

informação relacionada