web-dev-qa-db-fra.com

Gnome-terminal ne fonctionne pas correctement avec screen-256 couleurs

Aujourd'hui, j'ai remarqué que je n'avais pas de support de 256 couleurs dans Weechat. J'ai décidé que ce serait une solution rapide. Ce n'est pas.

La première chose que j'ai recherchée sur Google a été de savoir comment tester le support des couleurs dans le terminal. J'ai installé colortest sur mon ordinateur local et, lorsque je l'exécute, il affiche 256 couleurs. Cependant, lorsque je lance echo $TERM, il ne cessait de me montrer xterm.

Comme je ne connais pas les détails de toutes ces choses, j'ai essayé de le configurer de manière à ce qu'il corresponde à tous les tutoriels sur le sujet. Ils disent tous que cela devrait me donner screen-256colors.

La première chose que j'ai faite a été d'ajouter ceci à mon fichier .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

Il est dit xterm-256colors au lieu de screen-256colors. Ce n'est pas grave, un tutoriel m'a dit de le faire.

Je démarre un nouveau terminal, echo $TERM et je remarque qu'il est bien réglé. Lancez un tmux et voyez ce que cela me dit quand je tape echo $TERM. Il dit screen. Donc, cela devrait me montrer screen-256colors pour que cela fonctionne correctement dans weechat. Alors ensuite, j'ai essayé de changer le xterm-256colors dans mon fichier .zshrc en screen-256colors, mais lorsque je le fais, la sortie est tronquée. Voir la capture d'écran.

enter image description here

Alors ensuite, j'ai cherché sur Google comment changer la variable pour tmux. J'ai trouvé ce lien . Il montre une option pour configurer tmux pour utiliser 256 couleurs. C'est une option qui est montrée dans presque tous les tutoriels.

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

Alors j'ai essayé, mais ça n'a rien changé. Alors, j'ai cherché sur Google et trouvé cette question . Citation:

Tmux est relativement difficile à définir correctement. Si vous le pouvez, définissez la valeur du terme dans la configuration de gnome-terminal et non dans votre .bashrc. Sinon, entourez ces paramètres en vérifiant "screen" ou "screen-256color" TERM, et ne les réinitialisez pas dans ce cas.

Bon, je comprends donc qu'en dehors de tmux, je ne devrais pas utiliser les valeurs screen* pour $TERM. Ce n'est pas grave car il est réglé sur xterm-256colors. Ensuite, il est clairement indiqué que je ne devrais pas écraser la variable $TERM si elle est définie sur screen. Je me suis assuré d’utiliser le test if dans mon fichier .zshrc.

Ce qui me déroute principalement, c’est que 256 couleurs fonctionnent réellement dans tmux. Voir la capture d'écran ci-dessous. Quand je lance echo $TERM dans tmux, il affiche screen. Quand je lance colortest-256, il me montre correctement toutes les couleurs. Pourtant, je pense que nous nous basons sur la variable $TERM pour afficher les couleurs. Et parce que je le lance dans tmux avec $TERM réglé sur screen, cela suppose que je n’ai pas de prise en charge de 256 couleurs.

enter image description here

Je suis perplexe sur la façon de résoudre ce problème. Tout ce que je voulais, c'étaient des couleurs dans weechat:>

Pour être complet, voici mes deux fichiers de configuration.

.zshrc

# Path to your oh-my-zsh installation.
export ZSH=/home/christophe/.oh-my-zsh
ZSH_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"
3

Tout d’abord, j'aimerais confirmer ce que vous avez déjà compris, à savoir que directement sous gnome-terminal (c’est-à-dire en dehors de tmux ou screen), vous devez définir TERM=xterm-256color, alors que dans tmux ou screen, il doit être réglé sur TERM=screen-256color.

Apparemment, votre segment .zshrc le définit correctement pour le shell exécuté directement par gnome-terminal.

Je ne suis pas sûr de ce qui doit être mis dans .tmux.conf, je l'ai résolu dans mon .bashrc de la même manière que votre fragment .zshrc pour xterm-256color. Je supprime également TERMCAP qui est défini par screen et pose quelques problèmes, mais apparemment tmux ne le définit pas, il ne devrait donc pas y avoir de différence.

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

Est-ce que cela résout le problème pour vous?

Soit dit en passant, au lieu de ces extraits, la copie de votre .tmux.conf règle également cette fonction correctement (sur Vivid), de sorte que vous êtes sur la bonne voie, cela devrait fonctionner. Y at-il peut-être quelque chose d'autre provenant de votre zsh (par exemple, la configuration globale, ou oh-my-zsh) qui revient au TERM=screen de 8/16 couleurs?

1
egmont