karabinder很强大,但是我用的时候有个问题。开启以后时不时就触发重复击键,比如我输入mac
,会变成maaaaaaac
。实际上,简单的改键mac自带工具就可以做到:
https://developer.apple.com/library/archive/technotes/tn2450/_index.html
这是我写的脚本,把caps和ctrl,右command和右option互换:
#!python
# https://developer.apple.com/library/archive/technotes/tn2450/_index.html
# https://apple.stackexchange.com/questions/283252/how-do-i-remap-a-key-in-macos-sierra-e-g-right-alt-to-right-control
import sys
import os
def convert(val):
int_ref = 0x700000000
return hex(int_ref | val)
key_map = {'left-control': 0xE0,
'capslock': 0x39,
'right-command': 0xE7,
'right-option': 0xE6}
def mapkey(key):
return str(convert(key_map[key]))
def fromto(f, to):
return '{"HIDKeyboardModifierMappingSrc": %s, "HIDKeyboardModifierMappingDst": %s}' % (mapkey(f), mapkey(to))
forth_map = '{"UserKeyMapping": [%s, %s]}' % (fromto("capslock", "left-control"), fromto("right-command", "right-option"))
def forth():
os.system("hidutil property --set '%s'" % forth_map)
def back():
os.system("hidutil property --set '{\"UserKeyMapping\": null}'")
if __name__ == '__main__':
if sys.argv[1] == 'forth':
forth()
elif sys.arg[1] == 'back':
back()
不用json是因为hidutil
要求的hex不带引号,不知道他们用的什么版本的json……