По умолчанию 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
.
Затем под FORMATS
you 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-format
which определяет формат, используемый, когда окно является текущим окном. Флаг "последнее окно" очевидно никогда не применяется к текущему окну, но если вы хотите настроить флаги, которые могут применяться, то вамwindow-status-current-format
также нужно изменить. Строка, которую нужно добавить к
/etc/tmux.conf
or,~/.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"