私の問題は次のとおりです。Karabiner Elements を使用して Caps Lock を 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)
また、ハイパー キーを使用して vim のようなナビゲーションをどこにでも配置するときに、HJKJ を矢印キーにマップしています。
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 は適切な修飾キーではないので、本当に困っています。