Questão “Maximizando” um painel no tmux


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

Eu tenho lido o manual e não consigo encontrar um caminho. O que eu tenho é que eu poderia ligar uma chave para redimensionar o painel para a largura "max", e outra chave para restaurá-lo para alguma largura predefinida.

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


194


origem




Respostas:


Outra opção poderia ser usar break-pane Seguido por join-pane. De página 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.

Então você pode selecionar seu painel e fazer break-pane e, em seguida, uma vez feito o seu com a versão maximizada, você pode voltar a juntar-se com join-pane - pode precisar de alguns argumentos padrão para colocá-lo de volta no lugar ou apenas reorganizar depois.

Note que join-pane parece estar no tmux 1.3 mas não no 1.1. (Não tenho certeza sobre 1,2, desculpe).

E só para mencionar isso Exterminador do Futuro (um multiplexador de terminal baseado em GUI (GTK)) pode fazer o zoom. (Ctrl-Shift-X é a tecla de atalho padrão). Claro que não faz muitas coisas que o tmux faz ...


49



A partir da versão 1.8, há uma solução melhor (veja a resposta de Tyler Holien). - momeara
Para aqueles que tentam isso antes da melhor resposta, para fazer o join-pane funcionar: join-pane -t:{previous} para a janela anterior ou join-pane -t:0 para juntá-lo de volta à janela 0. - Realistic


Este é agora um recurso nativo do tmux.

A versão 1.8 viu a adição do -Z bandeira para resize-pane. Na página man:

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

Está fadado a tmux-prefixo-z por padrão na minha instalação (via Homebrew no OS X).


409



alguém com privilégios adequados deve fazer disso a resposta. É inconcebível que alguém ainda esteja usando uma versão do tmux diferente da mais recente. - Jay
isso foi ótimo, apenas adicionei ao meu .tmux.conf e agora tenho uma experiência muito mais fluida: bind-key z resize-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 usando zoom e o "Z-title" não é muito proeminente o suficiente. - lkraav
Trabalha em BunsenLabs fora da caixa. - Mateusz Piotrowski
"Inconcebível" - "Você continua usando essa palavra. Eu não acho que isso significa o que você acha que significa." - Michael Anderson


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

Eu me deparei com o mesmo problema, aqui está como eu resolvi isso:

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 e, em seguida, desativa imediatamente) isso deve funcionar muito bem para você.


47



(No caso de não estar claro, isso mantém o layout na janela original ... depois de maximizar e não maximizar, é exatamente o mesmo.) - Ryan
Alguma idéia de como eu poderia mapear o mesmo toque 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 apenas bind c-m :max_or_min. Isso é possível? Estou achando difícil procurar. (Eu acho que muitas vezes acerto o comando errado e acabo criando janelas adicionais, vazias 'tmux-zoom'.) - chadoh
Isso só funcionou para mim quando removi 'clear && echo TMUX ZOOM && read' da maximização. - Epeli
Thw maximize funciona para mim, mas a ação minimizar apenas mata a janela original, deixando o painel maximizado. - paradroid
Este tipo de trabalho, mas eu perco meu layout .. quase embora! - John Hunt


Zoomer melhorado. Agora é possível fazer zoom em vários painéis, até mesmo hierarquicamente. Depois de fazer o seguinte e recarregar o seu servidor tmux (Ctrl-r no meu caso) você terá o seu x tecla ligada para ampliar e reduzir um painel. O zoom é obtido abrindo o painel em uma nova janela, e o zoom é obtido ao levar um painel de volta à sua janela original. Se você acabar dividindo a janela de zoom, poderá ampliar os painéis da janela de zoom e diminuir o zoom na janela de zoom. O zoom só acontece se você estiver em uma janela de zoom 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"

Adicionar 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

24



Apenas um único upvote ?! Essa resposta é incrível! Funciona muito bem, introduz novas funcionalidades que agora substituem completamente o programa 'terminator' incoativo que eu costumava usar. - sillyMunky
+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 incrível. É a tela + - Brad Parks
+1. Isso funciona muito bem, mas é uma fração de segundo (~ 0,8s) mais lento que a resposta do @ Ryan, pelo menos no meu sistema. Não é grande coisa, mas eu me pergunto se há uma maneira de torná-lo mais rápido - Amelio Vazquez-Reina
Lindo mesmo. Eu adoro os nomes dos painéis especiais (zoom @…), que são lembretes úteis, e o único comando "x" zoom in / out. - Eric Lebigot


Cntl + b (prefixo) + z trabalha para ampliar um painel específico no tmux 2.1. você pressiona Ctrl + b + z novamente, o painel de zoom volta ao tamanho original. Não cria um novo painel.

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

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


7





Eu fiz isso para maximizar / minimizar com o mesmo toque 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"

2





Também para mim trabalhar sem 'limpar && eco TMO ZOOM && ler'. Com este snippet toda vez que eu minimizar um painel da primeira janela, desapareça.


1





Para aqueles que não podem ir com tmux 1.8 ou preferem um estado mais longo maximizado, eu publiquei um Script tmux que funciona com o tmux 1.6+.

Espero que ajude.


0





Eu estou no Ubuntu 12.04 e também precisava desse recurso. Desde o tmux 1.8 existe suporte nativo para alternar zoom usando o tmux-prefix z. Como provavelmente não veremos o tmux 1.8 em 12.04 eu compilei o tmux 1.8 a partir do código-fonte em outro computador, renomei-o para _tmux-1.8 e copiei o binário 1.8 para /usr/bin/_tmux-1.8 e editado .bash_aliases -> alias tmux = '_ tmux-1.8'.

Eu não notei nenhum problema usando este método rápido e sujo e quando / se o tmux 1.8 chegar em 12.04 eu não quebrei nada.


0