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.