현재 창의 크기가 %if를 사용하여 조정되지 않은 경우 tmux 명령을 실행하세요.

현재 창의 크기가 %if를 사용하여 조정되지 않은 경우 tmux 명령을 실행하세요.

tmux 매뉴얼 페이지에 따르면 %if조건부로 명령을 실행하는 데 사용할 수 있습니다. 따라서 현재 창의 크기가 아직 조정되지 않은 경우 이를 사용하여 현재 창의 크기를 조정하려고 합니다(그렇지 않으면 크기가 조정됩니다).

몇 가지 변형을 시도했습니다.

%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다음을 수행합니다.

  1. tmux 내부에서 작동하므로 tmux 서버가 존재합니다. 두 개의 창을 미리 만들어야 합니다.
  2. tmux 서버의 PID를 저장합니다.

    pid="$(pgrep 'tmux: server')"
    
  3. 다음과 같은 경우에 변수가 비어 있지 않은지 확인하세요.

    echo "$pid"
    
  4. strace서버가 새 프로세스를 생성하는지 여부를 결정 하는 데 사용됩니다 (참조:이 답변):

    strace -e fork,vfork,clone,execve -fb execve -p "$pid"
    
  5. 다른 창을 선택하고 다음을 호출합니다.

    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'
    
  6. strace인쇄된 내용을 관찰하세요 . 출력이 없어야 합니다. *이는 추가 프로세스가 생성되지 않음을 의미합니다.

  7. -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.


* 확대되거나 크기가 조정된 창에 의해 트리거되는 후크를 사용하지 않는 한 해당 후크는 다른 프로세스를 생성합니다. 시험을 방해하지 않도록 후크를 임시로 제거하십시오.

관련 정보