2017-06-18 13 views
2

Hammerspoonにinit.luaと書いてあります。私のkewsを他の人に再マップしたいと思っています。具体的には、私はmacOS上でバックスラッシュキーとdeleteキーを切り替えたいと思います。HammerspoonでCommand + Deleteがもう機能しなくなったとき

しかし、単純な削除とバックスラッシュは正常に動作しますが、私は自分のアプリのフォーカスを別のものに変更して、そこに何かを入力して元のアプリに戻って、削除キー(実際にはスイッチを入れたときのバックスラッシュキー)より長い作業;代わりに、フォーカスを打ち切る前にアプリ内の文字を削除します(つまり、2番目から最後にフォーカスされたアプリ)。しかし、そこに何かを入力してからもう一度削除しようとすると、突然削除が問題なく再開します。

なぜ突然動作しないのだろうか。しかし、それはバグかもしれません。とにかくここに私の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() 

私はここで何が欠けていますか?

答えて

0

イベントタップを監視するには、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) 

は、少なくとも今、これは私のために働いています。

関連する問題