Tmux условная настройка цвета - PullRequest
0 голосов
/ 06 декабря 2018

Можно ли установить цвет окна в зависимости от другого параметра окна?

Когда в Windows включена synchronize-panes, я не хочу случайно нажать C-d, или все панели будутзакрыто.

Итак, я пытаюсь изменить цвет окна в строке состояния на основе synchronize-panes: (хотя следующая конфигурация не работает)

bind-key S setw synchronize-panes \; \  # toggles the option
           set -w window-status-bg '#{?pane_synchronized,yellow,default}' \; \  # error: bad color
           set -w window-status-current-fg '#{?pane_synchronized,yellow,default}'  # error: bad color

Наиболее вероятное решение, о котором я могу подумать, - это использовать if-shell, но я предпочитаю не разбивать оболочку, чтобы по возможности прочитать саму опцию.


РЕДАКТИРОВАТЬ: Это решение if-shell работает дляme на tmux 2.7

Моя строка состояния голубого цвета, если включен synchronize-panes, голубой становится желтым.

bind-key S setw synchronize-panes \; \
           if-shell '[ #{pane_synchronized} -eq 1 ]' \
               'set -w window-status-style fg=black,bg=yellow ; set -w window-status-current-style fg=yellow,bg=black' \
               'set -w window-status-style fg=black,bg=cyan ; set -w window-status-current-style fg=cyan,bg=black'

РЕДАКТИРОВАТЬ: проблема решена, мои настройки теперь изменены на эту:

bind-key S setw synchronize-panes

sync_ind_colour="#{?pane_synchronized,yellow,cyan}"
set -g window-status-format "#[fg=black,bg=${sync_ind_colour}][#I#{?#{!=:#W,},:,}#W]"
set -g window-status-current-format "#[fg=${sync_ind_colour},bg=black][#I#{?#{!=:#W,},:,}#W]"

Выглядит немного страшно, но все равно читается.

1 Ответ

0 голосов
/ 06 апреля 2019

Для этого не нужно использовать if-shell.Вы можете использовать условные выражения в параметрах формата, но не в стилях.Следующая минимальная конфигурация должна делать то, что вы хотите.

# toggle pane synchronisation mode
bind-key S setw synchronize-panes

# Variables
sync_ind_colour="#{?pane_synchronized,yellow,cyan}"

# status format
setw -g window-status-format "#[fg=black,bg=${sync_ind_colour}]#I #W"
setw -g window-status-current-format "#[fg=${sync_ind_colour},bg=black][#I #W]"

Обратите внимание, что в качестве примера я установил текст состояния окна на #I #W[#I #W] для активного), но это не имеет отношения квопрос.

Также необязательно использовать переменную (sync_ind_colour, цвет индикатора синхронизации), но это проще, чем определять одно и то же условное выражение как в формате окна-состояния, так и в окне состояния-текущего-текущего.переменные формата.

...