¿Hay alguna forma de volver a dibujar la ventana tmux cuando se cambia un monitor más pequeño a uno más grande?


400

Digamos que te estás conectando a un servidor remoto a través de ssh con Terminal.app. Cuando "adjuntas tmux" con un monitor de mayor resolución desde uno más pequeño que previamente inició tmux, dibuja puntos alrededor de la consola. No se ajusta al nuevo tamaño de la ventana. ¿Hay alguna forma de volver a dibujar y limpiar la ventana? CTRL+ Lo CTRL- B+ Rno ayuda. No pude encontrar ninguna orden adecuada sobre el hombre.

% tmux -V
tmux 1.5

77
Me gustaría saber cómo volver a dibujar todas las sesiones sin separar ninguna de ellas.
PJ Brunet

3
todo el mundo se separa ... ¿encontraste la manera?
Patoshi パ ト シ


Sí, todavía me gustaría saber la respuesta a la pregunta: "¿Hay alguna forma de volver a dibujar y limpiar la ventana?"
Jaydel

Respuestas:


580

tmux limita las dimensiones de una ventana a las más pequeñas de cada dimensión en todas las sesiones a las que se adjunta la ventana. Si no lo hiciera, no habría una forma sensata de mostrar el área de la ventana completa para todos los clientes adjuntos.

Lo más fácil de hacer es separar a otros clientes de las sesiones cuando adjuntas:

tmux attach -d

Alternativamente, puede mover cualquier otro cliente a una sesión diferente antes de adjuntarlo a la sesión:

takeover() {
    # create a temporary session that displays the "how to go back" message
    tmp='takeover temp session'
    if ! tmux has-session -t "$tmp"; then
        tmux new-session -d -s "$tmp"
        tmux set-option -t "$tmp" set-remain-on-exit on
        tmux new-window -kt "$tmp":0 \
            'echo "Use Prefix + L (i.e. ^B L) to return to session."'
    fi

    # switch any clients attached to the target session to the temp session
    session="$1"
    for client in $(tmux list-clients -t "$session" | cut -f 1 -d :); do
        tmux switch-client -c "$client" -t "$tmp"
    done

    # attach to the target session
    tmux attach -t "$session"
}
takeover 'original session' # or the session number if you do not name sessions

La pantalla se reducirá nuevamente si un cliente más pequeño cambia a la sesión.

También hay una variación en la que solo "toma el control" de la ventana (vincula la ventana a una nueva sesión, establece aggressive-resizey cambia cualquier otra sesión que tenga esa ventana activa a otra ventana), pero es más difícil de escribir en general case (y diferente a "salir" ya que desearía desvincular la ventana o cerrar la sesión en lugar de simplemente desconectarse de la sesión).


Tenga en cuenta que puede obtener la sesión actual con $(tmux display-message -p '#S'), consulte: superuser.com/questions/410017/… .
GManNickG

3
Esta respuesta obtiene accesorios para los detalles y la base de conocimientos. Pero vea la respuesta de Shi B. Ctrl-b + Dpara facilidad de uso (y para recordar).
fbicknel

"tmux detach -a" funcionó para mí; "tmux attach -d" no lo hizo.
mahemoff

(1) errores tmux más nuevos en set-option... set-remain-on-exit on. Ver tmux # 787 . Ahora, utilice: tmux set-hook -t "$tmp" window-linked 'set remain-on-exit on.
user1902689

1
(2) en tmux más nuevo, tiene que usar el new-windowúltimo argumento de algo así 'echo "Use Prefix + L (i.e. ^B L) to return to session.'; while(true); do read; done"o no verá el mensaje. (En algunas circunstancias, lo verá si se desplaza hacia arriba o si el terminal es más alto). Si usa esto, probablemente esté mejor sin mi comentario "(1)" o cualquier otra configuración remain-on-exit.
user1902689

462

Siempre puede presionar CTRL- B+ SHIFT- Dpara elegir qué cliente desea separar de la sesión.

tmux enumerará todas las sesiones con su dimensión actual. Luego, simplemente se desconecta de todas las sesiones de menor tamaño.


66
Aclaración. Es la capital D. La pequeña 'd' separa al cliente.
Raghuram Murthy P

2
CTRL-Bsi ese es tu prefijo El mío ha sido CTRL-Adesde que cambié de pantalla.
Blaskovicz

1
En realidad, necesita desconectarse de todas las sesiones de menor tamaño del mismo grupo de sesiones. Sin embargo, CTRL-B + SHIFT-D no muestra que cada sesión pertenece a qué grupo. Prefiero ejecutar el tmux list-sessionsque muestra el nombre de la sesión, el tamaño y la información del grupo, y luego tmux kill-session -t <session_name>eliminar las sesiones del mismo grupo.
Zhichang Yu el

180

Una solución más simple en versiones recientes de tmux (probada en 1.9) que ahora puede hacer:

tmux detach -a

-a es para todos los demás clientes en esta sesión, excepto el actual

Puede alias en su. [Bash | zsh] rc

alias takeover="tmux detach -a"

Flujo de trabajo: puede conectarse a su sesión normalmente, y si le molesta otra sesión que forzó el tamaño de su ventana tmux, simplemente puede llamar takeover.


13
¡Muchas gracias! trabajó. Si lo está haciendo en una sesión activa de tmux, simplemente presione CTRL + B (o el comando tmux personalizado) y luego:detach -a
Iacchus

O simplemente ejecute tmux detach -aen la línea de comando de shell dentro de Tmux.
jdhao

4

Las otras respuestas no me ayudaron, ya que solo tenía un cliente adjunto (la anterior que inició la sesión ya estaba separada).

Para solucionarlo, seguí la respuesta aquí (no estaba usando xterm).

Que simplemente dijo:

  1. Separarse de la sesión de tmux
  2. Ejecute el resizecomando de Linux
  3. Vuelva a conectar a la sesión tmux

3

Me encontré con este problema y me topé con una situación diferente. Aunque probablemente sea solo un unicornio, pensé en exponerlo.

Tuve una sesión que era más pequeña y noté que los tamaños de fuente eran diferentes: la sesión más pequeña tenía las fuentes más pequeñas. Aparentemente, había cambiado el tamaño de fuente de la ventana por alguna razón.

Entonces, en OS X, acabo de hacerlo Cmd-+en la sesión de menor tamaño, y volvió a su lugar.


Esto solucionó la ubicación extraña de la barra de estado de tmux en la terminal de macOS. Cuando tengo las pestañas de terminal abiertas, desordena la posición de la barra de estado de tmux. Jugando con zoom a través de cmd-+o lo -arregla.
Paul

0
ps ax | grep tmux
17685 pts/22   S+     0:00 tmux a -t 13g2
17920 pts/11   S+     0:00 tmux a -t 13g2
18065 pts/19   S+     0:00 grep tmux

mata al otro.


8
Parece una respuesta válida a la pregunta del título, a pesar de que hay mejores respuestas. No entiendo por qué se votó al olvido.
JoL

sí, esta es la única respuesta que funcionó para mí
Yasir Hantoush


0

Uso Ctrl- b+, lo qque hace que sea el número de flash para cada panel, redibujándolos en el camino.

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.