Alt_L按键释放功能没有启动
Alt_L key release function does not start
我正在尝试实现 ALT + TAB 行为。
我想知道用户何时按住 ALT 键。
为什么这个释放功能不起作用?
awful.key(
{},
'Alt_L',
function()
altHold = true
end,
function()
altHold = false
end
),
不切实际的解决方案:
awful.key(
{},
'Alt_L',
function()
altHold = true
end
),
awful.key(
{'Mod1'},
'Alt_L',
nil,
function()
altHold = false
end
)
这有效,但任何其他带 ALT 的热键都不再有效。
其他解决方案:
keygrabber.run(
function (mod, key, event)
-- Stop alt-tabbing when the alt-key is released
if gears.table.hasitem(mod, "Mod1") then
if (key == "Alt_L" or key == "Escape") and event == "release" then
if _M.preview_wbox.visible then
_M.preview_wbox.visible = false
else
_M.previewDelayTimer:stop()
end
if key == "Escape" then
-- Cancel client selection
for i = 1, #_M.altTabTable do
_M.altTabTable[i].client.opacity = _M.altTabTable[i].opacity
_M.altTabTable[i].client.minimized = _M.altTabTable[i].minimized
end
else
-- Raise clients in order to restore history
local c
for i = 1, _M.altTabIndex - 1 do
c = _M.altTabTable[_M.altTabIndex - i].client
if not _M.altTabTable[i].minimized then
c:raise()
client.focus = c
end
end
-- raise chosen client on top of all
c = _M.altTabTable[_M.altTabIndex].client
c:raise()
client.focus = c
-- restore minimized clients
for i = 1, #_M.altTabTable do
if i ~= _M.altTabIndex and _M.altTabTable[i].minimized then
_M.altTabTable[i].client.minimized = true
end
_M.altTabTable[i].client.opacity = _M.altTabTable[i].opacity
end
end
keygrabber.stop()
-- Pressed tab
elseif key == "Tab" and event == "press" then
if gears.table.hasitem(mod, "Shift") then
-- Move to previous client on Shift-Tab
cyclePreview(-1)
else
-- Move to next client on each Tab-press
cyclePreview( 1)
end
end
end
end
)
这是 Troglobit 的略微修改版本:
https://github.com/troglobit/awesome-switcher/blob/master/init.lua#L470-L525\
当按下 ALT + TAB 键时调用。
在按住 ALT 的同时,下一个 TAB 键将调用 previewCycle()
函数。
如果释放 ALT,它会选择选定的客户端。
ESCAPE 取消选择。
随机猜测:当按键被释放时,“alt”修饰符被激活,所以你需要一个以Mod1
作为修饰符的键绑定(是Alt
Mod1
?我'我不完全确定)。但是当然,那个键绑定不会对按键做出反应,所以你需要两个。
我正在尝试实现 ALT + TAB 行为。
我想知道用户何时按住 ALT 键。
为什么这个释放功能不起作用?
awful.key(
{},
'Alt_L',
function()
altHold = true
end,
function()
altHold = false
end
),
不切实际的解决方案:
awful.key(
{},
'Alt_L',
function()
altHold = true
end
),
awful.key(
{'Mod1'},
'Alt_L',
nil,
function()
altHold = false
end
)
这有效,但任何其他带 ALT 的热键都不再有效。
其他解决方案:
keygrabber.run(
function (mod, key, event)
-- Stop alt-tabbing when the alt-key is released
if gears.table.hasitem(mod, "Mod1") then
if (key == "Alt_L" or key == "Escape") and event == "release" then
if _M.preview_wbox.visible then
_M.preview_wbox.visible = false
else
_M.previewDelayTimer:stop()
end
if key == "Escape" then
-- Cancel client selection
for i = 1, #_M.altTabTable do
_M.altTabTable[i].client.opacity = _M.altTabTable[i].opacity
_M.altTabTable[i].client.minimized = _M.altTabTable[i].minimized
end
else
-- Raise clients in order to restore history
local c
for i = 1, _M.altTabIndex - 1 do
c = _M.altTabTable[_M.altTabIndex - i].client
if not _M.altTabTable[i].minimized then
c:raise()
client.focus = c
end
end
-- raise chosen client on top of all
c = _M.altTabTable[_M.altTabIndex].client
c:raise()
client.focus = c
-- restore minimized clients
for i = 1, #_M.altTabTable do
if i ~= _M.altTabIndex and _M.altTabTable[i].minimized then
_M.altTabTable[i].client.minimized = true
end
_M.altTabTable[i].client.opacity = _M.altTabTable[i].opacity
end
end
keygrabber.stop()
-- Pressed tab
elseif key == "Tab" and event == "press" then
if gears.table.hasitem(mod, "Shift") then
-- Move to previous client on Shift-Tab
cyclePreview(-1)
else
-- Move to next client on each Tab-press
cyclePreview( 1)
end
end
end
end
)
这是 Troglobit 的略微修改版本:
https://github.com/troglobit/awesome-switcher/blob/master/init.lua#L470-L525\
当按下 ALT + TAB 键时调用。
在按住 ALT 的同时,下一个 TAB 键将调用 previewCycle()
函数。
如果释放 ALT,它会选择选定的客户端。
ESCAPE 取消选择。
随机猜测:当按键被释放时,“alt”修饰符被激活,所以你需要一个以Mod1
作为修饰符的键绑定(是Alt
Mod1
?我'我不完全确定)。但是当然,那个键绑定不会对按键做出反应,所以你需要两个。