Możesz użyć, display-message -p
aby wysłać dane wyjściowe na standardowe wyjście, aby uniknąć konieczności wyodrębnienia go z danych wyjściowych show-messages
:
tmux display-message -p '#I'
Możesz przekonwertować na takie liczby w kółku ( składnia bash ; testowana z wersjami 3.2.48 i 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
}
Pierwsza linia jest ładna, ponieważ jest czystym ASCII; jeśli nie masz nic przeciwko umieszczeniu znaków w pliku innym niż ASCII, możesz zamiast tego przejść do drugiej linii (to z pewnością czyni intencję bardziej oczywistą, zakładając, że edytor i powłoka poprawnie obsługują kodowanie pliku).
Następnie możesz użyć tego w następujący sposób:
PS1="$(tmux_winidx_circled) \W➤ "