Comportement / rendu étrange sur tmux dans osx

2

Je suis aux prises avec ce problème depuis quelque temps déjà, et c’est vraiment énervant, mais je ne peux pas comprendre ce qui ne va pas. Que je sois sur Terminal.app ou iTerm2 lorsque je démarre une session tmux sur mon terminal, il y a toujours un espace étrange entre l’invite et le texte que je tape, environ 3 fois l’espace que j’ai à l’extérieur de tmux. Ce ne serait pas un gros problème en soi, mais lorsque j'essaie d'appuyer sur la touche Retour arrière pour supprimer quelque chose ou que j'utilise le mode vi (zsh) pour modifier quelque chose, le curseur s'affiche comme si le texte était à la bonne position (la manière dont il est affiché à l'extérieur). tmux) mais le texte est au mauvais endroit, il est donc impossible de savoir ce que je suis en train de modifier. De plus, lorsque j'appuie sur Entrée, le texte clignote à la bonne position, mais cela n'est pas vraiment utile à ce stade.

J'ai essayé de signaler le type $ TERM avec différentes options au démarrage de tmux, mais aucun ne semble le rendre meilleur.

Est-ce que quelqu'un sait ce que le problème pourrait être?

EDIT: C’est mon $ PROMPT / $ PS1:% {$ fg_bold [rouge]%}% {$ fg_bold [vert]%}% p% {$ fg [cyan]%}% c $ {$ fg_bold [bleu] %} $ (git_prompt_info)% {$ fg_bold [blue]%}%% {$ reset_color%}

uorbe001
la source
Avez-vous des caractères multi-octets dans votre invite? L' utf8option window est-elle activée pour vos fenêtres tmux ?
Chris Johnsen
@ChrisJohnsen Je pense que l'option de fenêtre utf8 est activée, car je règle ces deux lignes sur mon tmux.conf pour tenter de résoudre le problème (et pour autant que je sache, c'est ce qui devrait l'activer) set-option -g status-utf8 on setw -g utf8 on. En ce qui concerne les caractères multi-octets, comment dois-je vérifier cela?
uorbe001
Lors de la recherche de plusieurs octets, les principaux suspects sont des formes «fantaisistes» telles que des flèches, des triangles, des caractères accentués, etc. Si vous les transmettez à tmux quand il est utf8éteint, son idée de la position du curseur et celle du terminal externe la position sera différente; zsh demande la position du curseur, il est donc sensible à cet écart (qui apparaît sous forme d'espaces supplémentaires à la fin de son invite). Vous voudrez peut-être modifier votre question pour inclure votre valeur réelle PROMPT / PS1.
Chris Johnsen
@ChrisJohnsen J'ai des formes "fantaisistes", j'édite le message d'origine pour inclure ma valeur PROMPT comme suggéré :)
uorbe001
Êtes-vous sûr de ne pas avoir désactivé utf8cette fenêtre (bien que la valeur globale soit activée )? Je vois certainement des espaces supplémentaires lors de l’utilisation de votre valeur PROMPT si j’utilise set utf8 offla fenêtre. Que tmux show -w utf8 \; show -gw utf8montre dans une fenêtre que vous rencontrez des problèmes?
Chris Johnsen

Réponses:

3

Je l' ai vu un problème comme celui - ci lors de l' utilisation des caractères multi-octets (codées UTF-8) dans l'invite, mais seulement quand tmux l » utf8option de fenêtre est désactivée.

Pour identifier de tels caractères, recherchez des formes «fantaisistes», des symboles spéciaux ou des caractères accentués en dehors du répertoire ASCII (c'est-à-dire tout point de code Unicode supérieur à U + 007F).

Pour vérifier si l' utf8option est active, utilisez cette commande dans une fenêtre présentant le problème:

tmux show-option -gw utf8 \; show-option -w utf8

(ou à l' invite de tmux : sans les majusculestmux et sans la barre oblique inversée)

Si deux valeurs sont affichées, la seconde est la valeur active pour cette fenêtre. La première (ou la seule) valeur est la valeur globale qui sera utilisée s'il n'y a pas de valeur window-local établie.

Si vous voyez une valeur différente de celle établie par votre fichier de configuration, vous devrez probablement redémarrer votre serveur (ou si les modifications apportées par votre fichier de configuration sont idempotentes, vous pouvez le sourcefaire:) tmux source ~/.tmux.conf.


Le problème se pose car (sans cette optionutf8 ) tmux et votre émulateur de terminal externe ont une idée différente du nombre de colonnes utilisées pour afficher chaque caractère multi-octets. tmux s'attend à ce qu'un caractère multi-octets occupe plusieurs colonnes (une par octet), mais votre émulateur externe est probablement configuré pour le reconnaître en tant que caractère UTF-8 unique et le restituera ainsi dans une colonne unique.

Le problème est particulièrement visible dans une invite zsh , car zsh veille à bien situer le curseur afin de savoir à quel moment la ligne sera rompue et ce qu'il faut faire pour redessiner correctement l'invite. Malheureusement, le décalage entre (non utf8) tmux et l'émulateur externe (configuré avec UTF-8) amène tmux à signaler une position du curseur de plusieurs colonnes à droite de la position attendue (un espace supplémentaire pour chaque octet supplémentaire de chaque caractère multi-octets). dans l'invite).

L'activation utf8dans tmux corrige le problème car tmux et l'émulateur externe reconnaîtront les séquences de chaque point de code UTF-8 multi-octets comme occupant une seule colonne. Reconfiguration votre émulateur externe pour utiliser un codage sur un seul octet serait également corriger l'écart, mais au prix de ne pas être en mesure d'afficher correctement les données codées UTF-8 (bien que ce point de vue ne montre essentiellement vous ce que tmux est « pensée » quand utf8est de).

Chris Johnsen
la source
1
Dans mon cas, je n’ai pas remarqué que certaines sessions tmux étaient ouvertes sur l’arrière-plan avec des obus déjà fermés, je les ai trouvées en cours d’exécution tmux list-sessionset j’ai tout simplement mis fin au processus tmux. Tmux ne recharge le fichier tmux.conf qu'au redémarrage du serveur, donc mes modifications sur la conf n'étaient pas en cours de chargement.
uorbe001
Lorsque je configure utf8 dans tmux, vim arrête d’imprimer les caractères utf8 corrects! Il semble que je puisse (a) faire afficher par vim les caractères corrects mais avoir des lignes enveloppantes et du contenu un peu partout, ou (b) avoir une mise en page fixe mais ne pas obtenir les bons caractères!
artfulrobot
@artfulrobot: Vous devriez probablement commencer une nouvelle question, votre situation dépendra de vos paramètres de vim (par exemple tenc, fenc, enc, etc.) et éventuellement votre environnement (par exemple LANG, LC_CTYPE, etc.).
Chris Johnsen
1
Mise à jour rapide: l'option utf8 est supprimée dans les nouvelles versions de tmux
Mario
0

J'ai eu exactement la même erreur dans Terminal.app. Ce qui a résolu le problème pour moi, c’est d’aller dans "paramètres / paramètres / avancé" et de changer "Déclarer le terminal comme" en xterm-256color. Aucune idée pourquoi :)

Rune Kaagaard
la source