Mac上不用karabinder改键

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……

2 个赞

我觉得是乃的 karabinder 配置出问题,而不是 barabinder 本身有问题

有可能,不过我只加了很少的映射。我觉得有可能是我的key repeat delay设得太低,repeat rate设得太高了。

嗯,可能吧,我也用了 karabinder 好几年了(

有道理,我再看看