bashプロンプトの現在のウィンドウ番号を取得する


11

ステータスバーを①のようなウィンドウ番号を表示するbashプロンプトに置き換えたい。シェルで現在のウィンドウ番号を取得するにはどうすればよいですか?

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文字が含まれることを気にしない場合は、代わりに2行目を使用できます(エディタとシェルがファイルのエンコーディングを適切に処理できると想定すると、意図がより明確になります)。

次に、次のように使用できます。

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.