สร้าง tmux บานหน้าต่าง 80 คอลัมน์ (หรือมากกว่านั้น)


12

ฉันพยายามที่จะปฏิบัติตามกฎคอลัมน์ 80 เมื่อเขียนรหัสของฉันการตั้งค่า tmux ปัจจุบันของฉันถูกแบ่ง 50/50 ในแนวนอน ฉันชอบที่จะเป็นกลุ่มในบานหน้าต่างด้านซ้ายและในบานหน้าต่างด้านขวาฉันมีตัวแบ่ง 75/25 ที่ฉันเรียกใช้สิ่งอื่น

บนหน้าจอมอนิเตอร์ของฉัน 50% กว้าง 76 คอลัมน์ แต่บนหน้าจอแล็ปท็อปของฉันมันกว้าง 123 คอลัมน์

ฉันต้องการเพิ่มอสังหาริมทรัพย์ให้สูงสุดสำหรับคำสั่งอื่น ๆ มีวิธีตั้งค่านี้เป็น 80 คอลัมน์ (หรือมากกว่านั้น) เมื่อฉันเปิดพื้นที่ทำงานหรือไม่?

ฉันกำลังตั้งค่าพื้นที่ทำงานด้วย:

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

ไฟล์นั้นมี:

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

คุณอาจพิจารณาใช้เครื่องมือแก้ไขที่เติมย่อหน้าจนถึงคอลัมน์ที่คุณระบุ 80 ในกรณีของคุณ ตรวจสอบemacs
ลูอิส

1
กลุ่ม 7.3+ มีการcolorcolumnตั้งค่าที่เพิ่มคอลัมน์ของพื้นหลังอื่นที่อักขระ Nth PS> ฉันจะไม่หันไปทางด้านมืด;)
JKirchartz

คำตอบ:


5

คุณต้องการสิ่งนี้ไหม

chmod +x filenameเพิ่มไปยังแฟ้มและจัดทำโดยผู้ปฏิบัติการ โทรโดย

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

หากต้องการเรียกใช้จากไฟล์ที่มา:

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

รหัส:

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

นอกจากนี้ยังต้องคำนึงถึงเช่นหมายเลขบรรทัดเป็นกลุ่มดังนั้นบางที 85?


แก้ไขอาจจะดีกว่านิดหน่อย (ไม่ถ่วงมาก) (หลังจากนั้น 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"


ดูเหมือนว่าจะทำงานได้อย่างสมบูรณ์มีวิธีเรียกใช้โดยอัตโนมัติเมื่อฉันโหลดพื้นที่ทำงานหรือไม่ (เช่นฉันได้อัปเดตคำถามของฉันพร้อมข้อมูลเพิ่มเติมอีกเล็กน้อย)
JKirchartz

@JKirchartz: อัปเดตด้วยคำสั่งต้นฉบับ (ดีที่จะเห็นคนใช้เครื่องมือที่ดีครับ.)) ได้รับการใช้screenและเมื่อเร็ว ๆ tmuxนี้ได้เริ่มต้นที่จะพยายามที่จะบังคับตัวเองไป
Runium

ใช่ฉันพยายามที่จะคิดออกเป็นกลุ่มและฉันไม่ได้มีความสุขมากกับเวิร์กโฟลว์ตรวจสอบออกมาscreenหนึ่งวันก่อนที่จะหาtmuxฉันรักมัน ตั้งค่าให้เหมือนเสียงเรียกเข้าและตอนนี้มันเป็นเรื่องง่าย
JKirchartz

เพิ่งสังเกตเห็นข้อผิดพลาดคุณไม่ได้กำหนด $ pane ที่ใดก็ได้แทนที่ด้วย 0 ทำงานได้อย่างสมบูรณ์ขอบคุณ!
JKirchartz

@JKirchartz: อ้าขอบคุณ ฉันคัดลอกมาจากรหัสบางส่วนซึ่ง$paneเป็นอาร์กิวเมนต์ที่เป็นตัวเลือก 2 และฉันพยายามระบุว่าบานหน้าต่างนั้นอยู่ที่ใด (ซ้าย / กลาง / ขวา) และใช้ "R" หรือ "L" ตามลำดับ แต่พิสูจน์ได้ยาก การแก้ไข
Runium

8

ฉันพบรหัสสำหรับคำตอบที่เป็นประโยชน์ แต่ฉันใช้ tmux 1.8 และดูเหมือนว่าจะเป็นฟีเจอร์ที่สร้างขึ้นจากหน้า man ของ tmux ภายใต้ 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.ดังนั้นการใช้ -l insead ของ -p ควรมีผล คุณกำลังมองหา. อดีต:

split-window -h -l 80

วิธีการแก้ปัญหาที่คล้ายกันสำหรับresize-paneอธิบายไว้ที่นี่


0

วิธีง่ายๆในการทำเช่นนี้คือการใช้เลย์เอาต์ main-vertical กับ Cb M-4 หรือ Cb: selectl main-vertical มันถูกออกแบบมาสำหรับ emacs ดังนั้นบานหน้าต่างด้านซ้ายคือ 81 คอลัมน์คุณจะต้องเปลี่ยนตัวเลือกความกว้างของหน้าต่างหลักเพื่อให้เป็น 80

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.