仅当给定路径中没有打开窗口时才在 tmux 中打开一个新窗口,否则附加到它

仅当给定路径中没有打开窗口时才在 tmux 中打开一个新窗口,否则附加到它

目前,我的终端 ( alacritty) 在开始时运行tmux new -A -s 0以启动新会话0,或者附加到它(如果它已经存在)。一个问题是,我有时使用文件管理器(Dolphin)中的目录打开。在这种情况下,我只是重新连接到旧会话,而不是在所需的目录中。

我想要实现的是,0如果给定会话中不存在这样的窗口,则在会话中打开一个新窗口,并将我所需的路径作为工作目录。否则,我想切换到现有窗口。

如果这是不可能的,我很高兴每次都创建一个新窗口。也许可以检测当前活动窗口中是否有进程正在运行,如果没有,则使用cd切换目录?

如果有人对如何实现这一目标有任何想法,我们将不胜感激。

答案1

正如@KamilMaciorowski 指出的,他们解决了一个非常相似的问题这里。我对脚本进行了一些修改以满足我的需要,即我想忽略“繁忙”窗格,即在其上运行一些程序,为此我检查它是否#{pane_current_command}是已知的 shell。另外,我不传递参数,只是尝试打开当前目录,因为这是我从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

相关内容