Я хочу заменить строку состояния на приглашение bash, отображающее номер окна, например ①. Как получить номер текущего окна в оболочке?
Есть переменная окружения 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, то вы можете использовать вторую строку (она, безусловно, делает намерение более очевидным, если ваш редактор и оболочка могут правильно обрабатывать кодировку файла).
Тогда вы можете использовать это так:
PS1="$(tmux_winidx_circled) \W➤ "
решение2
Все, что мне нужно было, это прошить и извлечь сообщение 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, но это уже другая история.