La barre d'état de tmux est corrompue après l'installation d'un fichier binaire. Comment réinitialiser?

94

J'ai accidentellement vissé mon terminal tmux après l’installation d’ catun fichier binaire. Maintenant, mon tmuxest foiré. Détacher et ré-attacher ne sert à rien, pas plus qu’un redessin (Cb r). L'exécution resetne fait que redessiner le volet actif, pas le reste. Courir ssty sanededans ou dehors tmuxn'aide pas non plus.

tmux foiré

Dans chaque volet, le retour que je tape est normal (l’appel initial resetimmédiatement après que le terminal se soit égaré a résolu ce problème), mais je n'arrive pas à corriger la barre d’état.

Dans gnome-terminal, chaque mise à jour de la barre d'état entraîne la croissance de la barre d'état (voir la capture d'écran ci-dessus). Par exemple, cela se produit lorsque j'exécute une nouvelle application, lorsque je change de volet ou lorsque je redimensionne un volet. Forcer un rafraîchissement (Par C-b r, en exécutant resetou via le menu gnome-terminal) réduit la barre d'état à une seule ligne, mais elle reste corrompue.

Dans xterm, la barre d'état reste dans une ligne, mais elle reste corrompue comme sur la photo.

J'utilise tmux 1.5.

  • Comment puis-je réparer mon tmuxterminal?

Ce rapport de bogue de 2008 semble décrire le même problème, mais il a été marqué comme étant résolu. Je ne sais pas dans quelle version il a été corrigé, mais tmux 1.5 devrait inclure un correctif de 2008.

gerrit
la source
Juste eu ce problème, et "clair" a fonctionné pour moi.
user149818
1
Au cas où quelqu'un rencontrerait le même problème, après avoir fait tout ce qui précède, ma barre d'état de tmux était toujours foirée. La définition de l’option window-status-right l’a réparée.
2
La suggestion ci-dessus l'a corrigé pour moi aussi. La commande à faire était la suivante: Control+ b+ :, puis set -g status-right "#H"de définir status-right sur le nom d'hôte.
Mayank

Réponses:

85

Essayez de renommer la fenêtre 4

  • Passer à la fenêtre 4: Control+b 4
  • Renommer la fenêtre: Control+ b , Control+ umyNewname

(C'est une virgule au milieu)

Ou: Control+b :rename-window myNewname

Rqomey
la source
1
Renommer la fenêtre fonctionne à merveille
Exhuma Le
4
Vous devez effacer le nom avant de saisir le nouveau. Le moyen le plus simple est avec ctrl+u, donc la séquence complète estctrl+b , ctrl+u newname
z0r
1
Sweet - ça marche byobuaussi ( f8, <newname>)
ali_m
Pourquoi est-ce Control-unécessaire? Control-,est-ce déjà renommer? Bien que je puisse confirmer que cela était nécessaire dans mon cas, s'agit-il d'un caractère de réinitialisation?
hbogert
1
Control-u efface la ligne. si vous connaissez votre mot de passe dans un terminal et que vous le connaissez, vous pouvez effacer l'entrée à l'aide de control-u, au lieu d'
appuyer sur la touche
55

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.

Tino
la source
2
S'il vous plaît noter le uname -nau lieu de hostname -s. hostnameest dangereux dans son rootcontexte, car vous pourriez vous retrouver avec un hôte renommé -ssur une ancienne Linux / Unix où les hostnameoptions ne sont pas disponibles.
Tino
Ne pas réinitialiser le titre du volet me rend triste aussi; c'est pourquoi je suis même ici en premier lieu. Merci d'être le seul sur la page à reconnaître au moins cette lacune!
Evaned le
2
Considérez également "tmux setw automatic-rename" après avoir corrigé le titre de la fenêtre
EB.
La stty sanepartie m'a aidé lorsque mon terminal était foutu et n'a rien montré. Je vous remercie!
johnny
Si vous voulez le "bit manquant", c'est-à-dire la commande en cours d'exécution affichée dans la zone d'état de gauche, vous pouvez utiliser la commande tmux set-window-option automatic-rename.
David Foerster
26

Le problème spécifique que vous voyez est lié au nom / titre de la fenêtre 4. Une combinaison d'être trop long (évidemment) et de contenir des caractères étranges qui font que tmux le mesure comme étant plus court (il ne parvient donc pas à limiter correctement la barre d'état largeur de l’écran). Je ne sais pas comment le réinitialiser (sur le mien, il suit le nom du processus de premier plan), vous devrez peut-être fermer la fenêtre.

Au hasard832
la source
4
par défaut pour renommer une fenêtre est^b - ,
Rob
8
Au cas où le raccourci clavier dans le commentaire de @ Rob vous dérouterait, c'est Ctrl- balors ,.
Doug Paul
Notez que lorsque vous renommez une fenêtre, le champ est pré-rempli avec le nom de la fenêtre actuelle (et votre curseur se trouve à la fin de ce nom). Comme le nom de ma fenêtre était une longue séquence de déchets, je devais rester appuyé Backspacependant une minute pour effacer le nom actuel. Pour moi, les retours visuels ont finalement montré que tout l'ancien nom avait été effacé.
Doug Paul
vous pouvez également utiliser Ctrl-b :rename-window <nom va ici>; ceci utilise le système de commande tmux au lieu du raccourci clavier pour cette commande.
Abbafei
5

fais simplement ceci $ reset && tmux rename-window <new_window_name>

John Morales
la source
5
tmux set-option -g status off && tmux set-option -g status on 

corrigé cela pour moi quand quelque chose d'autre que le nom de la fenêtre était corrompu et que je ne pouvais pas être dérangé de savoir ce que c'était.

Harald Wagener
la source
2

tmuxpourrait ne constituer qu'une partie du problème. Vous devrez peut-être faire appel stty saneà la ligne de commande. Cela réinitialise les pilotes TTY dans le noyau sur un ensemble de valeurs par défaut qui vous permettent généralement de continuer. Si les pilotes de téléscripteur sont suffisamment compliqués, vous devrez peut-être taper stty sane"aveugle", c'est-à-dire sans rétroaction à l'écran.

Bruce Ediger
la source
stty sanene résout pas le problème non plus. J'ai des commentaires à l'écran. Dans chaque tmuxpanneau, je peux taper et avoir des commentaires comme d'habitude, mais dès que tmux doit dessiner quelque chose (par exemple, exécuter une nouvelle application, changer de panneau ou le redimensionner), la barre d'état se déplace dans les panneaux. ...
gerrit
2

Essayez de recharger votre fichier de configuration?

Ctrlb, puis: :source-file ~/.tmux.conf

Pas maintenant
la source
meilleure solution jusqu'à présent.
dave
-3

pour résoudre le problème pour moi:

Je viens de tuer le volet et la fenêtre du problème et j'ai créé une nouvelle fenêtre et un nouveau volet.

Dans le volet des problèmes, CTRL+ AXet CTRL+ AC.

Itech
la source
cette façon pour moi à nouveau. pas d' autres moyens peuvent aider
ITECH