Отримайте поточний номер вікна для запиту bash


11

Я хочу замінити рядок стану на підказку bash із відображенням номера вікна типу ①. Як я можу отримати поточний номер вікна в оболонці?

Там є змінна env TMUX_PANE, на жаль, немає TMUX_WINDOW.

Найближче, що у мене з’явилося: tmux display-messageпрошити інформацію про вікно / панель, потім взяти останній рядок tmux show-messagesі проаналізувати його. Я не хочу, щоб інформація про вікно / панель блимала щоразу, коли відображається запит.

Відповіді:


14

Ви можете використовувати 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➤ "

3

Все, що мені було потрібно - це спалахнути та витягнути повідомлення 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, - але це вже інша історія.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.