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.

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 ...


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).


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


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ê.


(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

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 ...


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"

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.


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

1

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

tmux-prefix+z

que geralmente é:

Ctrlb+z



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.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.