J'ai besoin que je $TERM
sois en xterm-256color
dehors de tmux (dans un terminal "ordinaire" avec zsh), mais à l' screen-256color
intérieur de tmux.
J'ai d'abord essayé:
- ajouter
export TERM='xterm-256color'
à mon~/.zshrc
. - ajouter
set -g default-terminal "screen-256color"
à mon~/.tmux.conf
Maintenant, quand j'ouvre le terminal (disons, xterm), TERM
c'est xterm-256color
, ce qui est correct. Mais quand je lance tmux, TERM
c'est à nouveau xterm-256color
!
Ensuite, j'ai essayé de commenter la ligne dans mon ~/.zshrc
. Maintenant, quand j'ouvre le terminal, TERM
c'est xterm
, et quand j'exécute tmux, TERM
c'est screen-256color
. Il semble donc que si je mets TERM
dans le .zshrc
, tmux définit d'abord TERM
sur screen-256color
, exécute shell (qui est zsh), et zsh lit .zshrc
et se réinitialise TERM
sur xterm-256color
.
Alors, comment faire TERM
pour être xterm-256color
dans un terminal "ordinaire", et screen-256color
dans tmux?
TERM
dans ces terminauxgnome-terminal
, cela devrait probablement êtregnome-256color
... Ce sont donc ces applications que vous devez configurer correctement, nonzsh
. La raison pour laquelle ils les utilisentxterm
est probablement pour éviter les problèmes lors de la lecture sur des machines qui n'ont pas les entrées terminfo plus spécifiques. Si vous savez que vous utilisez uniquement des machines avec une base de données terminfo exhaustive, vous pouvez et devez changer cela dans les applications elles-mêmes.xterm
si xterm-256color n'est pas pris en charge, bien qu'il serait encore mieux d'ajouter ces entrées dans notre propre base de données ~ / .terminfo)..zshrc
. Ce n'est pas la bonne façon.Réponses:
La variable d'environnement TERM doit être définie par l'application qui fait office de terminal. C'est tout l'intérêt de la chose: permettre aux programmes qui y sont exécutés 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 ce que votre TERM est défini s'il veut faire des choses spéciales, mais il ne devrait pas être responsable de le définir . Au lieu de cela, il est chargé de définir des 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: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 devrait être plus correctement défini sur gnome-256color. Cela semble être un grief de longue date contre lui (et certains autres émulateurs de terminaux basés sur VTE). Une façon courante de contourner cela est d'exploiter une autre valeur qu'elle définit:
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":
Pour les autres terminaux, vous devrez rechercher leurs routines de configuration appropriées.
la source
zsh
n'est pas responsable du réglage$SHELL
.login
est responsable de sa configuration, et vous êtes responsable de changer cela en quelque chose d'autre si vous voulez dire aux applications (xterm
,vi
...) quel shell vous voulez comme shell préféré.zsh
est responsable de la définition$ZSH_VERSION
et de quelques variables de shell spéciales documentées, mais il ne les touche pas$SHELL
.konsole
définir TERM plutôt que de le mettre dans mon bashrc. Je l' ai trouvé situé dans l'onglet Général du profil, l' environnement, il a changé dexterm
àxterm-256color
truecolor
au lieu degnome-terminal
for$COLORTERM
et que le mécanisme de détection ci-dessus peut ne pas fonctionner. XTERM ne semble pas du tout définir cette valeur, il peut être valide de vérifier n'importe quelle valeur. ce type de terme est partiellement discuté dans cet essentiel peut-être ailleurs: gist.github.com/XVilka/8346728#true-color-detectionDans votre .zshrc, mettez
Et, à l'intérieur de votre .tmux.conf
la source
[[ $TMUX != "" ]] && export TERM="screen-256color"
cette façon, zsh ne définira TERM que s'il est appelé dans une session tmux