应用程序焦点切换到另一个后,Command + DELETE不再使用Hammerspoon

时间:2017-06-18 20:23:12

标签: lua hammerspoon

我现在在Hammerspoon上写自己的init.lua,并希望将我的一些kew重新映射给其他人。具体来说,我想在我的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()

我在这里想念的是什么......?

1 个答案:

答案 0 :(得分:0)

您必须添加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)

至少现在这对我有用了。