Eu tenho vários dotfiles que me permitem ter um tema bonito no meu terminal e tmux no meu host local. Eu uso gatinho, peixe e tmux. Para definir corretamente as cores e ter uma coerência global, utilizo os seguintes arquivos:
- .Xrecursos
- gatinho.conf
- peixe_prompt.fish
- .tmux.conf
No meu host local, tudo parece muito limpo:
Eu também tenho um servidor remoto, que executa o mesmo arch + fish + tmux e usa exatamente os mesmos dotfiles. No entanto, ao fazer o SSH no servidor, tudo parece completamente diferente:
Eu tenho o Google por perto e há muitos tutoriais que dizem para você adicionar um monte de configurações estranhas, mas nenhuma realmente explica o que realmente está acontecendo nos bastidores (também, como você pode ver, nenhuma delas funcionou).
Aqui está o que tentei fazer para que funcionasse (sem realmente entender o porquê):
- Adicionado ao tmux.conf:
set^[[3m -g default-terminal "xterm-kitty"
set-option^[[3m -ga terminal-overrides ",xterm-kitty*:Tc"
- Adicionado o arquivo terminfo xterm-kitty
- Altere a
TERM
variável env para xterm-kitty no login
Eu adoraria que alguns recursos apontassem como tudo isso funciona! Obrigado!
Editar:
Para maior clareza, aqui estão os valores de TERM
I have :
- No host local:
xterm-kitty
- No host local dentro do tmux:
xterm-256color
- No host remoto diretamente após abrir o ssh:
xterm-kitty
- No host remoto no tmux:
xterm-256color
Todos os arquivos são sincronizados usando um repositório git, todas as versões são idênticas. Transferi o mesmo terminfo
arquivo relacionado xterm-kitty
em ambos os hosts. Além disso, usandoessescript, posso ver que todas as cores são exibidas corretamente e idênticas em ambos os hosts.
Também notei que o login na máquina remota sem tmux produz ainda outra combinação de cores (o mesmo arquivo de configuração de peixe usado em todos os lugares):
Responder1
default-terminal
define o padrão TERM
dentro do tmux. Não defina isso como xterm-kitty
- tmux não é xterm ou kitty. Defina-o tmux-256color
como se existir no seu computador (marque infocmp tmux-256color
), caso contrário screen-256color
.
Da mesma forma, não defina TERM
os perfis do shell da mesma forma para todos os terminais.
A terminal-overrides
linha que você tem diz ao tmux que quando ele é TERM
definido xterm-kitty
significa que o terminal suporta cores verdadeiras (RGB) (portanto Tc
).
TERM
dentro do tmux informa aos programas dentro do tmux com o que eles estão conversando (tmux). TERM
fora do tmux diz ao tmux com o que ele está falando (neste caso, gatinho).
Se funcionar localmente, mas não por ssh, o mais provável é:
Diferente
TERM
fora do tmux. Tem certezaecho $TERM
de que mostra o mesmo imediatamente antes de iniciar o tmux no computador local e no ssh?As configurações do tmux não são realmente as mesmas, tem certeza que são? Se você precisar
terminal-overrides
em um lugar, precisará em outro; se não, não precisará.Tem certeza de
xterm-kitty
que existe em ambos os computadores e é o mesmo? Verificarinfocmp xterm-kitty
.Diferentes versões do tmux. Tem certeza que eles são iguais? Verificar
tmux -V
.
Responder2
Se você estiver usando o tmux na máquina local e executando o ssh na máquina remota, não há como a sessão remota saber que você pode usar cores RGB em vez de (ou além de) indexadas (256 -cores). Isso ocorre porque a substituição do tmux "Tc" não é visível para a sessão remota.
Você pode contornar isso modificando a descrição do terminal que corresponde aoterminal padrãoconfiguração do tmux, por exemplo, adicionando quaisquer configurações que você usa comsubstituições de terminalao arquivo de texto para a descrição do terminal e usandotic
para compilá-lo (em cada máquina). Por exemplo (se oterminal padrãoétmux
):
infocmp -x tmux >foo
printf '\tTc,\n' >>foo
tic -x foo
Kitty tem umPerguntas frequentes, mas ignora "-x" parainfocmp
.
Existem alguns pontos restantes a serem considerados:
Copiando os arquivos binários criados por
tic
não é confiável (por mais de um motivo).Se a mesma descrição do terminal estiver disponível no lado remoto, você obterá um comportamento (mais) consistente, assumindo que o aplicativo remoto use a descrição do terminalcontenteem vez donomeda descrição do terminal.
Responder3
Consegui consertar! Foi uma combinação de todas as respostas dadas, com uma variável extra importante.
Etapas necessárias:
- Garantir que as
TERM
variáveis usadas sejam as mesmas em todos os hosts e dentro de cada tmux (acabei usandoxterm-kitty
diretamente nos hosts etlux-256color
dentro das sessões do TMUX).Agradecimentos a Nicholas Marriott. - adicione
Tc;
ao infocmp dos terminais que utilizo, usandoeste trecho fornecido por Thomas Dickey:
infocmp -x tmux-256color >foo
printf '\tTc,\n' >>foo
tic -x foo
- Adicione
set -g fish_term24bit 1
ao meu config.fish para forçar os peixes a usar o modo trucolor.