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

时间:2017-04-13 04:08:37

标签: hammerspoon

问题是由库的bug造成的,而且已经修复了。

我正在使用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不包含撇号(但它包括双引号和反引号)。

是否可以重新映射撇号?

1 个答案:

答案 0 :(得分:0)

这里的重点是键盘布局(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的错误,所以我刚刚提交了PR