1

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


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

是否可以重新映射撇号?

4

1 回答 1

1

这里的重点是键盘布局(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

于 2017-04-14T10:57:38.293 回答