键盘快捷键映射方式总结
因为经常在电脑上打字,以及之前使用笔记本的历史原因,我喜欢使用 fn+left = home
, fn+right = end
, fn
挨着左边的 ctrl
键。这两个快捷键在编辑文字时非常方便跳转。ctrl+方向键逐个单词跳转,fn+方向键直接跳转到行首和行尾。
后来换成了标准配列的键盘,原来 fn 的位置为 win 键,为了舒适地码字,我研究了快捷键映射的方法。需要注意的是,排除了比较顶层的快捷键映射方案(例如使用 python 包 xkeysnail 等,响应速度无法满足编辑文字时快速打字的场景,并且由于不是从底层进行映射,会有奇怪的 bug)。
解决方法
Windows 用 Power Toy 进行这样的设定。
Linux 使用 keyd 进行配置,参考下一部分,把 meta+left=home
, meta+right=end
。(ps: Linux 下我找了很多快捷键映射的软件,最后只有这个速度快、支持"快捷键映射"而不是"键映射"、并且我还搞明白怎么用了 QAQ)
软件地址:https://github.com/rvaiya/keyd
Speed (a hand tuned input loop written in C that takes <<1ms)
Simplicity (a config format that is intuitive)
Consistency (modifiers that play nicely with layers by default)
Modularity (a UNIXy core extensible through the use of an IPC mechanism)
补充 keyd 的安装和使用
这个软件感觉比较冷门……只有官网的英文教程。不过这里需求比较简单,配置文件没有很复杂,大致过程如下:
安装
$ git clone https://github.com/rvaiya/keyd
正克隆到 'keyd'...
remote: Enumerating objects: 3121, done.
remote: Counting objects: 100% (1166/1166), done.
remote: Compressing objects: 100% (405/405), done.
remote: Total 3121 (delta 808), reused 1063 (delta 760), pack-reused 1955
接收对象中: 100% (3121/3121), 2.38 MiB | 3.70 MiB/s, 完成.
处理 delta 中: 100% (2081/2081), 完成.
$ cd keyd
$ make && sudo make install
mkdir bin
cp scripts/keyd-application-mapper bin/
cc -DVERSION=\"v2.4.2\ \(41bccee\)\" -I/usr/local/include -L/usr/local/lib -Wall -Wextra -Wno-unused -std=c11 -DSOCKET_PATH=\"/var/run/keyd.socket\" -DCONFIG_DIR=\"/etc/keyd\" -DDATA_DIR=\"/usr/share/keyd\" -D_FORTIFY_SOURCE=2 -D_DEFAULT_SOURCE -Werror=format-security -O3 src/*.c src/vkbd/uinput.c -lpthread -o bin/keyd
[sudo] thor 的密码:
mkdir -p /etc/keyd
mkdir -p /usr/bin/
mkdir -p /usr/share/keyd/
mkdir -p /usr/share/keyd/layouts/
mkdir -p /usr/share/man/man1/
mkdir -p /usr/share/doc/keyd/
mkdir -p /usr/share/doc/keyd/examples/
groupadd keyd
install -m755 bin/* /usr/bin/
install -m644 docs/*.md /usr/share/doc/keyd/
install -m644 examples/* /usr/share/doc/keyd/examples/
install -m644 layouts/* /usr/share/keyd/layouts
install -m644 data/*.1.gz /usr/share/man/man1/
install -m644 data/keyd.compose /usr/share/keyd/
$ sudo systemctl enable keyd && sudo systemctl start keyd
Created symlink /etc/systemd/system/sysinit.target.wants/keyd.service → /lib/systemd/system/keyd.service.
配置
$ cd /etc/keyd
$ sudo touch default.conf
$ sudo gedit default.config # 编辑配置文件并保存
$ sudo keyd reload
配置文件如下(meta 代表了 win 键 / Super 键)
[ids]
*
[meta]
left = home
right = end