我试图在特定标签上启动应用程序(Spotify)。规则尚未应用,现在我通过在" manage"中的通知中打印课程来检查客户端类。信号。这会导致空通知。
client.connect_signal("manage", function (c, startup)
naughty.notify({title=c.class})
end)
当我重新启动awesome时,它会打印客户端类,那么为什么在最初启动客户端时它不起作用?
使用xprop,它还会打印类:
WM_CLASS(STRING) = "spotify", "Spotify"
答案 0 :(得分:1)
听起来像Spotify中的一个错误(我想想我之前听说过这个错误)。我猜想Spotify不遵循ICCCM,只有在它的窗口可见而不是之前才设置它的WM_CLASS
属性。
我担心除了抱怨Spotify开发者修理他们的东西外,你不能做太多。
你可以通过在manage
信号中启动一个计时器来解决这个问题,该计时器检查窗口是否会在短时间内被发现。或者,您可以执行client.connect_signal("property::class", function(c) if c.class == "Spotify" then print("This is now a spotify window") end end)
之类的操作来对窗口类的更改作出反应(当然,您希望对Spotify的窗口执行比打印它们更有用的操作)。
(根据ICCCM,当一个窗口可见时,不允许更改其类别,但是谁关心标准......)
答案 1 :(得分:0)
我和claws-mail客户端有类似的问题。通过xprop检查它,它显示
WM_CLASS(STRING) = "claws-mail", "Claws-mail"
但是真棒只是没有适用它的规则。诀窍是通过提供一组可供选择的字符,在规则部分中给出了这两个类名称的真棒:
rule = {class = "[Cc]laws%-mail"}
我希望这也适用于你的spotify应用程序。
为了进一步阅读lua中的模式,我建议: https://www.lua.org/pil/20.2.html