zsh: defina TERM = screen-256color no tmux, mas xterm-256color sem tmux

16

Eu preciso que meu $TERM seja xterm-256color fora do tmux (no terminal "simples" com zsh), mas screen-256color dentro do tmux.

Primeiro eu tentei:

  • adicione export TERM='xterm-256color' ao meu ~/.zshrc .
  • adicione set -g default-terminal "screen-256color" ao meu ~/.tmux.conf

Agora, quando eu abro o terminal (digamos, xterm), TERM é xterm-256color , o que está correto. Mas quando eu executo o tmux, TERM é novamente xterm-256color !

Depois tentei comentar a linha no meu ~/.zshrc . Agora, quando eu abro o terminal, TERM é xterm , e quando eu executo o tmux, TERM é screen-256color . Portanto, se eu definir TERM no .zshrc , o tmux define primeiramente TERM para screen-256color , executa shell (que é zsh) e zsh lê .zshrc e redefine TERM to xterm-256color .

Então, como fazer com que TERM seja xterm-256color no terminal "simples" e screen-256color no tmux?

    
por Dmitry Frank 25.06.2014 / 11:53

2 respostas

20

A variável de ambiente TERM deve ser definida pelo aplicativo que está atuando como seu terminal. Esse é o ponto principal da coisa: deixar os programas rodando dentro deles saberem qual terminal está sendo usado e, portanto, que tipo de recursos ele suporta.

O Zsh não é um terminal. É uma concha. Pode ser que o seu TERM esteja configurado para fazer coisas especiais, mas não deve ser responsável por configurar . Em vez disso, ele é 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 de qualquer aplicativo de terminal que esteja usando e solicitar que ele se informe adequadamente. Por exemplo, você pode fazer isso para o xterm adicionando esta linha ao arquivo ~/.Xdefaults que ele usa para valores de configuração:

xterm*termName: xterm-256color

Parece que o gnome-terminal faz a coisa idiota de ler o que seria sua configuração xterm em vez de ter sua própria configuração. Isso pode levá-lo em alguns casos, mas deve ser configurado corretamente para gnome-256color. Esta parece ser uma queixa de longa data contra ela (e alguns outros emuladores de terminal baseados em VTE). Uma forma comum de invadir esta é explorar outro valor que ele define:

if [ "$COLORTERM" = "gnome-terminal" ]; then
    export TERM=gnome-256color
fi 

Mas isso o leva de volta ao seu problema com o tmux, então você teria que considerar isso não redefinindo o TERM se já for algo como "screen-256color" ou "screen":

if [ "$COLORTERM" = "gnome-terminal" -a "$TERM" =~ xterm.* ]; then
    export TERM=gnome-256color
fi

Para outros terminais, você precisará procurar suas rotinas de configuração adequadas.

    
por 25.06.2014 / 12:44
5

Dentro do seu .zshrc, coloque

[[ $TMUX = "" ]] && export TERM="xterm-256color"

E dentro do seu arquivo .tmux.conf

set -g default-terminal "screen-256color"
    
por 07.12.2014 / 00:57

Tags