Vous avez besoin de deux séquences de commandes pour nettoyer le désordre:
Tout d’abord, lancez ceci dans la fenêtre tronquée (cela fonctionne même lorsque vous êtes dans ssh):
stty sane; printf '\033k%s\033\\\033]2;%s\007' "`basename "$SHELL"`" "`uname -n`"; tput reset; tmux refresh
Puis lancez ceci sur l'ordinateur qui tourne tmux(ça marche à l'intérieur et à l'extérieur de tmux):
La commande suivante affecte toutes les tmuxinstances, ce qui peut modifier le statut de gauche de plus que la fenêtre actuelle. Si vous n'avez pas besoin de cette fonctionnalité, laissez-la de côté.
tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done
Expliqué en détail
Cela a été assemblé pour traiter tous les éléments trouvés dans d'autres réponses et commentaires. Il semble actuellement qu’un peu mineur reste avec la deuxième commande. (Voir dans le "bit manquant" ci-dessous).
Pour comprendre comment cela fonctionne, supprimons d’abord la ligne d’état de tmuxet tty. Ensuite, nous corrigeons à nouveau, en utilisant une méthode qui devrait être toujours disponible (contrairement à command reset).
Comment rendre un tmuxterminal UTF-8inutilisable
stty -echo; printf '\016\033k%2000s\\\033\033]2;\355\007' $'\302\217'
Avertissement: Après avoir exécuté la commande ci-dessus, le shell semble aveugle et sourd et ne semble parler que des conneries dans une langue étrangère inconnue. Voir ci-dessous comment réparer ceci.
A expliqué:
stty -echo tue la réponse de type terminal
printf '\016'fait un SO, donc vous êtes sur le jeu de caractères alternatif
printf '\033]2;%s\007' 'right status text'définit le bon statut, dans ce cas $'\355', ce qui expose un bogue de présentation
printf '\033k%2000s\033\\' $'\302\217' définit le nom du titre de la fenêtre
C'est peut-être la combinaison que vous pouvez voir sur le terminal après qu'une commande interactive se soit écrasée puis replacée dans le shell. (Avec /bin/catvous, vous ne pouvez pas provoquer un stty -echoIMHO, mais des commandes interactives comme d' vimhabitude.)
Maintenant, nettoyez ce gâchis
stty sane; printf '\033k%s\033\\\033]2;%s\007' "$(basename "$SHELL")" "$(uname -n)"; tput reset; tmux refresh
Remarque: Si vous utilisez le copier-coller (vous devez probablement maintenir la touche enfoncée Shiftpendant le collage), vous ne pourrez probablement pas voir votre coller si vous avez utilisé la commande ci-dessus pour vous tromper tty. Par conséquent, appuyez aveuglément sur la touche Entrée après avoir collé ceci.
A expliqué:
stty sane définit les paramètres terminaux "sains", de sorte que vous récupériez votre écho lors de la frappe
printf '\033k%s\033\\' "$(basename "$SHELL")"remet le titre de la fenêtre à la normale. Vous pouvez utiliser tmux rename-window "$(basename "$SHELL")"alternativement, cependant, tmux rename-windowest limité à l' tmuxendroit où la séquence d'échappement fonctionne toujours.
printf '\033]2;%s\007' "$(uname -n)"réinitialise le status-droit à afficher par défaut. (Notez que vous ne devez pas utiliser tmux set status-right "something", car il ne fait que sortir le fichier pane titlequi a été corrompu, ce status-rightqui expose simplement un bogue de présentation. Notez également que je n'ai pas trouvé de tmuxcommande permettant de définir directement le titre du volet.)
tput reset réinitialise le terminal, juste au cas où cela aurait été dérangé
tmux refresh rafraîchit l'écran pour se débarrasser des autres débris qui auraient pu apparaître
Peu manquant
Le printf '\033k%s\033\\' "$(basename "$SHELL")"perd la capacité standard de tmuxprésenter la commande en cours dans la zone d’état de gauche. Après avoir printf '\033k%s\033\\' "something"été exécuté, cette capacité est perdue et je n’ai pas trouvé le bon moyen de le ramener tel qu’il était auparavant.
Toutefois, comme indiqué dans les commentaires ci-dessous, vous pouvez activer une fonctionnalité similaire tmuxen remplacement du tmuxparamètre suivant :
set-window-option automatic-rename on
Faites ceci dans la tmuxligne de commande, accessible dans la fenêtre actuelle avec "Escape" :(où "Escape" est la tmuxclé de votre commande), puis entrez la commande.
Ou exécutez tmux set-window-option automatic-rename ondans votre terminal actuel, mais cela échoue si vous n'êtes pas directement au bon niveau de shell, par exemple, cela ne fonctionne pas dans sudoou ssh.
Ou ouvrez une autre fenêtre dans la tmuxsession en cours et exécutez la commande suivante:
for a in `tmux list-windows | sed 's/:.*//'; do tmux set-window-option -t "$a" automatic-rename on; done`
Ou ouvrez un autre shell sur l'ordinateur en cours d'exécution tmuxet exécutez la commande suivante (en dehors de tmux):
tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done
PS: Merci à tous ceux qui ont aidé à assembler cette solution.