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
最初のコマンドが実行され、そうでない場合は2番目のコマンドが実行されます。実行前に一緒に使用する場合shell-command
を含む、FORMATSセクションで指定された規則を使用して拡張しますtarget-pane
。-b
シェルコマンドはバックグラウンドで実行されます。
-F
与えられたshell-command
場合、実行されないが空でなくゼロでもない(形式拡張後)、成功したと見なされます。
(源泉)
表示されるすべてのコマンドcommand
は、シェルを必要としないtmuxコマンドです。提供されない限り、shell-command
シェルが必要です。-F
すべてのテストを実行することはできませんが、-F
あなたの場合は簡単です。これは他のプロセスを生成しません。
tmux if-shell -F '#{window_zoomed_flag}' '' 'resize-pane -Z'
他のプロセスが作成されていないことを確認するには、if-shell -F
次の手順を実行します。
- tmux内部で動作するため、tmuxサーバーが存在します。 2つのウィンドウを事前に作成する必要があります。
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
。
*拡大またはサイズ変更されたウィンドウによってトリガーされるフックを使用しない限り、そのフックは別のプロセスを作成します。テストを妨げないように、フックを一時的に取り外します。