窗口管理:在启动它的终端窗格顶部绘制新的 GUI 窗口

窗口管理:在启动它的终端窗格顶部绘制新的 GUI 窗口

仅供参考,我使用 i3 窗口管理器。

我更喜欢基于终端的应用程序的主要原因之一是它们使用与我启动它们的 shell 相同的窗口窗格。我退出程序,然后立即回到我的 shell,我的环境、工作目录和所有 shell 优点仍然存在。

另一方面,当我从 shell 打开 GUI 程序时,它会生成一个新的窗格,我通常只需使用父 shell 进行选项卡操作即可。有时我可能想要这种行为,但通常不需要,因为它只是循环显示一个窗格。Dmenu 是解决此问题的一种解决方案,但随后我会失去环境、工作目录和 shell 优点。

如果我能以某种方式告诉我的 GUI 应用程序将其窗口绘制在我的终端窗口之上,我甚至不需要 dmenu 之类的东西。当我们有 shell 时,dmenu 似乎相当多余……

有什么建议吗?也许有人对 i3 进行过破解?我愿意编辑源代码。

答案1

在发现 i3 暂存器、xdotool 和 wait 命令后,我想出了这个有点黑客的脚本:

#!/usr/bin/env bash 

"$*" &                                                                                                                                                                                                             
 child="$!"                                                                                                                                                                                                         
 xdotool set_window --name "$!" `xdotool getactivewindow`                                                                                                                                                           
 i3-msg move scratchpad                                                                                                                                                                                           
 wait $child                                                                                                                                                                                                        
 i3-msg [title="$child"] scratchpad show                                                                                                                                                                            
 i3-msg floating toggle

usage: launch-hide <my-gui-program>

因此,我将父 shell 窗口命名为 gui 子进程的 pid,将其发送到暂存器,然后,当我退出子进程时,launch-hide 被唤醒,然后它使用相应的子进程 pid 从暂存器中抓取窗口。

添加自动完成功能:

complete -F _command launch-hide

相关内容