Tmux 条件颜色设置
Tmux conditional color setting
是否可以根据其他 window 选项设置 window 颜色?
当 windows 启用 synchronize-panes
时,我不想不小心按下 C-d
,否则所有窗格都会关闭。
所以我想做的是根据 synchronize-panes
更改状态栏上的 window 颜色:
(不过以下配置不起作用)
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
,但如果可能的话,我不希望只为了读取自身的选项而分叉 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]"
看起来有点吓人,但还是可以读的。
不需要为此使用 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]"
请注意,我将 window 状态的文本设置为 #I #W
(并且 [#I #W]
表示活动)作为示例,但这与问题无关。
也没有必要使用变量(sync_ind_colour
,同步指示器颜色),但它比在 window-status-format 和 [=21] 中定义相同的条件更简单=]-状态当前格式变量。
是否可以根据其他 window 选项设置 window 颜色?
当 windows 启用 synchronize-panes
时,我不想不小心按下 C-d
,否则所有窗格都会关闭。
所以我想做的是根据 synchronize-panes
更改状态栏上的 window 颜色:
(不过以下配置不起作用)
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
,但如果可能的话,我不希望只为了读取自身的选项而分叉 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]"
看起来有点吓人,但还是可以读的。
不需要为此使用 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]"
请注意,我将 window 状态的文本设置为 #I #W
(并且 [#I #W]
表示活动)作为示例,但这与问题无关。
也没有必要使用变量(sync_ind_colour
,同步指示器颜色),但它比在 window-status-format 和 [=21] 中定义相同的条件更简单=]-状态当前格式变量。