2017-04-13 42 views
-1

該問題是由庫的錯誤引起的,並且已被修復。使用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不包括引號(但它包含雙引號和反引號)。

是否有可能重新映射撇號?

回答

0

這裏的要點是鍵盤佈局(即Hammerspoon認爲你的鍵盤在)。

實際上你的鍵盤上有一個撇號(`)嗎? 我的意思是,如果您需要鍵入類似於移位 + @來輸入撇號,那麼您必須這樣輸入newKeyEvent

local function keyCode(key, modifiers) 
    modifiers = modifiers or {} 
    return function() 
     hs.eventtap.keyStroke(modifiers, key) 
    end 
end 
:如果你不想打擾如何使用鍵盤輸入一個字符串

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

或者,你可以簡單地在鍵代碼使用hs.eventtap.keyStroke()()函數

至於hs.keycodes.map有雙引號而不是單引號,原來是Hammerspoon的一個bug,所以我剛剛提交了一個PR

+0

謝謝你的回答。 我的鍵盤佈局是美國的,我沒有改變它,所以我應該可以使用單引號和反引號。 也感謝您發現有與此相關的錯誤。我正在等待修復被釋放。 – tsugitta

+0

現在就試試'39'(或'0x27')而不是'「'」',你不必等待新版本。 –

+0

工作!非常感謝你:) – tsugitta