Maximizando um painel no tmux

239

Às vezes, seria muito útil maximizar um painel no tmux e depois restaurá-lo para o tamanho anterior.

Eu tenho lido o manual e não consigo encontrar uma maneira. O que eu descobri é que eu poderia vincular uma chave para redimensionar o painel para a largura "max" e outra chave para restaurá-lo para uma largura predefinida.

Claro que isso tem suas desvantagens, então estou me perguntando se alguém tem uma idéia melhor.

Ivan
fonte

Respostas:

56

tmux 1.8 e posterior

Agora suportado nativamente, a partir da resposta abaixo :

A versão 1.8 viu a adição do sinalizador -Z ao painel de redimensionamento. Na página do manual:

Com -Z, o painel ativo é alternado entre o zoom (ocupando toda a janela) e o não-zoom (sua posição normal no layout).

tmux mais antigo (resposta original)

Outra opção pode ser usar break-paneseguido por join-pane. Na página do 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.

Assim, você pode selecionar seu painel e fazer break-panee, depois de concluir a versão maximizada, poderá se unir a ele novamente join-pane- pode precisar de alguns argumentos padrão para colocá-lo de volta no lugar ou apenas reorganizá-lo posteriormente.

Observe que o painel de junção parece estar no tmux 1.3, mas não no 1.1. (Não tenho certeza sobre 1,2, desculpe).

E só para mencionar que terminator (a GUI (GTK com base) multiplexer terminal) pode fazer a coisa zoom. (Ctrl-Shift-X é a combinação de teclas padrão). Claro que ele não faz muitas coisas que o tmux faz ...

Hamish Downer
fonte
32
A partir da versão 1.8, existe uma solução melhor (consulte a resposta de Tyler Holien).
Momeara #
1
Para aqueles que tentar isso antes da resposta melhor, para conseguir juntar-painel para trabalhar não: join-pane -t:{previous}para a janela anterior ou join-pane -t:0para se juntar-lo de volta para a janela 0.
Realistic
488

Agora esse é um recurso nativo do tmux.

A versão 1.8 viu a adição da -Zbandeira no resize-pane. Na página do manual:

Com -Z, o painel ativo é alternado entre o zoom (ocupando toda a janela) e o não-zoom (sua posição normal no layout).

Ele está vinculado a tmux-prefix- zpor padrão, na minha instalação (via Homebrew no OS X).

Tyler Holien
fonte
4
este foi ótimo, acabou de adicionar ao meu .tmux.conf e agora têm uma experiência muito mais fluido: chave bind-Z redimensionamento-pane z
St-Ste-Ste-Stephen
É possível, de alguma forma, ter as bordas dos painéis submersos visíveis para indicação de profundidade? Eu continuo esquecendo que estou com zoom e o "Z-title" não é realmente importante o suficiente.
lkraav
Funciona no BunsenLabs fora da caixa.
Mateusz Piotrowski
impressionante. realmente funciona
sayem siam
1
@lkraav Consulte Alterar a cor de fundo do Tmux do painel ampliado .
Kamil Maciorowski
49

Então eu sei que você perguntou isso há um tempo atrás ... mas eu não mudei de tela até hoje!

Corri para o mesmo problema, aqui está como eu resolvi:

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 o seu fluxo de trabalho é como o meu (ou seja, você maximiza uma janela, faz algum trabalho, desmaximize-a imediatamente), isso deve funcionar muito bem para você.

Ryan
fonte
(No caso de que não estava claro, este mantém o layout em sua janela original ... depois maximizar e un-maximização, é exatamente o mesmo.)
Ryan
2
Alguma idéia de como eu poderia mapear o mesmo pressionamento de tecla para ambos? Algo como bind c-m select-window -t tmux-zoom ? <minimize> : <maximize>. Mas agora eu quero definir essa função em outro lugar, por uma questão de limpeza, e justamente bind c-m :max_or_min. Isso é possível? Estou achando difícil procurar. (Eu acho que eu muitas vezes bater o comando errado e acabam por criar janelas adicionais, vazios 'tmux-Zoom'.)
chadoh
7
Isso funcionou para mim apenas quando eu removi o 'clear && echo TMUX ZOOM && read' do maxim.
Epeli
A opção maximizar funciona para mim, mas a ação minimizar apenas mata a janela original, deixando o painel maximizado.
par paradroid
Isso meio que funcionou, mas eu perco meu layout .. quase!
John Hunt
25

Zoomer aprimorado. Agora é possível ampliar vários painéis, mesmo hierarquicamente. Depois de fazer o abaixo e recarregar o servidor tmux (Ctrl-r no meu caso), você terá sua xchave vinculada para aumentar e diminuir o zoom em um painel. o aumento de zoom é obtido abrindo o painel em uma nova janela e o zoom é atingido retornando o painel à sua janela original. Se você acabar dividindo a janela de ampliação, poderá ampliar os painéis da janela de ampliação e diminuir o zoom novamente para a janela de ampliação. a redução ocorre apenas se você estiver em uma janela de ampliação contendo um único painel.

Adicione o seguinte ao final do seu ~/.tmux.conf

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

Adicione o seguinte arquivo

~$ 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
fonte
4
Apenas uma única votação positiva ?! Esta resposta é incrível! Funciona muito bem, apresenta uma nova funcionalidade interessante que agora substitui completamente o programa 'terminador' que eu costumava usar.
precisa saber é o seguinte
+1 Isso é muito bom! De longe, a melhor solução de trabalho que encontrei até agora! Obrigado!!
Armandino
Eu concordo. Isso funciona e é mais do que impressionante. É tela ++
Brad Parks ''
+1. Isso funciona muito bem, mas é uma fração de segundo (~ 0.8s) mais lento que a resposta de @ Ryan acima, pelo menos no meu sistema. Não é grande coisa, mas gostaria de saber se existe uma maneira de torná-lo mais rápido
Amelio Vazquez-Reina
Bonito mesmo. Adoro os nomes especiais do painel (zoom @…), que são lembretes úteis, e o único comando "x" de zoom in / out.
Eric O Lebigot
16

Ctrl+ b(prefixo) + ztrabalha para aumentar o zoom em um painel específico tmux 2.1. Se você pressionar Ctrl+ b+ znovamente, o painel de zoom volta ao tamanho original. Não cria um novo painel.

Comparado com a solução postada acima pela aksay, se você tentar dividir o painel ampliado, ele não permitirá a divisão e voltará ao painel original e, em vez disso, dividirá esse painel.

A opção da janela de zoom é provavelmente mais versátil ...

alpha_989
fonte
2

Fiz isso para maximizar / minimizar com o mesmo pressionamento 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
fonte
1

Também para mim trabalho sem 'clear && echo TMUX ZOOM && read'. Com esse trecho sempre que minimizo um painel da primeira janela, desapareça.

Magro
fonte
1

O problema de resize-pane -Zalternar é que às vezes ele executa a operação de zoom reverso do que o desejado, principalmente quando chamado de um script ou dentro dele tmux.conf.

Aqui está a solução alternativa:

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
fonte
1

Agora, há um atalho padrão para isso:

tmux-prefix+z

que geralmente é:

Ctrlb+z

Youcef4k
fonte
0

Para aqueles que não podem usar o tmux 1.8 ou preferem um estado maximizado por mais tempo, publiquei um script tmux que funciona com o tmux 1.6+ .

Espero que ajude.

Gregory Pakosz
fonte
0

Estou no Ubuntu 12.04 e também precisava desse recurso. Desde o tmux 1.8, há suporte nativo para alternância de zoom usando o tmux-prefix z. Como provavelmente não veremos o tmux 1.8 no 12.04, compilei o tmux 1.8 a partir da fonte em outro computador dev, renomei-o para _tmux-1.8 e apenas copiei o binário 1.8 para /usr/bin/_tmux-1.8 e editei .bash_aliases -> alias tmux = '_ tmux-1.8'.

Não notei nenhum problema ao usar esse método rápido e sujo e quando / se o tmux 1.8 chega à 12.04, não quebrei nada.

esquecido
fonte