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