更改标签时如何将焦点设置在鼠标光标下的客户端上?
How to set focus on a client under mouse cursor when a tag is changed?
当我切换到另一个标签时,会选择一个新的客户端,但有时我的鼠标光标不会悬停在该客户端上。为了让我的鼠标指针下的客户端聚焦,我必须点击它的某个地方,或者用 Mod4+j / k 切换到它,或在该客户端上前后移动鼠标光标。
我想要 awesome 将焦点放在每当更改标签时鼠标光标下的客户端。我该怎么做?
我找到了一个函数 mouse.object_under_pointer() that finds the client I need, but I don't know when to call that function. Should I connect a handler to some particular signal? I tried connecting to various signals from Signals page on the wiki 并用 naughty.notify()
检查了它是否是正确的信号,但是当我在标签之间切换时触发了其中的 none 个。
这段代码成功了,但是应该有比设置一个巨大的 200 毫秒计时器更好的方法(对于我来说,较小的超时没有正确地关注一些客户,但你可以尝试设置一个较小的).
tag.connect_signal(
"property::selected",
function (t)
local selected = tostring(t.selected) == "false"
if selected then
local focus_timer = timer({ timeout = 0.2 })
focus_timer:connect_signal("timeout", function()
local c = awful.mouse.client_under_pointer()
if not (c == nil) then
client.focus = c
c:raise()
end
focus_timer:stop()
end)
focus_timer:start()
end
end
)
tag
是 this global object,因此您应该将此代码放在 rc.lua
.
中的任意位置
我知道这已经很老了,但它帮助我想出了这个
function focus_client_under_mouse()
gears.timer( { timeout = 0.1,
autostart = true,
single_shot = true,
callback = function()
local n = mouse.object_under_pointer()
if n ~= nil and n ~= client.focus then
client.focus = n end
end
} )
end
screen.connect_signal( "tag::history::update", focus_client_under_mouse )
应该做两件事:
首先,您应该从配置中删除 require("awful.autofocus")
,这样当您切换标签时,该模块就不会再尝试通过焦点历史来关注某些客户端。
那么,这段代码对我有用:
do
local pending = false
local glib = require("lgi").GLib
tag.connect_signal("property::selected", function()
if not pending then
pending = true
glib.idle_add(glib.PRIORITY_DEFAULT_IDLE, function()
pending = false
local c = mouse.current_client
if c then
client.focus = c
end
return false
end)
end
end)
end
这直接使用 GLib 在没有其他事件挂起时获得回调。这应该意味着 "everything else" 已被处理。
当我切换到另一个标签时,会选择一个新的客户端,但有时我的鼠标光标不会悬停在该客户端上。为了让我的鼠标指针下的客户端聚焦,我必须点击它的某个地方,或者用 Mod4+j / k 切换到它,或在该客户端上前后移动鼠标光标。
我想要 awesome 将焦点放在每当更改标签时鼠标光标下的客户端。我该怎么做?
我找到了一个函数 mouse.object_under_pointer() that finds the client I need, but I don't know when to call that function. Should I connect a handler to some particular signal? I tried connecting to various signals from Signals page on the wiki 并用 naughty.notify()
检查了它是否是正确的信号,但是当我在标签之间切换时触发了其中的 none 个。
这段代码成功了,但是应该有比设置一个巨大的 200 毫秒计时器更好的方法(对于我来说,较小的超时没有正确地关注一些客户,但你可以尝试设置一个较小的).
tag.connect_signal(
"property::selected",
function (t)
local selected = tostring(t.selected) == "false"
if selected then
local focus_timer = timer({ timeout = 0.2 })
focus_timer:connect_signal("timeout", function()
local c = awful.mouse.client_under_pointer()
if not (c == nil) then
client.focus = c
c:raise()
end
focus_timer:stop()
end)
focus_timer:start()
end
end
)
tag
是 this global object,因此您应该将此代码放在 rc.lua
.
我知道这已经很老了,但它帮助我想出了这个
function focus_client_under_mouse()
gears.timer( { timeout = 0.1,
autostart = true,
single_shot = true,
callback = function()
local n = mouse.object_under_pointer()
if n ~= nil and n ~= client.focus then
client.focus = n end
end
} )
end
screen.connect_signal( "tag::history::update", focus_client_under_mouse )
应该做两件事:
首先,您应该从配置中删除 require("awful.autofocus")
,这样当您切换标签时,该模块就不会再尝试通过焦点历史来关注某些客户端。
那么,这段代码对我有用:
do
local pending = false
local glib = require("lgi").GLib
tag.connect_signal("property::selected", function()
if not pending then
pending = true
glib.idle_add(glib.PRIORITY_DEFAULT_IDLE, function()
pending = false
local c = mouse.current_client
if c then
client.focus = c
end
return false
end)
end
end)
end
这直接使用 GLib 在没有其他事件挂起时获得回调。这应该意味着 "everything else" 已被处理。