本质上,我正在寻找一种方法来保持一个终端打开运行 tmux,并在会话内打开新窗口,而不是生成新终端。
在按下按键序列时,如果没有打开一个新终端,我想打开一个新终端。但如果已经打开了一个,我想在必要时切换到其桌面并聚焦窗口,然后发送命令。
我找到了 Windows 操作的文档If
,我希望全局操作也有类似的构造,但我没有看到它。
编辑:解决方案
我最终使用了简化版本jw013 的脚本。
原始脚本是为 quake 终端效果编写的,但我想要的更简单:不切换终端,而只是始终在单个 tmux 终端会话中打开一个窗口。我缺少的关键组件是wmctrl
我没有听说过的。
使用 jw013 的脚本作为基础,我简化为:
# the variable name for the window (used in openbox rc.xml for the rule as well)
wmclass=tmux_terminal
# if we successfully focus the window then open a new tmux window inside
if wmctrl -a $wmclass -x; then
tmux new-window
# otherwise the window hasn't been opened. open it and attach to tmux.
else
urxvt -name $wmclass -e tmux attach &
fi
然后我将其绑定到W-space
openbox 中,并设置一个应用程序以name=tmux_terminal
在第一个桌面上最大化打开。现在,如果终端未打开,W-space
将打开它并附加到 tmux,否则,它将简单地切换到现有的 tmux 会话窗口并在其中打开一个新窗口。
答案1
我认为 openbox 不能完全做到这一点,至少现在还不能,但是可以用热键显示/隐藏的类似 quake 的下拉式终端是可以接受的替代品吗? Tilda、Yakuake、Guake 等是专门为具有类似地震功能而设计的终端仿真器。另外(无耻插件),还有这个小脚本我为个人用途而编写的代码,它执行类似的操作xterm
- 我已Alt-`映射以运行它,并且我总是在该终端中执行的第一件事是运行screen
(类似于tmux
)。