GNU/Linux >> Tutoriels Linux >  >> Linux

Zsh :définir Term=screen-256color dans Tmux, mais Xterm-256color sans Tmux ?

J'ai besoin de mon $TERM être xterm-256color en dehors de tmux (dans un terminal "plain" avec zsh), mais screen-256color à l'intérieur de tmux.

J'ai d'abord essayé :

  • ajoutez export TERM='xterm-256color' à mon ~/.zshrc .
  • ajouter set -g default-terminal "screen-256color" à mon ~/.tmux.conf

Maintenant, quand j'ouvre le terminal (par exemple, xterm), TERM est xterm-256color , qui est correct. Mais quand je lance tmux, TERM est à nouveau xterm-256color !

Ensuite, j'ai essayé de commenter la ligne dans mon ~/.zshrc . Maintenant, quand j'ouvre le terminal, TERM est xterm , et quand je lance tmux, TERM est screen-256color . Il semble donc que si je définisse TERM dans le .zshrc , tmux définit d'abord TERM à screen-256color , exécute shell (qui est zsh) et zsh lit .zshrc et réinitialise TERM à xterm-256color .

Alors, comment faire TERM être xterm-256color dans un terminal "ordinaire", et screen-256color dans tmux ?

Réponse acceptée :

La variable d'environnement TERM doit être définie par l'application qui agit comme votre terminal. C'est tout l'intérêt de la chose :permettre aux programmes qui s'exécutent à l'intérieur de savoir quel terminal est utilisé et donc quel type de fonctionnalités il prend en charge.

Zsh n'est pas un terminal. C'est une coquille. Il peut se soucier de la configuration de votre TERM s'il veut faire des choses spéciales, mais il ne devrait pas être responsable de la configuration ce. Au lieu de cela, il est responsable de la définition de variables telles que ZSH_VERSION qui peuvent être utilisées par des scripts ou d'autres processus enfants pour comprendre le comportement à attendre de leur shell parent.

Au lieu de cela, vous devez vérifier la configuration de l'application de terminal que vous utilisez et lui demander de se signaler correctement. Par exemple, vous pouvez le faire pour xterm en ajoutant cette ligne au ~/.Xdefaults fichier qu'il utilise pour les valeurs de configuration :

xterm*termName: xterm-256color

Il semble que gnome-terminal fasse la chose idiote de lire ce que serait votre configuration xterm au lieu d'avoir la sienne. Cela peut vous aider dans certains cas, mais il devrait être plus correctement défini sur gnome-256color. Cela semble être un reproche de longue date contre lui (et certains autres émulateurs de terminaux basés sur VTE). Un moyen courant de contourner cela consiste à exploiter une autre valeur qu'il définit :

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

Mais cela vous ramène à votre problème avec tmux, vous devrez donc en tenir compte en ne réinitialisant pas TERM s'il s'agit déjà de quelque chose comme "screen-256color" ou "screen":

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

Pour les autres terminaux, vous devrez rechercher leurs routines de configuration appropriées.

En relation :Comment faire en sorte que Safari définisse kMDItemWhereFroms lors de l'utilisation de "Enregistrer l'image dans les téléchargements" ?
Linux
  1. Quels émulateurs de terminaux prennent en charge le mode de contrôle Tmux ?

  2. Où le terme variable d'environnement par défaut est-il défini ?

  3. Vim ne fonctionne pas dans Tmux ?

  4. Utilisation de variables d'environnement dans les fichiers Tmux.conf ?

  5. Commande introuvable dans Zsh, mais trouvée dans Bash ?

Personnalisation de mon terminal Linux avec tmux et Git

Comment tmux suscite la joie dans votre terminal Linux

Prise en charge de Tmux, Term et 256 couleurs ?

tmux Ctrl+B ne fonctionne pas

Comment changer le titre du terminal Terminator, ZSH sur Debian ?

Définir la couleur de l'onglet tmux actif