Eu preciso que eu $TERM
esteja xterm-256color
fora do tmux (no terminal "simples" com zsh), mas screen-256color
dentro do tmux.
Primeiro eu tentei:
- adicionar
export TERM='xterm-256color'
ao meu~/.zshrc
. - adicionar
set -g default-terminal "screen-256color"
ao meu~/.tmux.conf
Agora, quando abro o terminal (digamos, xterm), TERM
é xterm-256color
, o que está correto. Mas quando eu corro tmux, TERM
é de novo xterm-256color
!
Então eu tentei comentar a linha no meu ~/.zshrc
. Agora, quando abro o terminal, TERM
é xterm
, e quando executo o tmux, TERM
é screen-256color
. Assim, parece se eu definir TERM
na .zshrc
, tmux em primeiro lugar conjuntos TERM
para screen-256color
, corre Shell (que é zsh), e zsh lê .zshrc
e redefine TERM
a xterm-256color
.
Então, como fazer TERM
para estar xterm-256color
no terminal "simples" e screen-256color
no tmux?
TERM
esses terminaisgnome-terminal
, isso provavelmente deveria sergnome-256color
... Portanto, são esses aplicativos que você precisa configurar corretamente, nãozsh
. O motivo pelo qual eles usamxterm
é provavelmente para evitar problemas ao enviar para máquinas que não possuem as entradas terminfo mais específicas. Se você sabe que está fazendo o sshing apenas para máquinas com um banco de dados terminfo exaustivo, pode e deve alterar isso nos próprios aplicativos.xterm
se o xterm-256color não for suportado, ainda seria melhor adicionar essas entradas em nosso próprio banco de dados ~ / .terminfo)..zshrc
. Não é o caminho correto.Respostas:
A variável de ambiente TERM deve ser definida pelo aplicativo que está atuando como seu terminal. Esse é o ponto principal: deixar os programas executados dentro deles saberem qual terminal está sendo usado e, portanto, que tipo de recursos ele suporta.
Zsh não é um terminal. É uma concha. Pode se importar com o que seu TERM está definido, se desejar fazer coisas especiais, mas não deve ser responsável por defini- lo. Em vez disso, é responsável por definir variáveis como ZSH_VERSION, que podem ser usadas por scripts ou outros processos filhos para entender qual comportamento esperar do shell pai.
Em vez disso, você precisa verificar a configuração para qualquer aplicativo de terminal que esteja usando e solicitar que ele se reporte adequadamente. Por exemplo, você pode fazer isso no xterm adicionando esta linha ao
~/.Xdefaults
arquivo que ele usa para valores de configuração:Parece que o gnome-terminal faz a coisa idiota de ler qual seria a sua configuração xterm em vez de ter a sua própria. Isso pode ajudá-lo em alguns casos, mas deve ser definido mais adequadamente como gnome-256color. Parece ser uma reclamação de longa data contra ele (e alguns outros emuladores de terminal baseados em VTE). Uma maneira comum de contornar isso é explorar outro valor que ele define:
Mas isso traz você de volta ao seu problema com o tmux, então você teria que explicar isso, não redefinindo TERM se já fosse algo como "screen-256color" ou "screen":
Para outros terminais, você precisará procurar as rotinas de configuração adequadas.
fonte
zsh
não é responsável pela configuração$SHELL
.login
é responsável por defini-lo, e você é responsável por alterá-lo para outra coisa, se desejar informar aos aplicativos (xterm
,vi
...) qual shell você deseja como seu shell preferido.zsh
é responsável pela configuração$ZSH_VERSION
e algumas variáveis especiais documentadas do shell, mas não toca$SHELL
.konsole
definir TERM em vez de colocá-lo no meu bashrc. Encontrado definido na guia Geral do perfil, Ambiente, alterado dexterm
paraxterm-256color
truecolor
vez degnome-terminal
para$COLORTERM
e, portanto, o mecanismo de detecção acima pode não funcionar. O XTERM não parece definir esse valor, pode ser válido verificar qualquer valor. este tipo de termo é discutido parcialmente nesta lista, possivelmente em outro lugar: gist.github.com/XVilka/8346728#true-color-detectionDentro do seu .zshrc, coloque
E, dentro do seu .tmux.conf
fonte
[[ $TMUX != "" ]] && export TERM="screen-256color"
Desta forma zsh irá definir prazo só se for chamado dentro de uma sessão tmux