J'ai accidentellement vissé mon terminal tmux après cat
ing un fichier binaire. Maintenant, mon tmux
est foiré. Le détachement et la remise en place n'aident pas, pas plus que le redessin (C-b r). L'exécution de reset
ne fait que redessiner le volet actif, pas le reste. Fonctionnement ssty sane
à l'intérieur ou à l'extérieur tmux
n'aide pas non plus.
Dans chaque volet, j'ai un retour normal de ce que je tape (l'appel initial de reset
immédiatement après que le terminal a été gâché 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 une augmentation de la barre d'état (voir 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 nouveau tracé (par C-b r
, en exécutant reset
ou 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 sur une seule ligne, mais elle reste corrompue comme illustré.
J'utilise tmux 1.5.
tmux
- terminal?Ce rapport de bogue de 2008 semble décrire le même problème, mais il a été marqué comme corrigé. Je ne sais pas dans quelle version il a été corrigé, mais tmux 1.5 devrait inclure un correctif de 2008.
Essayez de renommer la fenêtre 4
(C'est une virgule au milieu)
Ou: Control+b :rename-window myNewname
Vous avez besoin de deux séquences de commandes pour nettoyer le désordre:
Tout d'abord, exécutez ceci dans la fenêtre brouillé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
Exécutez ensuite ceci sur l'ordinateur qui exécute tmux
(cela fonctionne à l'intérieur et à l'extérieur de tmux
):
La commande suivante affecte toutes les instances
tmux
, ce qui peut modifier l'état 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
Cela a été assemblé pour répondre à tous les bits trouvés dans d'autres réponses et commentaires. Il ne semble actuellement qu'un petit peu 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 le corrigeons à nouveau, en utilisant une méthode qui devrait toujours être disponible (contrairement à la commande reset
).
tmux
(suppose que UTF-8
) Inutilisablestty -echo; printf '\016\033k%2000s\\\033\033]2;\355\007' $'\302\217'
Attention: Après avoir exécuté la commande ci-dessus, le shell a l'air aveugle et sourd et semble ne parler que de conneries dans une langue étrangère inconnue. Voir ci-dessous comment réparer cela.
Expliqué:
stty -echo
Tue la réponse du type de terminal
printf '\016'
Fait un SO
, vous êtes donc sur le jeu de caractères alternatif
printf '\033]2;%s\007' 'right status text'
Définit le bon état, 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
Cela pourrait être la combinaison que vous pouvez voir sur le terminal après qu'une commande interactive se soit écrasée et replacée dans le shell. (Avec /bin/cat
Vous ne pouvez pas provoquer stty -echo
À mon humble avis, mais les commandes interactives comme vim
définissent généralement cela.)
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
Shift
enfoncé pendant le collage), vous ne pourrez probablement pas voir votre collage si vous avez utilisé la commande ci-dessus pour gâcher votretty
. Par conséquent, appuyez simplement à l'aveugle sur la touche Entrée après l'avoir collé.
Expliqué:
stty sane
Définit des paramètres de terminal "sains", vous récupérez donc votre écho en tapant
printf '\033k%s\033\\' "$(basename "$Shell")"
remet le titre de la fenêtre à la normale. Vous pouvez également utiliser tmux rename-window "$(basename "$Shell")"
, mais tmux rename-window
Est limité à tmux
où la séquence d'échappement fonctionne toujours.
printf '\033]2;%s\007' "$(uname -n)"
réinitialise le droit d'état à afficher par défaut. (Notez que vous ne devez pas utiliser tmux set status-right "something"
, Car il ne produit que le pane title
Qui a été corrompu, donc status-right
Expose simplement un bogue de présentation. Notez également que je n'ai pas trouvé une commande tmux
pour définir directement le titre du volet.)
tput reset
Réinitialise le terminal, juste au cas où cela aurait été gâché
tmux refresh
Rafraîchit l'écran pour se débarrasser des autres débris qui auraient pu apparaître
La fonction printf '\033k%s\033\\' "$(basename "$Shell")"
perd la capacité standard de tmux
de présenter la commande actuelle dans la zone d'état de gauche. Après que printf '\033k%s\033\\' "something"
A été exécuté, cette capacité est perdue et je n'ai pas encore trouvé un bon moyen de la ramener comme avant.
Mais, comme indiqué dans les commentaires ci-dessous, vous pouvez activer une fonctionnalité similaire de tmux
en remplacement avec le paramètre tmux
suivant:
set-window-option automatic-rename on
Soit faites ceci dans la ligne de commande tmux
, qui peut être atteinte dans la fenêtre courante avec "Escape" :
(Où "Escape" est votre clé de commande tmux
), 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 du shell, par exemple cela ne fonctionne pas dans Sudo
ou ssh
.
Ou ouvrez une autre fenêtre dans la session tmux
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 qui exécute 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.
Le problème spécifique que vous voyez a à voir avec le nom/titre de la fenêtre 4. Une combinaison d'être trop long (évidemment) et contenant des caractères étranges qui amène tmux à le mesurer comme étant plus court (donc il ne parvient pas à limiter correctement la barre d'état à la 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.
faites simplement ceci $ reset && tmux rename-window <new_window_name>
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 je ne pouvais pas être dérangé pour comprendre ce que c'était.
Essayez de recharger votre fichier de configuration?
Ctrlb, puis: :source-file ~/.tmux.conf
tmux
pourrait ne constituer qu'une partie du problème. Vous devrez peut-être invoquer stty sane
sur la ligne de commande. Cela réinitialise les pilotes TTY dans le noyau à un ensemble de valeurs par défaut qui vous permettent généralement de continuer. Si les pilotes TTY sont suffisamment gâchés, vous devrez peut-être taper stty sane
"aveugle", c'est-à-dire sans rétroaction à l'écran.