คุณสามารถใช้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➤ "