我想在浮动窗口中打开一个程序。我尝试过
exec emacsclient -c ; floating enable
,但这使得浮动之前处于活动状态的窗口,而不是新窗口。
答案1
这就是我为我的 Galculator 应用程序所做的:
〜/.config/i3/config
for_window [class="Galculator" instance="galculator"] floating enable
要了解您的 class="..." 和 instance="..." 中的内容,请输入xprop在终端中,然后单击要浮动的窗口。您将在底部 WM_CLASS(STRING)="instance", "Class" 下的某个位置找到该信息。
答案2
使当前聚焦的窗口在 i3 中浮动的正确方法是运行
i3-msg floating enable
这就是您的配置行的作用。
现在的问题是i3-msg
在窗口获得焦点之前运行(如果它甚至获得焦点)。彼得·O. 解释说在这里如何根据窗口的 PID 获得焦点。我们可以这样使用它:
our_application &
pid="$!"
# Wait for the window to open and grab its window ID
winid=''
while : ; do
winid="`wmctrl -lp | awk -vpid=$pid '$3==pid {print $1; exit}'`"
[[ -z "${winid}" ]] || break
done
# Focus the window we found
wmctrl -ia "${winid}"
# Make it float
i3-msg floating enable > /dev/null;
# Move it to the center for good measure
i3-msg move position center > /dev/null;
# Wait for the application to quit
wait "${pid}";
注意:
答案3
我想总结一下哈勃望远镜后与其他一些肮脏的解决方法添加了信息:
总长DR:附加&& 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 的第二部分)。使用特殊值专注的匹配与当前焦点窗口具有相同窗口类的所有窗口。
实例
比较窗口实例(WM_CLASS 的第一部分)。使用特殊值专注的匹配与当前焦点窗口具有相同窗口实例的所有窗口。
但还有更多,比如title
or id
:
标题
比较 X11 窗口标题(_NET_WM_NAME 或 WM_NAME 作为后备)。使用特殊值 __focused__ 来匹配与当前聚焦窗口具有相同窗口标题的所有窗口。
ID
比较 X11 窗口 ID,例如您可以通过 xwininfo 获取该 ID。
假设emacsclient
是一个命令行程序,您可以因此添加
for_window [ title="uniquetitle" ] floating enable
到你的 i3 配置并使用打开你最喜欢的终端
termite -e emacsclient -t uniquetitle
直接以浮动模式打开。
如果它不是命令行程序并且没有标题选项,您可以使用其他标准或例如(使用xdotool
和i3-msg
):
bindsym $mod+button exec program && xdotool getactivewindow set_window --name uniquetitle
或不太脏
bindsym $mod+t exec program && i3-msg "[id=$(xdotool getactivewindow)] floating enable"
答案4
对 termnml 的答案进行一个小调整使其对我有用。完整的工作结果现在如下:
bindsym $mod+Shift+Return exec --no-startup-id urxvt --class floating
for_window [class="floating"] floating enabled