"Massimizzare" un riquadro in tmux


239

A volte sarebbe molto utile ingrandire un riquadro in tmux e quindi ripristinarlo alle dimensioni precedenti.

Ho letto il manuale e non riesco a trovare un modo. Quello che mi è venuto in mente è che potrei associare una chiave per ridimensionare il riquadro alla larghezza "max" e un'altra chiave per ripristinarlo a una larghezza predefinita.

Naturalmente questo ha i suoi svantaggi, quindi mi chiedo se qualcuno abbia un'idea migliore.

Risposte:


56

tmux 1.8 e versioni successive

Ora supportato nativamente, dalla risposta di seguito :

La versione 1.8 ha visto l'aggiunta del flag -Z al riquadro di ridimensionamento. Dalla pagina man:

Con -Z, il riquadro attivo viene commutato tra ingrandito (occupando l'intera finestra) e non ingrandito (la sua posizione normale nel layout).

vecchio tmux (risposta originale)

Un'altra opzione potrebbe essere quella break-paneseguita da join-pane. Dalla pagina man :

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.

Quindi è possibile selezionare il riquadro e fare break-panee quindi, una volta terminato con la versione ingrandita, è possibile ricollegarlo join-pane- potrebbero essere necessari alcuni argomenti predefiniti per rimetterlo a posto o semplicemente riorganizzarlo in seguito.

Si noti che il riquadro di join sembra essere in tmux 1.3 ma non in 1.1. (Non sono sicuro di 1.2, scusate).

E solo per menzionare che terminator (un multiplexer terminale GUI (basato su GTK)) può fare lo zoom. (Ctrl-Shift-X è la combinazione di tasti predefinita). Ovviamente non fa molte cose che tmux fa ...


32
Dalla versione 1.8 esiste una soluzione migliore (vedi la risposta di Tyler Holien).
Momeara,

1
Per coloro che provano questo prima della risposta migliore, per far funzionare il riquadro di join fare: join-pane -t:{previous}per la finestra precedente o join-pane -t:0per ricollegarlo alla finestra 0.
Realistico

488

Questa è ora una funzionalità nativa di tmux.

La versione 1.8 ha visto l'aggiunta del -Zflag a resize-pane. Dalla pagina man:

Con -Z, il riquadro attivo viene commutato tra ingrandito (occupando l'intera finestra) e non ingrandito (la sua posizione normale nel layout).

È vincolato a tmux-prefix- zper impostazione predefinita sulla mia installazione (tramite Homebrew su OS X).


4
è stato fantastico, appena aggiunto al mio .tmux.conf e ora ho un'esperienza molto più fluida: bind-key z resize-pane -Z
St-Ste-Ste-Stephen

È possibile in qualche modo avere i bordi dei pannelli sommersi visibili per l'indicazione della profondità? Continuo a dimenticare di essere ingrandito e il "titolo Z" non è abbastanza importante.
lkraav,

Funziona in BunsenLabs fuori dalla scatola.
Mateusz Piotrowski,

eccezionale. funziona davvero
sayem siam


49

Quindi so che l'hai chiesto poco fa ... ma non sono passato dallo schermo ad oggi!

Ho riscontrato lo stesso problema, ecco come l'ho risolto:

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

Se il tuo flusso di lavoro è come il mio (ovvero ingrandisci una finestra, fai un po 'di lavoro, quindi immediatamente non ingrandiscilo), questo dovrebbe funzionare benissimo per te.


(Nel caso in cui non fosse chiaro, questo mantiene il layout nella finestra originale ... dopo aver ingrandito e non massimizzato, è esattamente lo stesso.)
Ryan

2
Hai idea di come potrei mappare la stessa sequenza di tasti su entrambi? Qualcosa del genere bind c-m select-window -t tmux-zoom ? <minimize> : <maximize>. Ma ora voglio definire questa funzione altrove, per motivi di pulizia e giusto bind c-m :max_or_min. È possibile? Sto trovando difficile da cercare. (Trovo che spesso premo il comando sbagliato e finisca per creare finestre 'tmux-zoom' aggiuntive e vuote.)
Chadoh,

7
Questo ha funzionato per me solo quando ho rimosso 'clear && echo TMUX ZOOM && read' da maxim.
Epeli

Questo massimizzare funziona per me, ma l'azione minimizza uccide solo la finestra originale, lasciando il riquadro ingrandito.
paradroid,

Questo tipo di lavoro ha funzionato, ma perdo il mio layout .. quasi però!
John Hunt,

25

Zoomer migliorato. Ora è possibile ingrandire più riquadri, anche gerarchicamente. Dopo aver fatto quanto segue e ricaricato il tuo server tmux (Ctrl-r nel mio caso) avrai il tuo xtasto associato per ingrandire e rimpicciolire un riquadro. lo zoom si ottiene aprendo il riquadro in una nuova finestra e lo zoom si ottiene riportando un riquadro alla sua finestra originale. Se finisci per dividere la finestra di ingrandimento, sarai in grado di ingrandire i riquadri della finestra di ingrandimento e rimpicciolire la finestra di ingrandimento. lo zoom indietro si verifica solo se ci si trova in una finestra dello zoom-in contenente un singolo riquadro.

Aggiungi seguito alla fine del tuo ~/.tmux.conf

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

Aggiungi il seguente file

~$ 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

4
Solo un singolo voto ?! Questa risposta è fantastica! Funziona molto bene, introduce nuove e piacevoli funzionalità che ora sostituiscono completamente il bloaty programma 'terminator' che usavo.
sillyMunky,

+1 Questo è davvero buono! Di gran lunga la migliore soluzione di lavoro che ho trovato finora! Grazie!!
Armandino,

Concordo. Funziona ed è più che fantastico. È schermo ++
Brad Parks

+1. Funziona benissimo ma è una frazione di secondo (~ 0,8 secondi) più lenta della risposta di @ Ryan sopra, almeno sul mio sistema. Non è un grosso problema, ma mi chiedo se c'è un modo per renderlo più veloce
Amelio Vazquez-Reina

Davvero bellissimo. Adoro i nomi dei riquadri speciali (zoom @…), che sono utili promemoria, e il singolo comando "x" per ingrandire / ridurre.
Eric O Lebigot,

16

Ctrl+ b(prefisso) + zfunziona per ingrandire un particolare riquadro in tmux 2.1. Se premi di nuovo Ctrl+ b+ z, il riquadro di zoom torna alle dimensioni originali. Non crea un nuovo riquadro.

Rispetto alla soluzione pubblicata in precedenza da aksay, se si tenta di dividere il riquadro ingrandito, non consentirà di dividere e tornerà al riquadro originale e dividere invece quel riquadro.

L'opzione della finestra di zoom è probabilmente più versatile ...


2

Ho fatto questo per massimizzare / minimizzare con lo stesso tasto:

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"

1

Anche per me lavoro senza "clear && echo TMUX ZOOM && read". Con questo frammento ogni volta che minimizzo scompare un riquadro dalla prima finestra.


1

Il problema con l' resize-pane -Zessere un interruttore è che a volte eseguirà l'operazione di zoom inverso del desiderato, in particolare quando viene chiamato da uno script o all'interno tmux.conf.

Ecco la soluzione:

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

1

Ora, c'è un collegamento predefinito per questo:

tmux-prefix+z

che è generalmente:

Ctrlb+z



0

Sono su Ubuntu 12.04 e avevo anche bisogno di questa funzione. Da tmux 1.8 esiste il supporto nativo per attivare / disattivare lo zoom usando tmux-prefix z. Dato che probabilmente non vedremo tmux 1.8 in 12.04 ho compilato tmux 1.8 dalla fonte su un altro computer di sviluppo, l'ho rinominato in _tmux-1.8 e ho appena copiato il binario 1.8 in /usr/bin/_tmux-1.8 e modificato .bash_aliases -> alias tmux = '_ tmux-1.8'.

Non ho notato alcun problema usando questo metodo rapido e sporco e quando / se tmux 1.8 arriva al 12.04 non ho rotto nulla.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.