현재 창에 여러 개의 창이 있는 경우에만 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"'