รับหมายเลขหน้าต่างปัจจุบันสำหรับ bash prompt


11

ฉันต้องการแทนที่แถบสถานะด้วย bash prompt ที่แสดงหมายเลขหน้าต่างเช่น① ฉันจะรับหมายเลขหน้าต่างปัจจุบันในเชลล์ได้อย่างไร

มีตัวแปร env ของ TMUX_PANE แต่น่าเสียดายที่ไม่มี TMUX_WINDOW

ฉันได้ใกล้เคียงที่สุดคือ: tmux display-messageแฟลชข้อมูลหน้าต่าง / บานหน้าต่างจากนั้นใช้บรรทัดสุดท้ายของtmux show-messagesและแยกมัน ฉันไม่ต้องการให้ข้อมูลหน้าต่าง / บานหน้าต่างกระพริบทุกครั้งที่มีข้อความแจ้งปรากฏขึ้น

คำตอบ:


14

คุณสามารถใช้display-message -pเพื่อส่งเอาต์พุตไปยัง stdout เพื่อหลีกเลี่ยงไม่ให้แตกออกจากเอาต์พุตของshow-messages:

tmux display-message -p '#I'

คุณสามารถแปลงเป็นตัวเลขวงกลมเช่นนี้ ( ไวยากรณ์bash ; ทดสอบกับรุ่น 3.2.48 และ 4.2.20):

circled_digits=$(printf %s \${$'\xEA',\`,{a..s}} | iconv -f UTF-16BE)
# circled_digits='⓪①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳'

tmux_winidx_circled() {
    local winidx=$(tmux display-message -p '#I')
    if (( winidx > 20 )); then
        echo "($winidx)"
    else
        echo "${circled_digits:$winidx:1}"
    fi
}

บรรทัดแรกนั้นดีมากที่มันเป็น ASCII บริสุทธิ์ หากคุณไม่ทราบว่ามีตัวอักษรที่ไม่ใช่ ASCII ในไฟล์กำหนดค่าของคุณคุณสามารถไปกับบรรทัดที่สองแทนได้ (แน่นอนว่าจะทำให้เห็นได้ชัดขึ้นโดยเจตนาสมมติว่าตัวแก้ไขและเชลล์สามารถจัดการการเข้ารหัสไฟล์ได้อย่างเหมาะสม)

จากนั้นคุณสามารถใช้มันเช่นนี้:

PS1="$(tmux_winidx_circled) \W➤ "

3

สิ่งที่ฉันต้องการคือการแฟลชและแยกข้อความ tmux เมื่อเริ่มต้นเชลล์และเก็บสิ่งนี้ D-Oh!

tmux display-message
export TMUX_WINDOW=$(tmux show-messages | tail -1 | grep -o '\[[0-9]\] \([0-9]\)' | grep -o '[0-9]$')
PS1="$(echo $TMUX_WINDOW) \W➤ "

ตอนนี้ข้อความแจ้งของฉันดูเหมือนว่า:

[2] ~➤  

และสิ่งที่เหลืออยู่คือการปรับปรุงการแยกวิเคราะห์และแทนที่ตัวเลขปกติด้วยอักขระ Unicode ที่ล้อมรอบตัวเลขที่น่ารัก แต่นั่นเป็นอีกเรื่องหนึ่ง

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