%if
tmux 매뉴얼 페이지에 따르면 조건부로 명령을 실행하는 데 사용할 수 있습니다 . 따라서 아직 확대/축소되지 않은 경우 현재 창을 확대/축소하는 데 사용하려고 합니다(그렇지 않으면 확대/축소 취소됨).
나는 몇 가지 변형을 시도했습니다.
%if '#{window_zoomed_flag}' resize-pane -Z %endif
성공없이. 어떤 아이디어가 있나요?
를 사용하여 수행하려는 작업을 달성하기 위한 몇 가지 예가 있는 것 같지만 if-shell
'네이티브' tmux 명령을 통해서만 수행하고 싶습니다. '네이티브'란 다른 프로세스를 생성하지 않는다는 의미입니다.
답변1
를 사용하여 수행하려는 작업을 달성하기 위한 몇 가지 예가 있는 것 같지만
if-shell
'네이티브' tmux 명령을 통해서만 수행하고 싶습니다. '네이티브'란 다른 프로세스를 생성하지 않는다는 의미입니다.
if-shell
쉘을 생성할 수도 있고 생성하지 않을 수도 있습니다. 설명을 참조하세요:
if-shell [-bF] [-t target-pane] shell-command command [command]
(별칭:
if
)
command
성공 하면 첫 번째 명령을shell-command
실행하고 그렇지 않으면 두 번째 명령을 실행합니다. 실행되기 전에 는shell-command
와 관련된 규칙을 포함하여 FORMATS 섹션에 지정된 규칙을 사용하여 확장됩니다target-pane
. 을 사용하면-b
쉘 명령이 백그라운드에서 실행됩니다.
-F
주어지면 실행shell-command
되지 않지만 비어 있지도 않고 0도 아닌 경우(형식이 확장된 후) 성공으로 간주됩니다.
(원천)
표시된 모든 명령 command
은 tmux 명령이므로 쉘이 필요하지 않습니다. 주어지지 shell-command
않는 한 껍질이 필요합니다 . -F
모든 테스트를 수행할 수 있는 것은 아니지만 -F
귀하의 경우에는 쉽습니다. 이는 다른 프로세스를 생성하지 않습니다.
tmux if-shell -F '#{window_zoomed_flag}' '' 'resize-pane -Z'
추가 프로세스가 생성되지 않는지 확인하려면 if-shell -F
다음을 수행합니다.
- tmux 내부에서 작업하므로 tmux 서버가 존재합니다. 두 개의 창이 필요합니다. 미리 만들어 보세요.
tmux 서버의 PID를 저장합니다.
pid="$(pgrep 'tmux: server')"
다음과 같은 경우에 변수가 비어 있지 않은지 확인하세요.
echo "$pid"
strace
서버가 새 프로세스를 생성하는지 여부를 알려주는 데 사용됩니다 (참조:이 답변):strace -e fork,vfork,clone,execve -fb execve -p "$pid"
다른 창을 선택하고 다음을 호출합니다.
tmux if-shell -F '#{window_zoomed_flag}' '' 'resize-pane -Z' # now similar command to unzoom tmux if-shell -F '#{window_zoomed_flag}' 'resize-pane -Z'
인쇄된 내용을 관찰하세요
strace
. 출력이 없어야 합니다.* 이는 추가 프로세스가 생성되지 않았음을 의미합니다.비교를 위해 다음은 없는 동일한 명령이며
-F
쉘을 생성합니다.tmux if-shell '[ #{window_zoomed_flag} -eq 1 ]' '' 'resize-pane -Z' # now similar command to unzoom tmux if-shell '[ #{window_zoomed_flag} -eq 1 ]' 'resize-pane -Z'
각 명령은
execve("/bin/sh", …
의 출력에 표시 됩니다strace
.
* 확대/축소되거나 크기가 조정되는 창에 의해 트리거되는 후크를 사용하지 않는 한 후크는 다른 프로세스를 생성합니다. 시험에 방해가 되지 않도록 후크를 임시로 제거하십시오.