Вы можете использовать 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➤ "