Настройка внешнего вида tmux#

Гибкая система настройки, предоставляемая tmux, позволяет не только настраивать способ взаимодействия с интерфейсом, но также дает возможность настроить его внешний вид, чтобы сделать интерфейс более понятным, а в некоторых случаях и более информативным.

tmux предоставляет довольно много настроек внешнего вида. В этом разделе мы пройдемся по настройкам некоторых из этих параметров, настроим строку состояния и другие компоненты. Что ж начнем с настройки цветов для различных элементов. Затем превратим строку состояния в элемент интерфейса предоставляющий некоторую важную информацию об используемом окружении.

Настройка поддержки цветов#

Чтобы иметь возможность настраивать визуальные эффекты tmux, необходимо убедиться, что и терминал, и tmux настроены на использование 256 цветов.

Команда tput поможет быстро определить количество цветов, поддерживаемых терминалом. Введите команду

$ tput colors

Если в результате будет получено 256, значит все настроено как надо. В противном случае, потребуется настроить терминал для использования режима 256 xterm. На Mac можно настроить это в приложение «Terminal», отредактировав профиль, как показано на следующем рисунке:

При использовании (http://www.iterm2.com)[iTerm2], можно сделать это, отредактировав профиль по умолчанию и изменив режим терминала на xterm-256color, как показано на следующем рисунке:

При использовании Linux, может потребоваться добавить

~/.bashrc

[ -z "$TMUX"] && export TERM=xterm-256color

в файл .bashrc, чтобы включить 256-цветный режим терминала. Этот условный оператор гарантирует, что переменная TERM устанавливается только вне tmux, так как tmux устанавливает свой собственный терминал.

Кроме того, необходимо убедиться, что эмулятор терминала поддерживает отображение символов UTF-8, чтобы визуальные элементы, например, разделители панелей отображались пунктирными линиями.

Чтобы tmux отображал 256 цветов, добавьте эту строку в наш файл .tmux.conf:

# ~/.tmux.conf

# Set the default terminal mode to 256color mode
set -g default-terminal "screen-256color"

Как только будет установлен правильный цветовой режим, будет намного проще использовать такие программы, как Vim, Emacs и другие полноцветные программы с tmux, особенно когда используются более сложные цветовые схемы для подсветки синтаксиса. Следующий рисунок, поможет увидеть разницу.

Определение кодов цветов#

Теперь давайте настроим внешний вид компонентов tmux, начиная с цветовой схемы.

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

tmux предоставляет переменные, которые используются для указания цветов: black, red , green, yellow, blue, magenta, cyan, или white. Также можно использовать обозначения от color0 до color255 для ссылки на конкретные цвета в палитре из 256 цветов.

Чтобы найти коды цветов, достаточно запустить следующий простой сценарий:

for i in {0..255}; do
    printf "\x1b[38;5;${i}m${i} "
done

При выполнении данного сценария в терминале отобразятся коды доступных для использования цветов:

tmux имеет определенные параметры конфигурации для изменения цветов текста и фона для каждого из своих компонентов.

Давайте начнем изучать их с настройки цветов строки состояния.

Изменение цветов строки состояния#

Строка состояния по умолчанию имеет черный текст на ярко-зеленом фоне. Это не очень красиво, и в зависимости от конфигурации терминала, может быть трудночитаемым.

Давайте сделаем так, чтобы по умолчанию в строке состояния был белый текст на черном фоне:

Параметр status-style устанавливает основной цвет элемента (foreground) и цвет фона (background) строки состояния, а также их стиль. Добавим следующую строку в конфигурацию, чтобы установить цвета строки состояния:

# ~/.tmux.conf

# Set the status line's colors
set -g status-style fg=white, bg=black

Опция fg устанавливает основной цвет элементов (foreground), а параметр bg (background) устанавливает цвет фона.

Эта команда поддерживает параметры dim (тусклый), bright (яркий) (или bold (полужирный)), reverse (обратный), и blink (мигающий) в дополнение к цветам. Например, чтобы сделать текст строки состояния белым и полужирным, нужно использовать следующую конфигурацию:

# ~/.tmux.conf

set -g status-style fg=white,bold, bg=black

Продолжим настроить цвета элементов в строке состояния.

Изменение цвета списка окон#

tmux отображает список окон в строке состояния. Давайте выделим активное окно, оформив его в красный цвет, а неактивные окна — в голубой. Опция window-status-style управляет тем, как выглядят обычные окна, а параметр window-status-current-style управляет тем, как выглядит активное окно. Для настройки цвета, используется тот же синтаксис, что и для параметра status-style. Давайте сделаем имена окон голубыми, как здесь:

# ~/.tmux.conf

# Set the color of the window list
setw -g window-status-style fg=cyan, bg=black

Можно использовать default, чтобы элемент наследовал цвет строки состояния.

Теперь оформим активное окно с красным фоном и полужирным белым текстом:

# ~/.tmux.conf

# Set colors for the active window
setw -g window-status-current-style fg=white,bold, bg=red

Теперь неактивные окна окрашены в голубой цвет, а активное окно легко узнать:

Изменение внешнего вида панелей#

После того как мы настроили список окон, давайте посмотрим, как можно настроить отображение панелей в окне. Есть несколько вариантов управления внешним видом панелей. Можно управлять цветом разделителей панели, можно определить цвета, чтобы сделать активную панель более заметной, и даже можно «затемнить» неактивные панели.

Панели имеют основной, и фоновый цвета. Основной цвет панели — это пунктирная линия, образующая границу. Цвет фона по умолчанию черный, но если закрасить его, когда панель активна, то можно сделать активную панель значительно заметнее, как показано на следующем рисунке:

Чтобы добавить этот эффект, добавим в свой конфигурационный файл следующие определения:

# ~/.tmux.conf

# Colors for pane borders
setw -g pane-border-style fg=green,bg=black
setw -g pane-active-border-style fg=white,bg=yellow

Наконец, можно для того, чтобы сделать активную панель еще более заметной, изменим основной цвет или цвет фона текущей панели. Также можно затемнить панели, которые не находятся в фокусе. Параметры set-window-style и set-window-active-style позволяют управлять основным цветом и цветом фона. Давайте затемним все панели, которые не активны. Добиться этого можно затемнив все панели, а затем сделав так, чтобы активная панель выглядела нормально. Добавим эти строки в конфигурацию:

# ~/.tmux.conf

# Active pane normal, other shaded out
setw -g window-style fg=colour240,bg=colour235
setw -g window-active-style fg=white,bg=black

Чтобы создать эффект затемнения, установим цвет текста переднего плана на светло-серый, а затем используем более темный серый цвет для фона. Затем для активной панели используем черный и белый цвета.

После данных настроек определить активную панель станет значительно проще.

Настройка командной строки tmux#

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

# ~/.tmux.conf

# Command / message line
set -g message-style fg=white,bold,bg=black

Настройка элементов строки состояния#

Строка состояния tmux может отображать почти любую необходимую информацию. Причем можно использовать как некоторые предопределенные компоненты, так и создавать свои собственные, например, выполняя системные команды.

Строка состояния состоит из трех компонентов: левой панели, списка окон и правой панели. По умолчанию строка состояния выглядит так:

[0] 0:bash*  "dev.bookseer" 22:00 31-янв-24

С левой стороны отображается имя сеанса tmux, за которым следует список окон. Список окон показывает числовой индекс текущего окна и его имя. С правой стороны отображается имя хоста, за которым следуют дата и время. Давайте настроим содержимое строки состояния.

Содержимое левой или правой панелей строки состояния можно изменить, используя комбинацию текста и переменных. В следующей таблице показаны возможные переменные, которые можно использовать.

Таблица 1. Переменные строки состояния

Переменная

Описание

#H

Имя локального хоста

#h

Имя локального хоста без имени домена

#F

Флаг текущего окна

#I

Индекс текущего окна

#P

Текущий индекс панели

#S

Имя текущего сеанса

#T

Текущий заголовок окна

#W

Имя текущего окна

##

Символ #

#(shell-command)

Первая строка вывода команды оболочки

#[attributes]

Изменение цвета или атрибута

Например, чтобы слева отображалось только имя текущего сеанса tmux, нужно использовать параметр set-option -g status-left со значением #S, например: set -g status-left "#S"

Также можно сделать элемент более заметным, используя атрибут для установки основного цвета элемента, например: set -g status-left "#[fg=green]#S"

Можно добавить столько атрибутов и элементов в строку состояния, сколько необходимо. В качестве примера изменим левую часть строки состояния так, чтобы имя сеанса отображалось зеленым цветом, номер текущего окна — желтым, а текущая панель голубым. Добавьте эту строку в ваш файл конфигурации:

# ~/.tmux.conf

set -g status-left "#[fg=green]#S #[fg=yellow]#I #[fg=cyan]#P"`

Также можно добавить и произвольный текст. Давайте добавим текст, чтобы сделать сеанс, имя окна и панели более заметными, например:

# ~/.tmux.conf

# Status line left side to show Session:window:pane
set -g status-left-length 40
set -g status-left "#[fg=green]Session: #S #[fg=yellow]#I #[fg=cyan]#P"

Заметим, что для того, чтобы весь текст отобразился нормально, был изменен параметр status-left-length, который увеличивает размер отображаемого текста.

Теперь настроим правую часть строки состояния. Добавим текущую дату и время, например:

# ~/.tmux.conf

# Status line right side - 31-Oct 13:37
set -g status-right "#[fg=cyan]%d %b %R"

Данная настройка отформатирует дату в виде «31 октября 13:37». При желании, можно отформатировать ее по своему усмотрению, используя стандартный механизм форматирования времени strftime используемый во многих языках программирования. Теперь строка состояния должна выглядеть так:

Еще одна мощная возможность — использовать переменную #(shellcommand) для возврата результата любой внешней программы командной строки в строку состояния.

Поддержание актуальности информации в строке состояния#

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

# ~/.tmux.conf

# Update the status line every sixty seconds
set -g status-interval 60

Такая настройка будет обновлять строку состояния каждые 60 секунд. Следует иметь в виду, что при запуске команд оболочки, они будут выполняться каждый интервал, поэтому нужно быть осторожнее чтобы не загрузить слишком много ресурсоемких сценариев.

Центрирование окон списка#

По умолчанию список окон выровнен по левому краю, но можно разместить его по центру строки состояния с помощью изменения конфигурации:

# ~/.tmux.conf

# Center the window list in the status line
set -g status-justify centre

Теперь список окон отображается по центру:

По мере создания новых окон список окон будет смещаться, оставаясь в центре строки состояния.

Идентификация активности в других окнах#

Когда пользователь работает с более чем одним окном, ему нужно получать уведомления, когда что-то происходит в одном из других окон сеансе, чтобы можно было отреагировать на происходящие события. Сделать это можно, добавив визуальные уведомления, например, так:

# ~/.tmux.conf

# Enable activity alerts
setw -g monitor-activity on
set -g visual-activity on

Команда monitor-activity on выделяет имя окна в строке состояния, когда в этом окне есть активность. visual-actyvity on указывает tmux также отображать сообщение в строке состояния. Теперь, когда в одном из окон есть какая-то активность, оно будет выделяться голубым фоном, как на изображении:

Если переключиться на это окно, цвета вернутся к норме. Для настройки цветов можно использовать команду setw -g window-status-activity-style.

Команды для управления внешним видом tmux#

Команда

Описание

set -g status-style

Устанавливает основной цвет и цвет фона строки состояния. Кроме того, поддерживает параметры dim, bright (или bold), reverse, и blink. Пример: set -g status-style fg=white,bold,bg=black

setw -g window-status-style

Устанавливает основной цвет и цвет фона списка окон в строке состояния. Использует те же параметры, что и status-style.

setw -g window-status-current-style

Устанавливает основной цвет и цвет фона активного окна в строке состояния. Использует те же параметры, что и status-style.

setw -g window-status-activity-style

Устанавливает основной цвет и цвет фона окна с фоновой активностью в строке состояния. Использует те же параметры, что и status-style.

setw -g pane-border-style

Задает основной цвет и цвет фона границ панели. Использует те же параметры, что и status-style.

setw -g pane-active-border-style

Устанавливает основной цвет и цвет фона границ активной панели. Использует те же параметры, что и status-style.

setw -g window-style

Устанавливает основной цвет и цвет фона окна. Использует те же параметры, что и status-style.

setw -g window-active-style

Устанавливает основной цвет и цвет фона активного окна. Использует те же параметры, что и status-style.

setw -g message-style

Устанавливает основной цвет и цвет фона области сообщений и командной строки tmux. Использует те же параметры, что и status-style.

set -g status-length-left и set -g status-length-right

Управляет количеством видимых символов слева и справа в строке состояния.

set -g status-left и set -g status-right

Настраивает элементы, которые отображаются в левой и правой частях строки состояния.

set -g status-interval n

Определяет интервал обновления для строки состояния, где n — количество секунд между обновлениями.

set -g status-justify centre

Центрирует список окон в строке состояния.

setw -g monitor-activity on

Ищет активность в других окнах и выделяет имя окна с фоновой активностью.

set -g visual-activity on

Отображает сообщение в области сообщений при наличии активности в другом окне.