使用AutoHotKey来自定义org mode使用的键盘
源起
在Emacs的各种使用说明中都提到了将手相对地固定在键盘区域可以提高输入的效率,的确在使用时,觉得如果把手离开键盘中中心区域,然后去敲击方向键、删除键或退格键,然后再回来,的确是有一定的影响。如果能够相对地固定,好像是可以好一些。
最初的方案是使用Emacs的自定义键绑定来修改,比如用 C-e
作为 End
,这个其实是不用修改的,默认就是这样,需要做的就是将其它几个键来组合就可以了,在使用中,觉得不错,特别是在输入括号后,后半个括号会自动补全,此时输入完括号的内容后需要将方向键向后移动一格,如果将 C-l
设为向右,则可以基本不移动手了。但是在熟悉了这个操作后,会发现在Emacs之外会变得很不适应,后来就想到了全局修改,网上查了查,全局修改的方法似乎就是使用AutoHotKey了。
需求及解决方案
辅助键的选择
替换的主要方案是使用一个辅助键加上“i、k、j、l”来替换”上、下、左、右”。但是选择什么键呢?最早的时候想到的一定是 Ctrl
但是随着越来越多的键的使用,发现如果使用 Ctrl
的话,会和Emacs中原来的键有着更大可能的冲突。然后将键换成了 Alt
。但在使用了一段时间后,发觉 Alt
也有缺陷,主要是在Windows的各种软件中, Alt
按下后,窗口菜单栏的热键模式会启动,在Word中按一下就知道了。然后又回到了 Ctrl
,此时的想法是将替换的键的数量尽量地减少,以减少冲突,后来发生了两件事,使得这个想法也难以实现。一是 C-c C-l
这个编辑链接的键,二是 C-u
这个键,这把把定义成了 Home=。 使用 =Ctrl
的方法似乎不行了。
此时我突然想到 Ctrl
键有两个,是不是可以将右侧的那个不常用的,主要用来键位的替换,左侧的还是用于原来的 Ctrl
键的作用,然后就是看AutoHotKey文档的事了,结果是可行的。
CapsLock和右Ctrl的替换
将CapsLock和Ctrl替换似乎已经是共识了,在使用Autohotkey替换之前,我就使用了KeyTweak这个软件进行了替换,这个软件其实是使用了修改注册表的方式,也是替换指定键比较方便的方法,曾经尝试过不用,但是没有在AutohotKey中发现下面的代码不可行,所以还是用KeyTweak做了最初的替换。而且如果是使用AutoHotKey这种相对“软”的替换方法后,Thinkpad仍然会在屏幕上显示我按下了CapsLock,很是烦人。
CapsLock::RCtrl
Capslock & j::Send,{Left}
替换的思路
原来的键 | 设想替换成 | |
---|---|---|
上 | 右Ctrl+i | |
下 | 右Ctrl+k | |
左 | 右Ctrl+j | |
右 | 右Ctrl+l | |
Home | 右Ctrl+u | 位置处于上键的两侧 |
End | 右Ctrl+o | |
PageUp | 右Ctrl+n | |
PageDn | 右Ctrl+m | |
Backspace | 右Ctrl+; | 因为较常用,所以排得近 |
Delete | 右Ctrl+’ | |
Alt+左 | Alt+j | |
Alt+右 | Alt+l |
最终的替换
RCtrl & j::Send,{Left}
RCtrl & l::Send,{right}
RCtrl & i::Send,{up}
RCtrl & k::Send,{down}
RCtrl & u::Send,{Home}
RCtrl & o::Send,{End}
RCtrl & n::Send,{PgUp}
RCtrl & m::Send,{PgDn}
^;::send,{BS}
^'::send,{Delete}
!j::send,!{Left}
!l::send,!{Right}