目前,我的终端 ( 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