La barra de estado de tmux está dañada después de capturar un archivo binario, ¿cómo restablecerla?


94

Accidentalmente arruino mi terminal tmux después catde crear un archivo binario. Ahora mi tmuxestá en mal estado. Separar y volver a unir no ayuda, ni tampoco volver a dibujar (Cb r). La ejecución resetsolo vuelve a dibujar el panel activo, no el resto. Correr ssty sanedentro o fuera tmuxtampoco ayuda.

tmux en mal estado

Dentro de cada panel, tengo comentarios normales de lo que escribo (la llamada inicial de resetinmediatamente después de que el terminal se estropeó resolvió esto), pero parece que no puedo arreglar la barra de estado.

En gnome-terminal, cada actualización de la barra de estado lleva a la barra de estado a crecer (ver captura de pantalla arriba). Por ejemplo, esto sucede cuando ejecuto una nueva aplicación, cuando cambio paneles o cuando cambio el tamaño de un panel. Forzar un redibujo (Por C-b r, al ejecutar reseto mediante el menú gnome-terminal) reduce la barra de estado a una sola línea, pero permanece dañada.

En xterm, la barra de estado permanece dentro de una línea, pero permanece corrupta como se muestra en la imagen.

Estoy usando tmux 1.5.

  • ¿Cómo arreglo mi tmuxterminal?

Este informe de error de 2008 parece describir el mismo problema, pero se marcó como solucionado. No sé en qué versión se solucionó, pero tmux 1.5 debería incluir una solución de 2008.


Acabo de tener este problema, y ​​"claro" funcionó para mí.
user149818

1
En caso de que alguien tenga el mismo problema, después de hacer todo lo anterior, mi barra de estado de tmux todavía estaba en mal estado. La configuración de la opción de ventana estado-derecho lo reparó.

2
La sugerencia anterior me lo arregló también. El comando para hacer eso fue: Control+ b+ :y luego set -g status-right "#H"establecer el derecho de estado al nombre de host.
Mayank

Respuestas:


85

Intente renombrar la ventana 4

  • Cambiar a la ventana 4: Control+b 4
  • Cambiar nombre de ventana: Control+ b , Control+ umyNewname

(Eso es una coma en el medio)

O: Control+b :rename-window myNewname


1
Cambiar el nombre de la ventana funciona como un encanto
exhuma

44
Debe borrar el nombre antes de escribir el nuevo. La forma más fácil es con ctrl+u, por lo que la secuencia completa esctrl+b , ctrl+u newname
z0r

1
Dulce: esto también funciona byobu( f8, <newname>)
ali_m

¿Por qué es Control-unecesario? Control-,ya está cambiando de nombre ¿verdad? Aunque puedo confirmar que era necesario en mi caso, ¿es algún tipo de reinicio?
hbogert

1
Control-u borra la línea. si cada fatfinger su contraseña en un terminal y lo sabe, puede borrar la entrada usando control-u, en lugar de
presionar la tecla de

55

Necesita dos secuencias de comandos para limpiar el desorden:

Primero, ejecute esto en la ventana ilegible (esto funciona incluso cuando está dentro ssh):

stty sane; printf '\033k%s\033\\\033]2;%s\007' "`basename "$SHELL"`" "`uname -n`"; tput reset; tmux refresh

Luego ejecute esto en la computadora que funciona tmux(funciona dentro y fuera de tmux):

El siguiente comando afecta a todas las tmuxinstancias, que pueden cambiar el estado izquierdo de más de la ventana actual. Si no necesita esa función, no la use.

tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done

Explicado en detalle

Esto fue ensamblado para abordar todos los bits encontrados en otras respuestas y comentarios. Actualmente parece que solo queda un poco con el segundo comando. (Ver en el "bit faltante" a continuación).

Para entender cómo funciona esto, primero eliminemos la línea de estado de tmuxy el tty. Luego lo corregimos nuevamente, usando un método que siempre debe estar disponible (a diferencia del comando reset).

Cómo hacer que un tmuxterminal (se supone UTF-8) sea inutilizable

stty -echo; printf '\016\033k%2000s\\\033\033]2;\355\007' $'\302\217'

Advertencia: después de ejecutar el comando anterior, el caparazón se ve ciego y sordo y parece hablar tonterías en un idioma extraño desconocido. Vea a continuación cómo reparar esto.

Explicado:

  • stty -echo mata la respuesta de tipo terminal

  • printf '\016'hace un SO, así que estás en el conjunto de caracteres alternativo

  • printf '\033]2;%s\007' 'right status text'establece el estado correcto, en este caso $'\355', que expone un error de presentación

  • printf '\033k%2000s\033\\' $'\302\217' establece el nombre del título de la ventana

Esta podría ser la combinación que puede ver en el terminal después de que un comando interactivo se bloqueó y volvió a caer en el shell. (Con /bin/catusted no puede provocar stty -echoIMHO, pero los comandos interactivos como por lo vimgeneral configuran esto).

Ahora limpia este desastre

stty sane; printf '\033k%s\033\\\033]2;%s\007' "$(basename "$SHELL")" "$(uname -n)"; tput reset; tmux refresh

Nota: Si usa copiar y pegar (probablemente necesite mantener presionado Shiftmientras pega), probablemente no pueda ver su pegado si ha usado el comando anterior para confundirlo tty. Por lo tanto, solo presione ciegamente la tecla Enter después de pegar esto.

Explicado:

  • stty sane establece parámetros de terminal "sanos" para que recuperes tu eco mientras escribes

  • printf '\033k%s\033\\' "$(basename "$SHELL")"configura el título de la ventana de nuevo a la normalidad. Puede usar tmux rename-window "$(basename "$SHELL")"alternativamente, sin embargo, tmux rename-windowestá limitado a tmuxdonde la secuencia de escape siempre funciona.

  • printf '\033]2;%s\007' "$(uname -n)"restablece el derecho de estado para que se muestre como predeterminado. (Tenga en cuenta que no debe usarlo tmux set status-right "something", ya que solo genera el pane titleque se corrompió, por lo que status-rightsolo expone algún error de presentación. También tenga en cuenta que no encontré un tmuxcomando para establecer el título del panel directamente).

  • tput reset restablece el terminal, en caso de que esto se haya estropeado

  • tmux refresh actualiza la pantalla para deshacerse de otros desechos que podrían haber aparecido

Pedazo perdido

La printf '\033k%s\033\\' "$(basename "$SHELL")"pierde la capacidad estándar de tmuxpresentar el comando actual en el área de estado de la izquierda. Después de que printf '\033k%s\033\\' "something"se ejecutó esta habilidad se perdió y no encontré una buena manera, sin embargo, cómo recuperarla como estaba antes.

Pero, como se señala en los comentarios a continuación, puede activar una función similar tmuxcomo reemplazo con la siguiente tmuxconfiguración:

set-window-option automatic-rename on
  • Haga esto en la tmuxlínea de comando, que se puede alcanzar en la ventana actual con "Escape" :(donde "Escape" es su tmuxtecla de comando) y luego ingrese el comando.

  • O ejecute tmux set-window-option automatic-rename onen su terminal actual, pero esto falla en caso de que no esté directamente en el nivel de shell correcto, por ejemplo, no funciona dentro de sudoo ssh.

  • O abra otra ventana en la tmuxsesión actual y ejecute el siguiente comando:

    for a in `tmux list-windows | sed 's/:.*//'; do tmux set-window-option -t "$a" automatic-rename on; done`
  • O abra otro shell en la computadora que se está ejecutando tmuxy ejecute el siguiente comando (esto está fuera 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

PD: Gracias a todos los que ayudaron a armar esta solución.


2
Tenga en cuenta el en uname -nlugar de hostname -s. hostnamees peligroso en su rootcontexto, ya que podría terminar con el cambio de nombre de su host -sen Linux / Unix, donde hostnameno hay opciones de grok.
Tino

No restablecer el título del panel también me entristece; Es por eso que incluso estoy aquí en primer lugar. ¡Gracias por ser el único en la página que al menos reconoce esa deficiencia!
EvanED

2
Considere también "tmux setw automatic-rename" después de corregir el título de la ventana
EB.

La stty saneparte me ayudó cuando mi terminal se estropeó y no mostró nada. ¡Gracias!
Johnny

Si desea que se muestre el "bit faltante", es decir, el comando que se está ejecutando actualmente en el área de estado izquierda, puede usar el comando tmux set-window-option automatic-rename.
David Foerster

26

El problema específico que está viendo tiene que ver con el nombre / título de la ventana 4. Una combinación de ser demasiado largo (obviamente) y contener caracteres extraños que hacen que tmux lo mida como más corto (por lo que no puede limitar adecuadamente la barra de estado al ancho de la pantalla) No estoy seguro de cómo restablecerlo (en el mío sigue el nombre del proceso en primer plano), es posible que deba cerrar la ventana.


44
el nombre predeterminado para cambiar el nombre de una ventana es^b - ,
Rob

8
En caso de que el método abreviado de teclado en el comentario de @ Rob lo confunda, es Ctrl- bentonces ,.
Doug Paul

Tenga en cuenta que cuando cambia el nombre de una ventana, el campo se rellena previamente con el nombre de la ventana actual (y su cursor se encuentra al final de ese nombre). Como el nombre de mi ventana era una larga secuencia de basura, tuve que mantener presionado Backspacedurante un minuto para borrar el nombre actual. Para mí, la retroalimentación visual eventualmente dejó en claro que todo el antiguo nombre había sido borrado.
Doug Paul

también puede usar Ctrl-b :rename-window <nombre va aquí>; esto usa el sistema de comando tmux en lugar del atajo de teclado para ese comando.
Abbafei


5
tmux set-option -g status off && tmux set-option -g status on 

Me arregló esto cuando algo más que el nombre de la ventana estaba dañado y no podía molestarme en averiguar qué era.


2

tmuxpodría constituir solo parte del problema. Puede que tenga que invocar stty saneen la línea de comando. Esto restablece los controladores TTY en el núcleo a un conjunto de valores predeterminados que generalmente le permiten continuar. Si los controladores TTY están lo suficientemente desordenados, es posible que deba escribir stty sane"a ciegas", es decir, sin comentarios en pantalla.


stty sanetampoco resuelve el problema. Tengo comentarios en pantalla, dentro de cada uno de los tmuxpaneles puedo escribir y tener comentarios de manera normal, pero tan pronto como tmux necesita dibujar algo (por ejemplo, ejecutar una nueva aplicación, cambiar o cambiar el tamaño de los paneles) la barra de estado se mueve a los paneles ...
gerrit

2

Intenta recargar tu archivo de configuración?

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


La mejor solución hasta ahora.
Dave

-3

para solucionar el problema para mí:

Acabo de eliminar el panel y la ventana del problema, y ​​creé una nueva ventana y panel.

En el panel de problemas, CTRL+ AXy CTRL+ AC.


De esta manera para mí otra vez. ninguna otra forma puede ayudar
itech
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.