我通过按Cx来开发了一个emacs pinky的案例.理想情况下,我想使用空格键而不是控制作为前缀命令,因为用拇指按住更容易.按下和释放空间仍应添加空格,但同时按下Space + x应该可以绑定到命令.例如:
(local-set-key (kbd "SPC-s") 'search-forward)
Run Code Online (Sandbox Code Playgroud)
有没有人对如何实现这一点有任何想法?是否有可能只使用elisp或者我必须修改emacs源并编译我自己的版本?
我更喜欢一种独立于操作系统的解决方案,因为我在Windows和Linux上使用emacs.
编辑:我尝试过key-chord.el,它在某些情况下有所帮助,但并非所有(Cx Cs).我更喜欢一种次要模式,例如hold-space-is-control或holding-space-is-meta
编辑:感谢所有的回复.我目前正在使用键和弦将许多C-*命令映射到j*或f*,具体取决于if是左手还是右手键.例如,我用jb替换Cx b.它适用于您通常键入一次的所有命令,但不适用于重复使用的命令(例如前向或后向段落).它是迄今为止最好的跨平台解决方案,因为它只需要自定义的.emacs和key-chord.el文件.我更喜欢一种解决方案,它需要更少的重新映射,并降低键入"fyi"和获得"<yank> i"的风险.我相信使用空间可以工作,但我不太了解emacs的技术细节,使其工作.
我已经考虑过用Ctrl替换Caps-Lock或Alt,但这只对左小指有帮助.许多常见命令使用右小指(Cx,Cs,Cw,Cy)执行.
我认为这在 Emacs Lisp 中是不可能的。为了做你想做的事,你必须检查“空格”键是否仍然被按下或是否被释放。然而,Emacs 中的键盘事件只是字符,而不是像鼠标按钮那样的“按下”和“释放”事件。我对 Emacs C 代码知之甚少,无法说明这是否可以在不破坏正常事件循环的情况下在那里实现。
因此,让我们转向依赖于操作系统的解决方案。在 Xorg 下,您可以将修饰符映射到普通键(使用 xmodmap);但是,按“空格”仍然会生成一个空格,同时还可以用作修饰符,这不是您想要的。我知道的唯一解决方案是特殊的 Xorg 键盘驱动程序:
https://gitlab.com/at-home-modifier/at-home-modifier-evdev/wikis/home
不过,我不知道 Windows 是否存在类似的东西。