Too*_*rot 8 window-manager i3 window-management
我想在浮动窗口中打开一个程序。我试过了
exec emacsclient -c ; floating enable
,但这使得浮动之前处于活动状态的窗口,而不是新窗口。
这是我为我的 Galculator 应用程序所做的:
~/.config/i3/config
for_window [class="Galculator" instance="galculator"] floating enable
Run Code Online (Sandbox Code Playgroud)
要了解 class="..." 和 instance="..." 中的内容,请在终端中键入xprop,然后单击要浮动的窗口。您将在 WM_CLASS(STRING)="instance", "Class" 下的底部某处找到信息。
使当前聚焦窗口在 i3 中浮动的正确方法是运行
i3-msg floating enable
Run Code Online (Sandbox Code Playgroud)
这就是您的配置行所做的。
现在的问题是i3-msg
在窗口聚焦之前运行(如果它甚至抓住焦点)。Peter O.在这里解释了如何根据其 PID 获得焦点窗口。我们可以这样使用它:
i3-msg floating enable
Run Code Online (Sandbox Code Playgroud)
注意事项:
wmctrl
不能总是找出所有窗口的PID;例如,ImageMagick 的列表中display
总是有 PID 0。有关使用窗口标题的修改方法,请参见此处。将上述解决方案的显着部分包装在脚本中,应该可以编写类似
exec our_command; grab_focus; floating enable
Run Code Online (Sandbox Code Playgroud)
在 i3 配置中。
我想总结HubbleT 的帖子以及其他一些肮脏的解决方法添加的信息:
TLDR:附加&& i3-msg "[id=$(xdotool getactivewindow)] floating enable"
到您的快捷方式定义(需要xdotool
)。例如bindsym $mod+button exec program && i3-msg "[id=$(xdotool getactivewindow)] floating enable"
您可以为所有符合条件列表的窗口设置规则,这些条件可以在 i3-config 中设置或等效地使用 发送i3-msg
。
语法是for_window [ criteria ] command
. 你可以在这里读更多关于它的内容。如果您希望它仅在单个窗口上工作,您可以确保您的标准的唯一性。
不只是有
班级
比较窗口类(WM_CLASS 的第二部分)。使用特殊值focused来匹配与当前聚焦窗口具有相同窗口类的所有窗口。
实例
比较窗口实例(WM_CLASS 的第一部分)。使用特殊值focused来匹配与当前聚焦窗口具有相同窗口实例的所有窗口。
但还有更多,比如title
or id
:
标题
比较 X11 窗口标题(_NET_WM_NAME 或 WM_NAME 作为后备)。使用特殊值 __focused__ 来匹配与当前聚焦窗口具有相同窗口标题的所有窗口。
ID
比较 X11 窗口 ID,例如您可以通过 xwininfo 获取该 ID。
假设emacsclient
是一个命令行程序,您可以因此添加
for_window [ title="uniquetitle" ] floating enable
Run Code Online (Sandbox Code Playgroud)
到你的 i3 配置并使用打开你最喜欢的终端
termite -e emacsclient -t uniquetitle
Run Code Online (Sandbox Code Playgroud)
直接以浮动模式打开。
如果它不是命令行程序并且没有标题选项,您可以使用其他标准或例如(使用xdotool
和i3-msg
):
bindsym $mod+button exec program && xdotool getactivewindow set_window --name uniquetitle
Run Code Online (Sandbox Code Playgroud)
或不太脏
bindsym $mod+t exec program && i3-msg "[id=$(xdotool getactivewindow)] floating enable"
Run Code Online (Sandbox Code Playgroud)