使用 hammerspoon 将撇号重新映射到其他键

remap apostrophe to other keys using hammerspoon

问题是由库的错误引起的,已修复。


我正在使用 hammerspoon,我正在尝试将 Ctrl + ' 重新映射为反引号 (`),但我做不到。

设置文件init.lua如下:

local function keyCode(key, modifiers)
   modifiers = modifiers or {}
   return function()
      hs.eventtap.event.newKeyEvent(modifiers, string.lower(key), true):post()
      hs.timer.usleep(100)
      hs.eventtap.event.newKeyEvent(modifiers, string.lower(key), false):post()
   end
end

local function remapKey(modifiers, key, keyCode)
   hs.hotkey.bind(modifiers, key, keyCode, nil, keyCode)
end

remapKey({'ctrl'}, 'h', keyCode('delete')) // works
remapKey({'ctrl'}, "'", keyCode("`")) // does not work

错误信息是:

Invalid key: ' - this may mean that the key requested does not exist in your keymap (particularly if you switch keyboard layouts frequently)

看来问题是 hs.keycodes.map 不包括撇号(但包括双引号和反引号)。

是否可以重新映射撇号?

这里的重点是键盘布局(Hammerspoon 认为您的键盘在其中)。

你的键盘上真的有撇号 (`) 键吗? 我的意思是,如果您需要键入 shift+@ 之类的内容来输入撇号,那么您必须告诉 newKeyEvent

remapKey({'ctrl'}, "'", keyCode("@", {"shift"})) 

或者,如果您不想为如何使用键盘键入字符串而烦恼,则可以简单地在 keyCode() 函数中使用 hs.eventtap.keyStroke():

local function keyCode(key, modifiers)
   modifiers = modifiers or {}
   return function()
      hs.eventtap.keyStroke(modifiers, key)
   end
end

至于hs.keycodes.map有双引号而不是单引号,原来是Hammerspoon的bug,所以我刚刚提交了PR