Вопрос или проблема
По умолчанию Tmux отображает -
после названия окна, чтобы обозначить последнее посещенное окно. Есть ли способ настроить этот маркер и установить его на пользовательский символ? Спасибо,
man 1 tmux
говорит:
По умолчанию в списке окон отображаются индекс, название и (если есть) флаг окон текущей сессии в порядке возрастания. Это можно настроить с помощью опций
window-status-format
иwindow-status-current-format
. Флаг — это один из следующих символов, добавленных к названию окна:Символ Значение * Обозначает текущее окно. - Обозначает последнее окно (предыдущее выбранное). # Окно наблюдается, и обнаружена активность. ! В окне произошел звонок. ~ Окно было тихим в течение интервала monitor-silence. M Окно содержит отмеченную панель. Z Активная панель окна увеличена.
О set-window-option window-status-format
:
window-status-format string
Задает формат, в котором окно отображается в строке состояния списка окон. […] По умолчанию:#I:#W#F
.
Затем в разделе FORMATS
вы узнаете, что #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
, который указывает формат, используемый, когда окно является текущим окном. Флаг “последнее окно” очевидно не применяется к текущему окну, но если вы хотите настроить флаги, которые могут применяться, то вам также нужно изменитьwindow-status-current-format
. -
Строка для добавления в
/etc/tmux.conf
или~/.tmux.conf
выглядит так:set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | tr '-' '<')"
*Или скорее многобайтовую. Сравните это.
Я не знаю, когда это было добавлено, но вы можете выполнять замену с помощью регулярных выражений в формате tmux, что упрощает достижение этого. Из руководства:
Префикс в виде 's/foo/bar/:' заменит 'foo' на 'bar' по всему тексту.
Первый аргумент может быть расширенным регулярным выражением, а последний аргумент может содержать 'i', чтобы игнорировать регистр, например:
's/a(.)/\1x/i:' превратит 'abABab' в 'bxBxbx'.
Итак, для вашего случая вы можете выполнить замену содержимого переменной window_flags
, как это:
set-window-option -g window-status-format " #{s/-/>>/:window_flags} #I #W"
Я сделал небольшую хитрость. вместо замены одного из этих символов через s/../../
, я использовал подстановку по переменной, как следует:
set -g window-status-separator ''
set -g window-status-style 'fg=black bg=colour236'
set -g window-status-current-format '#{?window_bell_flag,#[bg=red],}#{?window_last_flag,#[bg=darkgreen],}#{?window_flags,#I,#[fg=white]#I#[fg=default]#[fg=white]}#W#{?window_flags, ,}#{?window_active, ,}#{?window_last_flag, ,}#{?window_marked_flag, ,}#{?window_activity_flag, ,}#{?window_bell_flag, ,}#{?window_silence_flag, ,}#{?window_zoomed_flag, ,}#[fg=default]'
set -g window-status-format '#{?window_bell_flag,#[bg=red],}#{?window_last_flag,#[bg=darkgreen],}#{?window_flags,#I,#[fg=white]#I#[fg=default]#[fg=white]}#W#{?window_flags, ,}#{?window_active, ,}#{?window_last_flag, ,}#{?window_marked_flag, ,}#{?window_activity_flag, ,}#{?window_bell_flag, ,}#{?window_silence_flag, ,}#{?window_zoomed_flag, ,}#[fg=default]'
это еще не оптимальное решение, но я думаю, вы поняли идею. Я просто не использую флаги, а вместо этого просто добавляю пользовательские символы в зависимости от наличия флага через, например, #{?window_zoomed_flag,fullscreen, ,}
взято из моих конфигурационных файлов здесь
.
Ответ или решение
Конечно, настройка интерфейса tmux
– это полезный прием, который значительно улучшает рабочий процесс пользователя. Если вас не устраивает стандартный символ "-" для обозначения последнего посещенного окна в tmux
, можно легко настроить это в соответствии с вашими предпочтениями.
По умолчанию в tmux
используется символ "-" после названия окна для обозначения "прошлого окна", т.е. последнего, которое вы посещали. Тем не менее, вы можете изменить этот символ, используя настройку формата строк состояния окна.
Как изменить символ "last window marker" в tmux
Шаг 1: Настройка window-status-format
Вы можете задать собственный формат отображения окон с помощью опции set-window-option
. Воспользуйтесь командой для изменения символа "-":
tmux set-window-option -g window-status-format "#{s/-/>/:/window_flags} #I #W"
Эта команда использует регулярные выражения для замены символа "-" на ">" в переменной window_flags
.
Шаг 2: Добавление в tmux.conf
Чтобы изменения сохранялись при каждом запуске tmux
, добавьте строку в файл конфигурации ~/.tmux.conf
:
set-window-option -g window-status-format "#{s/-/➔/:window_flags} #I #W"
Где ➔
– это пользовательский символ, который вы хотите использовать. Вы можете заменить его любым другим символом по вашему выбору.
Шаг 3: Поддержание формата для "current window"
Кроме того, обязательно настройте window-status-current-format
, чтобы иметь единообразие отображения, особенно если вы хотите изменять другие индикаторы, применяемые к текущему окну:
tmux set-window-option -g window-status-current-format "#{s/-/➔/:window_flags} #I #W"
Продвинутые возможности настройки
Если вы хотите еще больше стилизовать ваш статус-строку tmux
, можно использовать дополнительные опции стиля и форматирования, такие как:
- Изменение цвета текста и фона в зависимости от статуса окна.
- Добавление новых символов для обозначения различных состояний окна, включая активность, зумирование и т.д.
Пример:
set -g window-status-style 'fg=grey bg=black'
set -g window-status-current-format '#{?window_zoomed_flag,Зумировано ,}#{?window_last_flag,<<<< ,}#I:#W'
Заключение
Настраивая tmux
, вы можете не только повысить удобство своей работы, но и добавить уникальный стиль, который будет соответствовать вашим предпочтениям. Используйте вышеописанные команды и поместите их в файл конфигурации ~/.tmux.conf
, чтобы сохранить изменения. Это позволит вам не терять настройки при каждом запуске tmux
.