我正在尝试配置i3所以它xzoom
总是以浮动模式启动。
问题是 xzoom 的窗口没有 aWM_CLASS
并且它WM_NAME
不是在窗口创建时设置的,而是在一个小的延迟之后设置的。
以下是前几毫秒的属性:
$ xzoom & sleep .01; xprop -id 0x2200001
_NET_WM_DESKTOP(CARDINAL) = 0
WM_STATE(WM_STATE):
window state: Normal
icon window: 0x0
WM_PROTOCOLS(ATOM): protocols WM_DELETE_WINDOW
WM_ICON_NAME(STRING) = "xzoom"
正如您所看到的,唯一区别它的是WM_ICON_NAME
.几毫秒后添加标题:
$ xprop
WM_NAME(STRING) = "xzoom x4"
_NET_WM_DESKTOP(CARDINAL) = 0
WM_STATE(WM_STATE):
window state: Normal
icon window: 0x0
WM_PROTOCOLS(ATOM): protocols WM_DELETE_WINDOW
WM_ICON_NAME(STRING) = "xzoom"
如果我使用 匹配窗口WM_NAME
,屏幕会可怕地闪烁,因为其他窗口在回落到其位置之前会重新排列:
for_window [title="xzoom*"] floating enable
我尝试寻找一个命令准则那会查看WM_ICON_NAME
,但我找不到任何。
有没有其他方法可以以浮动模式启动该程序?
答案1
我可以通过重新编译它来将 WM_CLASS 添加到 xzoom
XChangeProperty(dpy, win, XA_WM_CLASS, XA_STRING, 8,
PropModeReplace,
(unsigned char *)progname, strlen(progname));
XA_WM_ICON_NAME
就在 where设置之后的线上。
然后,for_window [instance="xzoom"] floating enable
在我的 i3 配置中为我工作!
很高兴这个旧软件仍然运行良好:)
答案2
或者,您可以尝试将以下行添加到 i3 配置中,它应该与窗口标题正确匹配:
for_window [title="^xzoom"] border none; floating enable
也就是说,我很高兴看到编译自定义始终是一种选择。