我的键盘不具备编程能力,但是 68 键的 esc~ 是同一个,用起来还要按 FN 键,挺麻烦的。

所以我必须找一个能修改按键映射的方法,本来我打算修改 xkb增加一个键盘布局的,但是同事分享一个好项目,可以在 Linux 上非常简单的修改按键映射。

这里先贴一个官方的例子,然后我增加了两个映射,把 esc 映射成了 ~,这样我的左上角就是普通的按键了,然后再把 左 ctrl 映射成了 esc,把 caps lock 映射成 左 ctrl,并且更进一步,在 keyd 的帮助下,长按是 ctrl,轻按是 esc,非常的爽。

# NOTE: to use this, rename this file to default.conf and put in /etc/keyd/

# Advanced use of capslock as a triple function key:
#
# - when 'capslock' is tapped (pressed + released), it behaves as ESC key
#
# - when 'capslock' is held, and used in combination with another key, it
# behaves like a 'ctrl' key modifier (just like xcape)
#
# - when 'capslock' is held, and the 'space' key is tapped, we enter a 3rd
# state for "VIM mode" where hjkl keys become arrow keys until capslock
# is released.
#
[ids]
*

[main]

capslock = overload(ctrl_vim, esc)
esc = `
leftcontrol = esc

# ctrl_vim modifier layer; inherits from 'Ctrl' modifier layer

[ctrl_vim:C]

space = swap(vim_mode)

# vim_mode modifier layer; also inherits from 'Ctrl' modifier layer

[vim_mode:C]

h = left
j = down
k = up
l = right
# forward word
w = C-right
# backward word
b = C-left

简单说下配置文件的内容,可以在 [ ] 中定义一个 layer,其中 main 是入口,并且 layer 可以继承自别的 layer,例如 [ctrl_vim:C],意思是 ctrl_vim 这个 layer,继承自 ctrl,这是 keyd 内置的 layer,然后使用下面配置的按键开启映射。

所以配置文件里在 ctrl_vim 情况下,按空格键,就会开启 vim_mode 的 layer,然后在 vim_mode 的layer下,按 h 就等同于左方向键,直到松开 ctrl

[main] 中可以看到有一个奇怪的 overload,这个函数的意思是长按是 ctrl,轻按一次是 esc,相当于给一个按键使用了多个模式。

项目里只给了一些例子,具体用法只能自己多研究了。