我的Hammerspoon剧本延迟了重复重复

时间:2016-12-06 01:18:28

标签: lua hammerspoon

我的CAPSLOCK绑定到F18(karabiner)作为修改键。我试图模拟CAPSLOCK + h,j,k,l作为VIM移动键。一切正常,但重复时出现延迟问题。也就是说,当我按下CAPSLOCK + h时它会很慢,这应该模拟按下"< - "重复键,但它非常延迟,每秒只发送一个。关于为什么会发生这种情况的任何想法?我的init.lua位于以下位置:

-- A global variable for the Hyper Mode
k = hs.hotkey.modal.new({}, "F17")

-- Enter Hyper Mode when F18 (Hyper/Capslock) is pressed
pressedF18 = function()
  k.triggered = false
  k.modifier = false
  k:enter()

  trigger_modifier = function()
    k.modifier = true
  end

  -- Only trigger as modifier if held longer than thisj
  hs.timer.doAfter(0.35, trigger_modifier)
end

-- Arrow keys
k:bind({}, 'h', function()
  hs.eventtap.keyStroke({}, 'Left')
  k.triggered = true
end)

k:bind({}, 'j', function()
  hs.eventtap.keyStroke({}, 'Down')
  k.triggered = true
end)

k:bind({}, 'k', function()
  hs.eventtap.keyStroke({}, 'Up')
  k.triggered = true
end)

k:bind({}, 'l', function()
  hs.eventtap.keyStroke({}, 'Right')
  k.triggered = true
end)

-- Leave Hyper Mode when F18 (Hyper/Capslock) is pressed,
--   send ESCAPE if no other keys are pressed.
releasedF18 = function()
  k:exit()

  if not k.triggered then
    -- If hotkey held longer than this amount of time
    -- let it remain as modifier and don't send ESCAPE
    if not k.modifier then
      hs.eventtap.keyStroke({}, 'ESCAPE')
    else
      print("Modifier detected")
    end
  end
end

-- Bind the Hyper key
f18 = hs.hotkey.bind({}, 'F18', pressedF18, releasedF18)

1 个答案:

答案 0 :(得分:4)

我有一些类似的缓慢。看起来在一个最新版本中引入了一些缓慢。您可以使用下面的fastKeyStroke功能调用低级功能。我已经包含了我的hjkl实现,因此您可以看到它已被使用。另请注意,我正在hs.hotkey.bind中将5个参数传递到local hyper = {"shift", "cmd", "alt", "ctrl"} local fastKeyStroke = function(modifiers, character) local event = require("hs.eventtap").event event.newKeyEvent(modifiers, string.lower(character), true):post() event.newKeyEvent(modifiers, string.lower(character), false):post() end hs.fnutils.each({ -- Movement { key='h', mod={}, direction='left'}, { key='j', mod={}, direction='down'}, { key='k', mod={}, direction='up'}, { key='l', mod={}, direction='right'}, { key='n', mod={'cmd'}, direction='left'}, -- beginning of line { key='p', mod={'cmd'}, direction='right'}, -- end of line { key='m', mod={'alt'}, direction='left'}, -- back word { key='.', mod={'alt'}, direction='right'}, -- forward word }, function(hotkey) hs.hotkey.bind(hyper, hotkey.key, function() fastKeyStroke(hotkey.mod, hotkey.direction) end, nil, function() fastKeyStroke(hotkey.mod, hotkey.direction) end ) end ) ,以便重复密钥。

{{1}}
关于缓慢的

docs