取得 bash 提示字元的目前視窗號

取得 bash 提示字元的目前視窗號

我想用顯示視窗號碼的 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 圓圈數字字元替換常規數字 - 但那是另一個故事了。

相關內容