Faire un volet tmux de 80 (ou plus) colonnes de large

12

J'essaie de suivre la règle des 80 colonnes lors de l'écriture de mon code, ma configuration tmux actuelle est divisée 50/50 horizontalement. J'aime avoir vim dans le volet de gauche, et dans le volet de droite j'ai un partage 75/25 où je lance d'autres choses.

Sur mon moniteur latéral, 50% fait 76 colonnes de large, mais sur l'écran de mon ordinateur portable, il fait 123 colonnes de large.

Je souhaite maximiser l'espace immobilier pour d'autres commandes. Existe-t-il un moyen de définir cela sur exactement 80 colonnes (ou plus) lorsque je lance mon espace de travail?

Je configure actuellement mon espace de travail avec:

bind C-w source-file ~/dotfiles/scripts/tmux_work_layout

ce fichier contient:

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
JKirchartz
la source
Vous pouvez envisager d'utiliser un éditeur qui remplit le paragraphe jusqu'à la colonne que vous spécifiez, 80 dans votre cas. Vérifiez emacs .
Luis
1
vim 7.3+ a un colorcolumnparamètre qui ajoute une colonne d'un arrière-plan alternatif au Nième caractère. PS> Je ne me tournerai jamais vers le côté obscur;)
JKirchartz

Réponses:

5

Est-ce quelque chose comme ça que vous voulez?

Ajouter au fichier et rendre exécutable par chmod +x filename. appeler par exemple

./sizetmux       # Default hardcoded size
./sizetmux 85    # Specify width

Pour l'exécuter à partir d'un fichier d'origine:

if-shell /path/to/script/sizetmux 80

Code:

#!/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

Il faut aussi prendre en compte par exemple les numéros de ligne dans vim alors peut-être 85?


Éditez peut-être un peu mieux (pas tellement d'encombrement) (après pw0_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"

Runium
la source
cela semble fonctionner parfaitement, existe-t-il un moyen de l'exécuter automatiquement lorsque je charge mon espace de travail? (J'ai aussi mis à jour ma question avec un peu plus d'informations)
JKirchartz
@JKirchartz: mis à jour avec la commande source. (Ravi de voir des gens utiliser des outils décents en passant.;)) J'ai utilisé screenet ce n'est que récemment que j'ai commencé à essayer de me forcer tmux.
Runium
Ouais, j'essayais de comprendre les divisions de Vim, et je n'étais pas très satisfait du flux de travail, vérifié screenun jour avant de trouver tmux, j'adore ça. Configurez-le pour qu'il ressemble à vim et maintenant c'est un jeu d'enfant.
JKirchartz
vient de remarquer un bug, vous ne définissez $ pane nulle part, le remplacer par 0 fonctionnait parfaitement, merci!
JKirchartz
@JKirchartz: Ah, merci. Je l'ai copié à partir d'un code où $paneétait l'argument facultatif 2 et où j'ai essayé de déterminer où se trouvait le volet (gauche / centre / droite) et d'utiliser "R" ou "L" en conséquence, mais il s'est avéré difficile à détecter. Corrigée.
Runium
8

J'ai trouvé le code de la réponse acceptée utile, mais j'utilise tmux 1.8 et cela semble être une fonctionnalité intégrée. Depuis les pages de manuel tmux sous split-window: 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.Donc, simplement en utilisant -l à la place de -p devrait avoir l'effet Tu recherches. ex:

split-window -h -l 80

Une solution similaire pour resize-paneest décrite ici .

Nathan Buesgens
la source
0

Un moyen simple de le faire est d'utiliser la disposition principale-verticale avec Cb M-4 ou Cb: selectl main-vertical. Il est conçu pour emacs donc le volet gauche est de 81 colonnes, vous devrez changer l'option de largeur du volet principal pour en faire 80.

user38548
la source