Tmux条件颜色设置

时间:2018-12-06 11:53:46

标签: tmux

是否可以根据其他窗口选项设置窗口颜色?

当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解决方案适用于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 :(得分:1)

不必使用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,同步指示器颜色),但是比在window-status-format和window-status-current-format变量中定义相同的条件要简单。