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?我'我不完全确定)。但是当然,那个键绑定不会对按键做出反应,所以你需要两个。