![如何禁止任何应用程序窃取 Awesome WM 焦点?](https://linux22.com/image/120714/%E5%A6%82%E4%BD%95%E7%A6%81%E6%AD%A2%E4%BB%BB%E4%BD%95%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%AA%83%E5%8F%96%20Awesome%20WM%20%E7%84%A6%E7%82%B9%EF%BC%9F.png)
似乎任何新窗口都会默认获得焦点,这很好。然而,某些应用程序有时会抢走焦点。例如,JetBrains IDEA 在启动过程中会多次执行此操作。是否可以避免这种焦点窃取?
答案1
为了防止程序窃取 Awesome WM 中的焦点,请将此行添加到您的 rc.lua 中:
awful.ewmh.add_activate_filter(function() return false end, "ewmh")
awful.ewmh.add_activate_filter(function() return false end, "rules")
第一行添加一个过滤器,拒绝已打开的程序发出的任何请求以“窃取”焦点(这些请求具有上下文“ewmh”)。
第二行添加一个过滤器,以防止新打开的应用程序窃取焦点(上下文“规则”)。
请参阅的文档add_activate_filter
了解更多信息。
顶部的行相当于以下代码(但更简洁):
function filter_activation(c, context, hints) if context == 'ewmh' or context == 'rules' then return false else return true end end awful.ewmh.add_activate_filter(filter_activation)
答案2
来自API文档:
为什么新客户默认是紧急的?
您可以通过在 rc.lua 中重新定义 bad.ewmh.activate(c) 来更改此设置。如果您不希望默认情况下新客户很紧急,请将其放入您的 rc.lua 中:
client.disconnect_signal("request::activate", awful.ewmh.activate)
function awful.ewmh.activate(c)
if c:isvisible() then
client.focus = c
c:raise()
end
end
client.connect_signal("request::activate", awful.ewmh.activate)