使用Hammerspoon将超级键/大写锁定重新锁定到F18时,是否可以将其与修饰符

时间:2016-12-07 19:04:05

标签: hammerspoon

我的问题如下:我使用Karabiner Elements将我的大写锁定重新映射到F18,然后Hammerspoon使用F18作为"超级密钥"执行应用程序特定的快捷方式。

我目前的代码如下:

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

launch = function(bundleID)
  hs.application.launchOrFocusByBundleID(bundleID)
  k.triggered = true
end

-- Single keybinding for app launch
singleapps = {
  {'f', 'com.apple.Finder'},
  {'c', 'com.google.Chrome'},
}

for i, app in ipairs(singleapps) do
  k:bind({}, app[1], function() launch(app[2]); end, nil, function() launch(app[2]); end)

使用超级密钥时,我还将HJKJ映射到箭头键,使vim像导航一样无处不在:

arrowKey = function(arrow, modifiers) 
  local event = require("hs.eventtap").event
  event.newKeyEvent(modifiers, string.lower(arrow), true):post()
  event.newKeyEvent(modifiers, string.lower(arrow), false):post()
end

k:bind({}, 'h', function() arrowKey('LEFT', {}); end, nil, function() arrowKey('LEFT', {}); end)
k:bind({}, 'j', function() arrowKey('DOWN', {}); end, nil, function() arrowKey('DOWN', {}); end)
k:bind({}, 'k', function() arrowKey('UP', {}); end, nil, function() arrowKey('UP', {}); end)
k:bind({}, 'l', function() arrowKey('RIGHT', {}); end, nil, function() arrowKey('RIGHT', {}); end)

所以HYPER-H基本上输出左箭头键。但我的问题是我还希望HYPER-COMMAND-H输出command-left-arrow-key,因为它会将光标移到行的开头。

k:bind({'cmd'}, 'n', function() arrowKey('LEFT', {'cmd'}); end, nil, function() arrowKey('LEFT', {'cmd'}); end)

我看起来像那样。但问题是HYPER-COMMAND-H有效,但是COMMAND-HYPER-H 不能。如果我弄乱了修饰符的顺序(通常无关紧要),它会完全断开,这非常不方便。

我如何才能使订单无关紧要? F18不是一个合适的修改键,所以我遇到了麻烦。

0 个答案:

没有答案