Lua 命令+;一旦应用程序焦点切换到另一个,删除不再使用Hammerspoon

Lua 命令+;一旦应用程序焦点切换到另一个,删除不再使用Hammerspoon,lua,hammerspoon,Lua,Hammerspoon,我现在正在Hammerspoon上编写自己的init.lua,并希望将我的一些酒窖重新映射到其他酒窖。具体来说,我想在macOS上切换反斜杠键和删除键 然而,虽然简单的删除和反斜杠可以正常工作,但一旦我将我的应用程序焦点切换到另一个,在那里键入一些内容,然后返回到原始应用程序,删除键(实际上是我切换时的反斜杠键)就会工作得更长;相反,它会在中止焦点之前删除应用程序中的字符(即从第二个到最后一个焦点应用程序)。但是,如果我在那里键入某个内容,然后再次尝试删除它,那么突然之间,删除操作再次正常运行,

我现在正在Hammerspoon上编写自己的
init.lua
,并希望将我的一些酒窖重新映射到其他酒窖。具体来说,我想在macOS上切换反斜杠键和删除键

然而,虽然简单的删除和反斜杠可以正常工作,但一旦我将我的应用程序焦点切换到另一个,在那里键入一些内容,然后返回到原始应用程序,删除键(实际上是我切换时的反斜杠键)就会工作得更长;相反,它会在中止焦点之前删除应用程序中的字符(即从第二个到最后一个焦点应用程序)。但是,如果我在那里键入某个内容,然后再次尝试删除它,那么突然之间,删除操作再次正常运行,没有任何问题

我想知道为什么它突然不起作用;不过,这可能是一个bug。无论如何,这里是我的
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()

我在这里遗漏了什么…?

您必须添加
keyUp
flagsChanged
事件以监视事件点击。因此,不是:

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)
至少现在这对我有用