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 tmux
instances, 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 tmux
et tty
. Ensuite, nous corrigeons à nouveau, en utilisant une méthode qui devrait être toujours disponible (contrairement à command reset
).
Comment rendre un tmux
terminal UTF-8
inutilisable
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/cat
vous, vous ne pouvez pas provoquer un stty -echo
IMHO, mais des commandes interactives comme d' vim
habitude.)
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 Shift
pendant 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-window
est limité à l' tmux
endroit 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 title
qui a été corrompu, ce status-right
qui expose simplement un bogue de présentation. Notez également que je n'ai pas trouvé de tmux
commande 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 tmux
pré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 tmux
en remplacement du tmux
paramètre suivant :
set-window-option automatic-rename on
Faites ceci dans la tmux
ligne de commande, accessible dans la fenêtre actuelle avec "Escape" :
(où "Escape" est la tmux
clé de votre commande), puis entrez la commande.
Ou exécutez tmux set-window-option automatic-rename on
dans votre terminal actuel, mais cela échoue si vous n'êtes pas directement au bon niveau de shell, par exemple, cela ne fonctionne pas dans sudo
ou ssh
.
Ou ouvrez une autre fenêtre dans la tmux
session 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 tmux
et 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.