を使用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➤ "