O terminal Gnome não está funcionando corretamente com screen-256colors

3

Hoje percebi que não tinha suporte a 256 cores em Weechat. Eu decidi que isso seria uma solução rápida. Não é.

A primeira coisa que eu pesquisei foi como testar o suporte de cores no terminal. Eu instalei o colortest na minha máquina local e quando o executo ele mostra 256 cores. No entanto, quando eu corro echo $TERM , ele ficava me mostrando xterm .

Como não conheço os detalhes sobre todas essas coisas, tentei configurá-lo de modo que ele corresponda a todos os tutoriais sobre o tópico. Todos dizem que deveria me dar screen-256colors .

A primeira coisa que fiz foi adicionar isso ao meu arquivo .zshrc :

# If the $term variable is xterm, change it to 256 colors!
if [ "$TERM" = "xterm" ]; then
    # No it isn't, it's gnome-terminal
    export TERM="xterm-256color"
fi

Diz xterm-256colors em vez de screen-256colors . Tudo bem, algum tutorial me disse para fazer isso.

Eu inicio um novo terminal, echo $TERM e percebo que está realmente definido. Acione um tmux e veja o que isso me diz quando digito echo $TERM . Diz screen . Então, isso deve me mostrar screen-256colors para funcionar corretamente no weechat. Então, a seguir tentei alterar o xterm-256colors no meu arquivo .zshrc para screen-256colors , mas quando faço isso, recebo uma saída distorcida. Veja a captura de tela.

Então,emseguida,eupesquiseisobrecomoalteraravariávelparaotmux.Euencontrei este link . Ele mostra uma opção para configurar o tmux para usar 256 cores. É uma opção que é mostrada em quase todos os tutoriais.

set -g default-terminal "screen-256color"

Então eu tentei, mas não mudou nada. Então eu pesquisei um pouco mais e encontrei esta pergunta . Citação:

Tmux is relatively picky about having a terminal set correctly. If you can, set the term value in gnome-terminal's configuration, not in your .bashrc. Failing that, surround those settings with a check for "screen" or "screen-256color" TERM, and don't reset them in that case.

Ok, entendo que, fora de tmux , não devo usar valores de screen* para $TERM . Tudo bem, porque está definido para xterm-256colors . Em seguida, afirma claramente que não devo substituir a variável $TERM se estiver definida como screen . Que eu tenho certeza de usar o teste if no meu arquivo .zshrc .

O que mais me confunde é que 256 cores realmente funcionam no tmux. Veja a imagem abaixo. Quando executo echo $TERM dentro do tmux, ele mostra screen . Quando eu executo colortest-256 , ele mostra todas as cores corretamente. No entanto, penso que base-se na variável $TERM para mostrar cores. E porque eu o executo dentro de tmux com $TERM definido como screen , presumo que não tenho suporte a 256 cores.

Estouperplexosobrecomoresolveresseproblema.Tudooqueeuqueriaeramalgumascoresnoweechat:>

Paracompletar,abaixoestãoosmeusdoisarquivosdeconfiguração.

.zshrc

#Pathtoyouroh-my-zshinstallation.exportZSH=/home/christophe/.oh-my-zshZSH_THEME="flazz"
plugins=(git command-not-found common-aliases dircycle lein)


# Show dots for progress
COMPLETION_WAITING_DOTS="true"

##########
## PATH ##
##########

# Export directory if it exists.
#if [ -d "/usr/local/go/bin" ]; then
#    export PATH=$PATH:/usr/local/go/bin
#fi

#############
## ALIASES ##
#############

alias randompass="< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;"

############
## TWEAKS ##
############

# Disable shared history
setopt no_share_history


# Start existing or new tmux session each shell startup
#[[ $TERM != "screen" ]] && exec tmux attach -d
alias chat='tmux attach -dt weechat || tmux new -s weechat \; new-window htop'


# If the $term variable is xterm, change it to 256 colors!
if [ "$TERM" = "xterm" ]; then
    # No it isn't, it's gnome-terminal
    export TERM="xterm-256color"
fi


######################
# User configuration #
######################

export PATH="/home/christophe/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
source $ZSH/oh-my-zsh.sh

.tmux.conf

# 256 color support
set -g default-terminal "screen-256color"
    
por Christophe De Troyer 29.04.2015 / 18:22

1 resposta

1

Primeiro, gostaria de confirmar o que você já descobriu, ou seja, diretamente abaixo de gnome-terminal (ou seja, fora de tmux ou screen ) você deve definir TERM=xterm-256color , enquanto dentro tmux ou screen deve ser definido como TERM=screen-256color .

Aparentemente, seu segmento .zshrc o define corretamente para o shell executado diretamente pelo gnome-terminal.

Não tenho certeza do que precisa ser colocado em .tmux.conf , eu o resolvi no meu .bashrc da mesma forma que o fragmento .zshrc do xterm-256color. Eu também removi TERMCAP que é definido por screen e causa alguns problemas, mas aparentemente tmux não o define, então não deve fazer diferença para você.

if [ "$TERM" = "xterm" ]; then
    export TERM=xterm-256color
fi
if [ "$TERM" = "screen" -o "$TERM" = "screen-256color" ]; then
    export TERM=screen-256color
    unset TERMCAP
fi

Isso resolve o problema para você?

A propósito, em vez desses trechos, copiar seu .tmux.conf também define isso corretamente para mim (no Vivid), então você está no caminho certo, deve funcionar. Existe talvez algo mais originado pelo seu zsh (por exemplo, a configuração global, ou oh-my-zsh) que reverte para a cor de 8/16 TERM=screen ?

    
por egmont 29.04.2015 / 22:40