指定されたパスに開いたウィンドウがない場合にのみ、tmuxで新しいウィンドウを開き、それ以外の場合は追加します。

指定されたパスに開いたウィンドウがない場合にのみ、tmuxで新しいウィンドウを開き、それ以外の場合は追加します。

現在、私の端末(alacritty)は起動時に実行され、tmux new -A -s 0新しいセッションを開始する0か、すでに存在する場合はセッションに接続されます。 1つの問題は、ファイルマネージャ(Dolphin)を使用してディレクトリを開くことがあることです。この場合、目的のディレクトリではなく以前のセッションに再接続します。

私が達成したいのは、0そのセッションにそのようなウィンドウがない場合は、目的のパスを作業ディレクトリとして使用してセッションで新しいウィンドウを開くことです。または既存のウィンドウに切り替えたいです。

これができない場合は、毎回新しいウィンドウを作成します。現在アクティブなウィンドウで実行中のプロセスがあるかどうかを検出し、そうでない場合はcdスイッチディレクトリを使用しますか?

誰もがこれを達成する方法についてのアイデアがある場合は感謝します。

答え1

@KamilMaciorowskiが指摘したように、彼らは非常に似た問題を解決しました。ここ。私のニーズに合わせてスクリプトをいくつか修正しました。つまり、「使用中」ウィンドウを無視したいのです。つまり、#{pane_current_command}既知のシェルであることを確認するいくつかのプログラムを実行したいと思います。また、引数を渡さずに現在のディレクトリを開こうとします。なぜならそれが私が得るものだからですalacritty

それ以外の場合は、スクリプトを再作成しました。私が使用したものは次のとおりです。

#!/usr/bin/env bash

target_path="$(pwd -P)"

tmux list-panes -s -F '#{window_id} #{pane_id} #{pane_current_path} #{pane_current_command}' \
| while IFS=' ' read -r window pane path cmd; do
    [[ "$path" = "$target_path" && " fish bash zsh " =~ " $cmd " ]] \
        && tmux select-pane -t "$pane" && tmux select-window -t "$window" && exit 0
done || tmux new-window -c "$target_path"

tmux attach -d

関連情報