Estou tentando seguir a regra das 80 colunas ao escrever meu código, minha configuração atual do tmux é dividida 50/50 horizontalmente. Gosto de ter o vim no painel esquerdo e no painel direito tenho uma divisão 75/25 onde executo outras coisas.
No meu monitor lateral, 50% tem 76 colunas de largura, mas na tela do meu laptop tem 123 colunas de largura.
Gostaria de maximizar o espaço para outros comandos. Existe uma maneira de definir isso para exatamente 80 colunas (ou mais) quando eu iniciar meu espaço de trabalho?
Atualmente estou configurando meu espaço de trabalho com:
bind C-w source-file ~/dotfiles/scripts/tmux_work_layout
esse arquivo contém:
selectp -t 0 # Select pane 0
splitw -h -p 50 # Split pane 0 vertically by 50%
selectp -t 1 # Select pane 1
splitw -v -p 25 # Split pane 1 horizontally by 25%
selectp -t 0 # Select pane 0
Responder1
Achei útil o código da resposta aceita, mas estou usando o tmux 1.8 e este parece ser um recurso integrado. Nas páginas de manual do tmux na janela dividida: The -l and -p options specify the size of the new pane in lines (for vertical split) or in cells (for horizontal split), or as a percentage, respectively.
Portanto, simplesmente usar -l em vez de -p deve ter o efeito você está procurando. ex:
split-window -h -l 80
Uma solução semelhante para resize-pane
é descritaaqui.
Responder2
É algo assim que você quer?
Adicione ao arquivo e torne executável por chmod +x filename
. ligue por exemplo
./sizetmux # Default hardcoded size
./sizetmux 85 # Specify width
Para executá-lo a partir do arquivo de origem:
if-shell /path/to/script/sizetmux 80
Código:
#!/bin/bash
# Wanted pane width 0 - default 80, or pass argument 1 as wanted width
pw0=80
[[ "$1" =~ ^[0-9]+$ ]] && pw0="$1"
# This could be done nicer, but, anyhow: getting current width of pane 0
pw0_cur_w=$(tmux list-panes | awk -F"[ x:\\\[\\\]]+" '/^0:/{print $2}')
# Resize according to current width
if [[ "$pw0_cur_w" -eq "$pw0" ]]; then
echo "OK $pw0"
elif [[ "$pw0_cur_w" -gt "$pw0" ]]; then
((w = pw0_cur_w - pw0))
echo "$w less"
tmux resize-pane -L -t 0 "$w"
elif [[ "$pw0_cur_w" -lt "$pw0" ]]; then
((w = pw0 - pw0_cur_w))
echo "$w more"
tmux resize-pane -R -t 0 "$w"
fi
Também é preciso levar em conta, por exemplo, números de linha no vim, talvez 85?
Edite talvez um pouco melhor (sem tanta confusão) (depoispw0_cur_w=$(tm ...
((w = pw0_cur_w - pw0))
if [[ "$w" -ge 0 ]]; then
dir="L"
echo "$w less"
else
dir="R"
((w *= -1))
echo "$w more"
fi
[[ "$w" -gt "0" ]] && tmux resize-pane -"$dir" -t 0 "$w"
Responder3
Uma maneira fácil de fazer isso é usar o layout vertical principal com Cb M-4 ou Cb : selectl main-vertical. Ele foi projetado para emacs, então o painel esquerdo tem 81 colunas, você precisará alterar a opção main-pane-width para torná-lo 80.
Responder4
As coisas mudaram desde que a pergunta e a última resposta foram postadas. tmux possui ganchos que podem ser usados para manter fixa a largura do painel principal.
por exemplo, eu uso o seguinte alias:
alias work-bftp="tmux attach -t work-bftp || tmux new -s work-bftp -d 'bash' \; set -g default-command bash \; split-window -h \; set-option -t work-bftp main-pane-width 80 \; selectl main-vertical \; set-hook -t work-bftp window-layout-changed 'selectl main-vertical;' \; attach;"
para criar uma main-vertical
janela baseada em layout, onde o painel principal é usado para uso do vim com 80 colunas de largura na primeira janela. Isso usa window-layout-changed
evento para redesenhar a janela com o tamanho desejado.
Eu tentei, e funcionou por um tempo, com client-resized
evento também, mas um dia parou de funcionar para maximizar as operações da janela do terminador/emulador.
um problema com essa abordagem é que o prefixo-z não funciona mais na primeira janela.