我希望 tmux 仅当当前窗口中有多个窗格时才显示窗格状态。我目前设计了这个,当关闭所有窗格但关闭窗口中的一个窗格时,它将不起作用(这意味着将留下一个窗格,但其状态不会被隐藏):
# Show pane status only when there is more than one pane
set-hook -g window-linked 'set-option -w pane-border-status off'
set-hook -g window-layout-changed 'if-shell -F "#{!=:#{window_panes}, 1}" "set-option -w pane-border-status top" ; if-shell -F "#{==:#{window_panes}, 1}" "set-option -w pane-border-status off"'
set-hook -g window-pane-changed 'if-shell -F "#{!=:#{window_panes}, 1}" "set-option -w pane-border-status top" ; if-shell -F "#{==:#{window_panes}, 1}" "set-option -w pane-border-status off"'
答案1
tmux 格式中的空白非常重要。由于逗号后面有空格字符,表达式“#{==:#{window_panes}}, 1}”始终为 false。
通过从两种格式中删除空格,以下挂钩在 tmux 2.6 下按预期工作
set-hook -g window-layout-changed 'if-shell -F "#{!=:#{window_panes},1}" "set-option -w pane-border-status top" ; if-shell -F "#{==:#{window_panes},1}" "set-option -w pane-border-status off"'
使用条件的替代钩子定义
set-hook -g window-layout-changed 'set-window -F pane-border-status "#{?#{==:#{window_panes},1},off,top}"'
条件记录在https://man.openbsd.org/OpenBSD-current/man1/tmux.1#FORMATS
答案2
我想你差不多明白了。我也有同样的问题,并想出了一个简单的一行答案(换句话说,不需要三个钩子)
is_many="if [ #{window_panes} -eq 1 ]; then exit 1; fi"
set-hook -g window-layout-changed 'if-shell "$is_many" "set-option -w pane-border-status bottom" "set-option -w pane-border-status off"'