web-dev-qa-db-fra.com

Invite personnalisée par Tmux et ZSH: bogue avec le nom de la fenêtre

J'ai personnalisé mon invite ZSH avec oh-my-zsh pour le rendre plus lisible et ajouter des informations sur git si je me trouve dans un référentiel.

Exemple :
bob@inf [~/docs] %
bob@inf [~/src/nicest] master % (dans un dépôt git)

Cela fonctionne bien, mais j'ai quelques bugs avec tmuxet le nom de la fenêtre. Il affiche toujours une valeur non sens et je ne peux pas le désactiver avec automatic-rename off (cela ne fonctionne tout simplement pas, le nom de la fenêtre change après chaque commande). Pour le premier exemple, tmux utilise ~/docs pour le nom de la fenêtre.

Je ne suis pas sûr de la façon dont je peux résoudre le problème. J'aimerais conserver mon invite de commande zsh tel qu'il est, si je peux apporter des modifications, mais j'aimerais comprendre où se situe le problème?

Une autre solution consiste peut-être à redéfinir la commande settile(from this answer ), mais je ne sais pas comment le faire de la bonne façon.

43
Adrien Coquio

J'ai jeté un coup d'oeil à oh-my-zsh et ai trouvé un probablement suspect .

Lorsque la valeur de la variable d’environnement TERM commence par screen(qu’il convient de placer sous , écran et tmux ), il utilise une séquence de contrôle terminal écran pour définir le nom de la fenêtre sur

  • (juste avant d'afficher une invite de shell)
    la partie la plus à gauche du chemin "tilde compressé" du répertoire de travail actuel (.. suivi des 13 derniers caractères ou du chemin complet s'il contient moins de 15 caractères) et
  • (juste avant de lancer une commande)
    le premier "mot" de la commande sur le point d'être exécutée (sans compter sshname__, Sudoet quelques autres).

Il semble que cela fonctionne de cette façon pour vous (vous avez dit que votre fenêtre nommée avait été changée en ~/docs lorsque vous vous trouviez dans ce répertoire). Si vous souhaitez désactiver ce changement de nom automatique, vous pouvez le désactiver complètement en définissant le paramètre Shell DISABLE_AUTO_TITLE sur truedans votre .zshrc:

DISABLE_AUTO_TITLE=true

Si vous définissez simplement cela dans un shell interactif, vous obtiendrez une chaîne vide pour le nom de la fenêtre en cours, mais oh-my-zsh arrêtera de mettre à jour la fenêtre avant chaque invite et chaque commande dans cette instance de shell (elle doit figurer dans votre .zshrc pour affecter toutes les nouvelles instances de Shell).

75
Chris Johnsen

Je sais que la réponse ci-dessus vous donne une solution, mais une autre consiste à ajouter simplement cette option à votre ~/.tmux.conf

set-option -g allow-rename off
28
albertogg

J'ai rencontré le même problème, c'est-à-dire que le nom de la fenêtre de tmux a été modifié même en configurant le fichier .tmux.conf:

set-window-option -g automatic-rename off

Merci la réponse de Chris. Le nom de ma fenêtre tmux n’a pas été renommé automatiquement après avoir changé:

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

à:

set -g default-terminal "xterm-256color"
5
rwxrwxrwx

Si vous souhaitez désactiver le changement de nom automatique uniquement pour certaines fenêtres, vous pouvez utiliser:

 set -t [WINDOW_NUMBER] automatic-rename off

Désactivez le renommage automatique dans une fenêtre spécifique d'une autre session:

 set -t [SESSION]:[WINDOW_NUMBER] automatic-rename off
0
Viktor Nonov