Tmux 条件颜色设置

Cyc*_*hih 4 tmux

是否可以设置窗口颜色取决于其他窗口选项?

synchronize-panes启用Windows 后,我不想意外按下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
Run Code Online (Sandbox Code Playgroud)

我能想到的最可能的解决方案是使用if-shell,但如果可能的话,我不希望为了读取自身的选项而分叉 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'
Run Code Online (Sandbox Code Playgroud)

编辑:问题解决了,我的设置现在改为:

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]"
Run Code Online (Sandbox Code Playgroud)

看起来有点吓人,但它仍然可读。

Ach*_*eas 8

应该没有必要为此使用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]"

Run Code Online (Sandbox Code Playgroud)

请注意,我将窗口状态的文本设置为#I #W(和[#I #W]用于活动)作为示例,但这与问题无关。

也不需要使用变量(sync_ind_colour, 同步指示器颜色),但它比在 window-status-format 和 window-status-current-format 变量中定义相同的条件更简单。

  • 好吧,看起来支持给定格式的部分是 status-left、status-right、window-status-format 和 window-status-current-format,我已经设置了所有这些,它几乎可以工作,但我可以无法获得窗口列表和状态右侧之间的间隙。我看不出有什么方法可以让它发挥作用。 (2认同)