"Maximizando" un panel en tmux

239

A veces sería muy útil maximizar un panel en tmux y luego restaurarlo a su tamaño anterior.

He estado leyendo el manual y no puedo encontrar la manera. Lo que se me ocurrió es que podría vincular una tecla para cambiar el tamaño del panel al ancho "máximo", y otra tecla para restaurarlo a un ancho predefinido.

Por supuesto, esto tiene sus inconvenientes, por lo que me pregunto si alguien tiene una mejor idea.

Ivan
fuente

Respuestas:

56

tmux 1.8 y posterior

Ahora con soporte nativo, de la siguiente respuesta :

La versión 1.8 vio la adición de la bandera -Z para cambiar el tamaño del panel. Desde la página del manual:

Con -Z, el panel activo se alterna entre el zoom (que ocupa toda la ventana) y el zoom (su posición normal en el diseño).

tmux anterior (respuesta original)

Otra opción podría ser usar break-paneseguido de join-pane. Desde la página del manual :

break-pane [-d] [-t target-pane]
                   (alias: breakp)
             Break target-pane off from its containing window to make it the
             only pane in a new window.  If -d is given, the new window does
             not become the current window.

join-pane [-dhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane]
                   (alias: joinp)
             Like split-window, but instead of splitting dst-pane and creating
             a new pane, split it and move src-pane into the space.  This can
             be used to reverse break-pane.

Por lo tanto, puede seleccionar su panel y hacer break-paney luego, una vez que haya terminado con la versión maximizada, puede volver a unirlo join-pane; puede necesitar algunos argumentos predeterminados para volver a colocarlo en su lugar, o simplemente reorganizarlo después.

Tenga en cuenta que el panel de combinación parece estar en tmux 1.3 pero no en 1.1. (No estoy seguro acerca de 1.2, lo siento).

Y solo para mencionar que el terminador (un multiplexor de terminal GUI (basado en GTK)) puede hacer el zoom. (Ctrl-Shift-X es la combinación de teclas predeterminada). Por supuesto, no hace muchas cosas que hace tmux ...

Hamish Downer
fuente
32
A partir de la versión 1.8 hay una mejor solución (ver la respuesta de Tyler Holien).
momeara
1
Para aquellos que prueban esto antes de la mejor respuesta, hacer que el panel de unión funcione: join-pane -t:{previous}para la ventana anterior o join-pane -t:0para volver a unirse a la ventana 0.
Realista
488

Esta es ahora una característica nativa de tmux.

La versión 1.8 vio la adición de la -Zbandera a resize-pane. Desde la página del manual:

Con -Z, el panel activo se alterna entre el zoom (que ocupa toda la ventana) y el zoom (su posición normal en el diseño).

Está obligado a tmux-prefix: zde forma predeterminada en mi instalación (a través de Homebrew en OS X).

Tyler Holien
fuente
44
esto fue genial, solo lo agregué a mi .tmux.conf y ahora tengo una experiencia mucho más fluida: bind-key z resize-pane -Z
St-Ste-Ste-Stephen
¿Es posible de alguna manera tener los bordes de los paneles sumergidos visibles para la indicación de profundidad? Sigo olvidando que me acerqué y el "título Z" no es lo suficientemente prominente.
lkraav
Funciona en BunsenLabs fuera de la caja.
Mateusz Piotrowski
increíble. en realidad funciona
sayem siam
1
@lkraav Consulte Cambiar el color de fondo de Tmux del panel ampliado .
Kamil Maciorowski
49

Así que sé que preguntaste esto hace un tiempo ... ¡pero no cambié de pantalla hasta hoy!

Me encontré con el mismo problema, así es como lo resolví:

unbind +
bind + new-window -d -n tmux-zoom 'clear && echo TMUX ZOOM && read' \; swap-pane -s tmux-zoom.0 \; select-window -t tmux-zoom
unbind -
bind - last-window \; swap-pane -s tmux-zoom.0 \; kill-window -t tmux-zoom

Si su flujo de trabajo es como el mío (es decir, maximiza una ventana, realiza un trabajo y luego la desmaximiza de inmediato), esto debería funcionar muy bien para usted.

Ryan
fuente
(En caso de que no estuviera claro, esto mantiene el diseño en su ventana original ... después de maximizar y no maximizar, es exactamente lo mismo.)
Ryan
2
¿Alguna idea de cómo podría asignar la misma pulsación de tecla a ambos? Algo así como bind c-m select-window -t tmux-zoom ? <minimize> : <maximize>. Pero ahora quiero definir esta función en otro lugar, en aras de la limpieza, y justo bind c-m :max_or_min. ¿Es eso posible? Me resulta difícil buscarlo. (Encuentro que a menudo presiono el comando incorrecto y termino creando ventanas adicionales 'tmux-zoom' vacías).
chadoh
77
Esto funcionó para mí solo cuando eliminé 'clear && echo TMUX ZOOM && read' de Maxim.
Epeli
Thw maximizar me funciona, pero la acción de minimizar simplemente mata la ventana original, dejando el panel maximizado.
paradroid
Esto funcionó, pero perdí mi diseño ... ¡aunque casi!
John Hunt el
25

Zoom mejorado. Ahora se pueden hacer zoom en múltiples paneles, incluso jerárquicamente. Después de hacer lo siguiente y volver a cargar su servidor tmux (Ctrl-r en mi caso) tendrá su xclave vinculada para acercar y alejar un panel. el acercamiento se logra abriendo el panel en una nueva ventana, y el alejamiento se logra llevando el panel nuevamente a su ventana original. Si termina dividiendo la ventana de acercamiento, podrá acercarse a los paneles de la ventana de acercamiento y alejarse nuevamente a la ventana de acercamiento. el alejamiento ocurre solo si está en una ventana de alejamiento que contiene un solo panel.

Agregue seguimiento al final de su ~/.tmux.conf

~$ grep "bind x" ~/.tmux.conf
unbind x
bind x run ". ~/.tmux/zoom"

Agregar siguiente archivo

~$ cat ~/.tmux/zoom
#!/bin/bash -f
currentwindow=`tmux list-window | tr '\t' ' ' | sed -n -e '/(active)/s/^[^:]*: *\([^ ]*\) .*/\1/gp'`;
currentpane=`tmux list-panes | sed -n -e '/(active)/s/^\([^:]*\):.*/\1/gp'`;
panecount=`tmux list-panes | wc | sed -e 's/^ *//g' -e 's/ .*$//g'`;
inzoom=`echo $currentwindow | sed -n -e '/^zoom/p'`;
if [ $panecount -ne 1 ]; then
    inzoom="";
fi
if [ $inzoom ]; then
    lastpane=`echo $currentwindow | rev | cut -f 1 -d '@' | rev`;
    lastwindow=`echo $currentwindow | cut -f 2- -d '@' | rev | cut -f 2- -d '@' | rev`;
    tmux select-window -t $lastwindow;
    tmux select-pane -t $lastpane;
    tmux swap-pane -s $currentwindow;
    tmux kill-window -t $currentwindow;
else
    newwindowname=zoom@$currentwindow@$currentpane;
    tmux new-window -d -n $newwindowname;
    tmux swap-pane -s $newwindowname;
    tmux select-window -t $newwindowname;
fi
akshay
fuente
44
¿Solo un voto a favor? ¡Esta respuesta es asombrosa! Funciona muy bien, presenta una nueva funcionalidad agradable que ahora reemplaza por completo el programa hinchado 'terminador' que solía usar.
sillyMunky
+1 ¡Esto es realmente bueno! ¡Con mucho, la mejor solución de trabajo que he encontrado hasta ahora! ¡¡Gracias!!
Armandino
Estoy de acuerdo. Esto funciona y es más que increíble. Es screen ++
Brad Parks
+1. Esto funciona muy bien, pero es una fracción de segundo (~ 0.8s) más lento que la respuesta de @ Ryan anterior, al menos en mi sistema. No es gran cosa, pero me pregunto si hay una manera de hacerlo más rápido
Amelio Vazquez-Reina
Hermoso sin duda alguna. Me encantan los nombres especiales del panel (zoom @ ...), que son recordatorios útiles, y el comando único "x" para acercar / alejar.
Eric O Lebigot
16

Ctrl+ b(prefijo) + zfunciona para acercar un panel en particular tmux 2.1. Si presiona Ctrl+ b+ znuevamente, el panel de zoom vuelve al tamaño original. No crea un nuevo panel.

En comparación con la solución publicada anteriormente por aksay, si intenta dividir el panel ampliado, no permitirá la división, y volverá al panel original y dividirá ese panel en su lugar.

La opción de ventana de zoom es probablemente más versátil ...

alpha_989
fuente
2

Hice esto para maximizar / minimizar con la misma pulsación de tecla:

bind C-k run "if [[ $(tmux list-window) =~ ZOOM ]]; then tmux last-window; tmux swap-pane -s ZOOM.1; tmux kill-window -t ZOOM; else tmux new-window -d -n ZOOM; tmux swap-pane -s ZOOM.1; tmux select-window -t ZOOM;fi"
Juan Ignacio Pumarino
fuente
1

También para mí trabajar sin 'clear && echo TMUX ZOOM && read'. Con este fragmento cada vez que minimizo un panel desde la primera ventana desaparece.

Delgado
fuente
1

El problema de resize-pane -Zser un conmutador es que a veces realizará la operación de zoom inverso de lo deseado, particularmente cuando se llama desde un script o desde adentro tmux.conf.

Aquí está la solución:

tmux-zoom-in.sh

#!/bin/bash

# Zoom in the current pane ONLY if it is not currently zoomed.
# Requires tmux version >= 1.8

tmux list-panes -F '#F' | grep -q Z || tmux resize-pane -Z

tmux-zoom-out.sh

#!/bin/bash

# Zoom out the current pane ONLY if it is not currently zoomed.
# Requires tmux version >= 1.8

tmux list-panes -F '#F' | grep -q Z && tmux resize-pane -Z
Tom Hale
fuente
1

Ahora, hay un atajo predeterminado para eso:

tmux-prefix+z

que generalmente es:

Ctrlb+z

Youcef4k
fuente
0

Estoy en Ubuntu 12.04 y también necesitaba esta función. Desde tmux 1.8 hay soporte nativo para alternar zoom usando tmux-prefix z. Como probablemente no veremos tmux 1.8 en 12.04, compilé tmux 1.8 de la fuente en otra computadora de desarrollo, lo renombré a _tmux-1.8 y simplemente copié el binario 1.8 a /usr/bin/_tmux-1.8 y edité .bash_aliases -> alias tmux = '_ tmux-1.8'.

No he notado ningún problema al usar este método rápido y sucio y cuando / si tmux 1.8 llega a 12.04, no he roto nada.

olvido
fuente