Home 我用Karabiner:一个按钮,短按长按实现不同功能
Post
Cancel

我用Karabiner:一个按钮,短按长按实现不同功能

Karabiner-Elements

Karabiner-Elements是MacOS平台上的一个可自定义键盘按键的软件,开源免费。可以随心所欲地修改键盘,例如:

  • 映射按键:可以capslock键修改成ctrl(我就是这么做的)
  • 配置长按和短按的功能:长按c映射为cmd+c,就可以一键复制
  • 配置双击按键:快速双击v映射为cmd+v,一键粘贴
  • 其他更多你能想到的修改

为什么我会用Karabiner?因为HHKB

技术宅当然要“调教”自己的生产力工具。不过最主要的原因是最近突然想把几年前买的,一直吃灰的HHKB Pro2键盘用起来。(为什么突然想起来要用呢?大概是想觉得很酷吧!) HHKB键盘的键位和一般键盘不太一样,据说是为经常使用Unix的工程师设计的。为了在Unix下更好用,把ctrl键放在了capslock的位置上,这样使用快捷键就更轻松了!

HHKB键位

HHKB Pro2键位图,可以看到capslock被control取代了

但是Macbook的键盘布局可不是这样的,为了把使用体验统一起来(处女座上身),我就想到了用Karabiner把Macbook的键位做个映射,调整成与HHKB一样。

开始折腾!

将capslock与left ctrl互换

设置很简单,在Karabiner的simple-modifications选项卡里把要映射的按钮设置好就行了。

将capslock与left ctrl按键的位置互换,记得要把设备选为Internal Keyboard,代表配置内置键盘

将capslock与left ctrl按键的位置互换,记得要把设备选为Internal Keyboard,代表对内置键盘配置

设置短按capslock切换输入法

capslock映射到control的位置以后,切换发现中英文输入法非常不方便,于是我们想实现:

  • 短按或单独按capslock时切换输入法
  • 长按capslock时,将capslock视为ctrl

这样simple-modifications的功能就不够了,我们要编写配置文件,使用complex-modifications来实现。

首先,我们编写以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
  "title": "My Modifications",
  "rules": [
        {
      "description": "Change left ctrl to ctrl + spacebar.",
      "manipulators": [
        {
          "from": {
            "key_code": "left_control"
          },
          "to": [
            {
              "key_code": "left_control"
            }
          ],
          "to_if_alone": [
            {
              "key_code": "spacebar",
              "modifiers": [
                "left_control"
              ]
            }
          ],
          "type": "basic"
        }
      ]
    }
  ]
}

说一下代码:

  • title是配置组的标题
  • rules列表是配置组的规则
  • description是单条配置的描述
  • manipulators是单条配置中的设置
    • from中的keycode被映射的按键
    • to中的keycode映射到的按键,例如想把a映射到b(按了a等于按了b),那么就在from中写ato中写b,这里写了left control,意思是维持原来的按键不变。
    • to_if_alone设置的是,如果只有from按下的情况,映射到什么按键。这里设置为left control + 空格。意思是如果capslock单独按下,那么就触发MacOS切换输入法的快捷键。(有同学可能会问,为什么不映射到caps_lock,我试过,但是在有些应用中切换输入法会不灵敏,经常双击,改成left control + 空格以后就不会出现这个问题,具体原因还不知道。)

然后,将写好的代码保存到 ~/.config/karabiner/assets/complex_modifications/my_modification。并在karabiner的complex_modifications中启用这个配置。

选择配置界面,点击Enable可以启用

现在,你就可以愉快的把capslock当成ctrl使用,还可以短按切换输入法。

把Tab设置为超级键(Hyper Key)

用了一段时间之后,发现Tab的位置也非常好,但是平时又一般使用不到。于是本着不折腾要剁手的态度,想把它做成超级键。

什么是“超级键(Hyper Key)”?

超级键就是几个修饰键的组合(command+ctrl+alt+shift),按了超级键就相当于同时按下了这四个超级键。

设置超级键有很多好处,其中之一就是我们可以利用它来打造属于自己的快捷键系统,而不会与已有的系统快捷键冲突。

配合HammerSpoon设置快捷键,快速打开各种应用。如果你想使用HammerSpoon,你可以参考这篇文章。也许以后我会聊聊我的独家设置呢。

设置超级键

这里我会把tab映射到ctrl+alt+shift,这样就可以把cmd腾出来做cmd+tab的组合键。

配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
    "title": "My Modification 2",
    "rules": [
        {
            "description": "Change hold tab to shift + control + option.",
            "manipulators": [
                {
                    "from": {
                        "key_code": "tab"
                    },
                    "to": [
                        {
                            "key_code": "left_option",
                            "modifiers": [
                                "left_shift",
                                "left_control"
                            ]
                        }
                    ],
                    "to_if_alone": [
                        {
                            "key_code": "tab"
                        }
                    ],
                    "type": "basic"
                }
            ]
        }
    ]
}

按照之前的方式,把配置文件启用就可以了。长按tab将会激活超级键,短按则还是制表符。

注意,MacOS中cmd+tab默认为切换应用。在这个配置下,如果先按了cmd再按tab,会切换应用,而不会触发超级键。如果想要得到cmd+tab = cmd+ctrl+alt+shift的效果,要先按tab再按cmd

后记

这就是我自己的配置,分享给大家,希望有用。这次我们在配置文件里只用到了to_if_alone设置,下次有机会我们聊一聊Karabiner中其他几个设置。

This post is licensed under CC BY 4.0 by the author.

让 Jekyll 支持 LaTex 数学公式(MathJax v3)

-