Как настроить «маркер последнего окна» tmux?

Как настроить «маркер последнего окна» tmux?

По умолчанию Tmux отображается -после заголовка окна для обозначения последнего посещенного окна. Есть ли способ настроить этот маркер и установить его в качестве пользовательского символа? Спасибо,

решение1

man 1 tmuxговорит:

По умолчанию список окон показывает индекс, имя и (если есть) флаг окон, присутствующих в текущем сеансе, в порядке возрастания номеров. Его можно настроить с помощью параметров window-status-formatи window-status-current-format. Флаг — это один из следующих символов, добавляемых к имени окна:

Symbol    Meaning
*         Denotes the current window.
-         Marks the last window (previously selected).
#         Window is monitored and activity has been detected.
!         A bell has occurred in the window.
~         The window has been silent for the monitor-silence interval.
M         The window contains the marked pane.
Z         The window's active pane is zoomed.

О set-window-option window-status-format:

window-status-format string
Установите формат, в котором окно отображается в списке окон строки состояния. […] Значение по умолчанию — #I:#W#F.

Затем под FORMATSyou learn #Fподразумевается "флажки окна". Я не нашел никаких следов какой-либо возможности изменять символы, связанные с флагами напрямую. Тем не менее, вы можете использовать это:

Кроме того, первую строку вывода команды оболочки можно вставить с помощью #().

Это означает, что вы можете использовать trили sedдля изменения -во что-то другое. Вас может это насторожить:

При построении форматов tmuxне ждет #()завершения команд; вместо этого используется предыдущий результат выполнения той же команды или заполнитель, если команда ранее не выполнялась.

Все еще в моих тестах простые замены с trили, sedкажется, работают сразу, так что, вероятно, не о чем беспокоиться. Изнутри tmuxзапустите это:

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | tr '-' '<')"

или это:

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | sed 's/-/</')"

Я рекомендую, trпотому что он проще и меньше, чем sed, он должен работать лучше (если это важно). Но если вы хотите заменить -на какую-то многосимвольную строку *sed , то это ваш инструмент. Пример:

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | sed 's/-/<--/')"

Примечания:

  • %%вместо %этого из-за tmuxсинтаксического анализатора.
  • tmux set-window-option window-status-format …(без -g) определяет формат для одного окна; он будет иметь приоритет над глобальным форматом для этого конкретного окна.
  • Также есть window-status-current-formatwhich определяет формат, используемый, когда окно является текущим окном. Флаг "последнее окно" очевидно никогда не применяется к текущему окну, но если вы хотите настроить флаги, которые могут применяться, то вам window-status-current-formatтакже нужно изменить.
  • Строка, которую нужно добавить к /etc/tmux.confor, ~/.tmux.confвыглядит так:

    set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | tr '-' '<')"
    

* Или скорее многобайтовый. Сравнитьэтот.

решение2

Я не знаю, когда это было добавлено, но вы можете выполнить замену регулярных выражений с помощью формата tmux, что упрощает достижение этой цели. Из man-страницы:

A prefix of the form ‘s/foo/bar/:’ will substitute ‘foo’ with ‘bar’ throughout.
The first argument may be an extended regular expression and a final argument may be ‘i’ to ignore case, for example:
 ‘s/a(.)/\1x/i:’ would change ‘abABab’ into ‘bxBxbx’.

Таким образом, в вашем случае вы можете выполнить замену window_flagsсодержимого переменной следующим образом:

set-window-option -g window-status-format "  #{s/-/>>/:window_flags} #I #W"

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