Получить номер текущего окна для командной строки bash

Получить номер текущего окна для командной строки bash

Я хочу заменить строку состояния на приглашение 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, но это уже другая история.

Связанный контент