我想用顯示視窗號碼的 bash 提示字元替換狀態欄,如①。如何在 shell 中取得目前視窗號?
有 TMUX_PANE 環境變量,不幸的是沒有 TMUX_WINDOW。
我得到的最接近的是:
tmux display-message
刷新視窗/窗格信息,然後獲取最後一行tmux show-messages
並解析它。我不希望每次顯示提示時視窗/窗格資訊都會閃爍。
答案1
您可以使用display-message -p
將輸出傳送到 stdout 以避免從下列輸出中提取它show-messages
:
tmux display-message -p '#I'
您可以像這樣轉換為帶有圓圈的數字(巴什句法;使用版本 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 字符,那麼您可以使用第二行(這肯定會使意圖更加明顯,假設您的編輯器和 shell 可以正確處理檔案的編碼)。
然後你可以像這樣使用它:
PS1="$(tmux_winidx_circled) \W➤ "
答案2
我所需要的只是在啟動 shell 時刷新並提取 tmux 訊息並儲存它。噢!
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 圓圈數字字元替換常規數字 - 但那是另一個故事了。