Command+DELETE在Hammerspoon中切换应用后不再起作用

我正在为Hammerspoon编写自己的init.lua,想要将一些按键重新映射到其他按键上。具体来说,我想要在macOS上将反斜杠键和删除键交换。

然而,尽管简单的删除和反斜杠键能够正常工作,一旦我切换应用并在另一个应用中输入内容后重新回到原来的应用,删除键(实际上是被我交换为反斜杠键)就不再起作用了。相反,它会删除上一个应用程序中焦点失去前的字符(即第二个最近使用的应用程序)。但是,如果我在焦点失去前在其中输入一些内容然后再尝试删除,删除功能突然又变得正常了,没有任何问题。

我想知道为什么突然停止工作;虽然可能是一个错误。无论如何,这里是我的init.lua,用于交换删除和反斜杠键。

local VK_BACKSLASH = 0x2a
local VK_DELETE = 0x33
keyEventtap = hs.eventtap.new({
    hs.eventtap.event.types.keyDown
}, function(event)
    local bundleId = string.lower(hs.application.frontmostApplication():bundleID())
    local keyCode = event:getKeyCode()
    local flags = event:getFlags()

    if keyCode == VK_DELETE then
        if flagsMatches(flags, {'shift'}) then
            event:setKeyCode(VK_BACKSLASH)
            event:setFlags({shift=true})
        else
            event:setKeyCode(VK_BACKSLASH)
        end
    elseif keyCode == VK_BACKSLASH then
       event:setKeyCode(VK_DELETE)
    end
end)

keyEventtap:start()

我在这里缺少什么......?

点赞
用户2360798
用户2360798

你必须添加 keyUpflagsChanged 事件来监视事件粘贴。因此,将以下代码:

keyEventtap = hs.eventtap.new({
    hs.eventtap.event.types.keyDown
}, function(event)

更改为以下代码:

keyEventtap = hs.eventtap.new({
    hs.eventtap.event.types.keyDown,
    hs.eventtap.event.types.flagsChanged,
    hs.eventtap.event.types.keyUp
}, function(event)

至少现在这个代码是对我有用的。

2017-06-20 15:00:04