J'ai un comportement bizarre qui semble être une combinaison de zsh et peut-être urxvt ( ?) Ma configuration est la suivante : Je lance urxvt -e 'tmux'
pour me procurer un terminal qui lance zsh
comme le Shell par défaut.
J'ai ensuite commencé à personnaliser mon $PROMPT
et il ressemble actuellement à ceci :
zstyle ':vcs_info:*' enable git svn hg bzr
zstyle ':vcs_info:*' formats $' \e[0;33m(%s:%b)\e[0m'
precmd () { vcs_info }
PROMPT+=$'\e[0;31m%n\e[0m'
PROMPT+="@"
PROMPT+=$'\e[0;34m%m\e[0m'
PROMPT+=":"
PROMPT+=$'\e[0;36m%3c\e[0m'
PROMPT+=$'\e[0;33m%c\e[0m'
PROMPT+='${vcs_info_msg_0_}'
export PROMPT
Vous pouvez remarquer que le deuxième %c
c'est, bien sûr, pour les tests.
Le comportement normal d'une invite est de créer une nouvelle ligne après avoir appuyé sur la touche Entrée, en exécutant éventuellement la commande qui peut être présente. La nouvelle ligne est imprimée. Cependant, je remarque un comportement différent dans certaines circonstances : Lorsque j'appuie sur Entrée, la commande est exécutée et la sortie est affichée. Cependant si l'invite précédente n'était pas en haut du terminal, la dernière ligne de la sortie précédente est écrasée car la nouvelle sortie est déplacée d'une ligne vers le haut.
Peut-être qu'un exemple s'impose. Commencez par un terminal vide et une nouvelle invite :
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)
Maintenant, nous entrons ls -la
dans ce répertoire (exemple de sortie) :
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)
Remarquez qu'il manque quelque chose, car en réalité, il y a une .git
ici :
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .git
Ce qui s'est passé ici est facile à décrire : La sortie de la commande est générée correctement, mais la ligne d'invite est avancée d'une ligne et écrase la dernière ligne de sortie. Donc, si je refais la même chose, ma sortie ressemble à ceci :
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)
Comme vous pouvez le voir, tout a été déplacé vers le haut une fois de plus, cette fois-ci en remplaçant les ..
de la dernière sortie et le .git
de cette sortie.
Mais cela ne se produit pas sur toutes les configurations. Cela ne se produit que lorsque la fenêtre est trop étroite. J'ai également testé cela en redimensionnant la fenêtre urxvt ouverte avec zsh à l'intérieur. Quand je la rend trop étroite. D'après ce que je vois, cela commence lorsque l'invite occupe environ deux tiers de la largeur de la fenêtre. Cependant, je ne sais pas pourquoi cela se produit à cette occasion.
Quelques notes : - Cela ne se produit pas avec bash (même si l'invite elle-même est multiligne). - RPROMPT
y RPROMPT2
sont vides - Il ne semble pas dépendre du type d'informations affichées (c'est-à-dire de la désactivation de l'affichage de l'information). vcs_info
n'aide que si l'invite redevient suffisamment courte) - Cela ne se produit pas lorsque l'invite est multiligne (et que la deuxième ligne n'atteint pas les deux tiers de la ligne). - Cela ne se produit pas dans une console (tty), mais cela se produit avec xterm. y urxvt.
Resumen : Mon invite zsh se déplace lors de la remontée de la ligne si la ligne d'invite fait environ deux tiers de la longueur de la fenêtre.