使用空格而不是控件来避免emacs pinky?
我发现了一例因过度按压C-x导致的emacs小指。理想情况下,我希望使用空格键而不是控件作为前缀命令,因为它更容易用拇指按住。按空格键和释放空格键仍应添加空格,但同时按空格+x键应可绑定到命令。例如:使用空格而不是控件来避免emacs pinky?,emacs,elisp,Emacs,Elisp,我发现了一例因过度按压C-x导致的emacs小指。理想情况下,我希望使用空格键而不是控件作为前缀命令,因为它更容易用拇指按住。按空格键和释放空格键仍应添加空格,但同时按空格+x键应可绑定到命令。例如: (local-set-key (kbd "SPC-s") 'search-forward) 有人对如何实现这一点有什么想法吗?是否可以只使用elisp来实现,或者我必须修改emacs源代码并编译自己的版本 我更喜欢独立于操作系统的解决方案,因为我在Windows和Linux上都使用emacs 编
(local-set-key (kbd "SPC-s") 'search-forward)
有人对如何实现这一点有什么想法吗?是否可以只使用elisp来实现,或者我必须修改emacs源代码并编译自己的版本
我更喜欢独立于操作系统的解决方案,因为我在Windows和Linux上都使用emacs
编辑:
我试过key-chord.el,它在某些情况下有用,但不是全部(C-x C-s)。我更喜欢一个次要的模式,比如保持空间是控制或者保持空间是元
编辑:
谢谢你的回复。我目前正在使用key chord将许多C-*命令映射到j*或f*,具体取决于*是左手键还是右手键。例如,我用jb替换了C-xb。它适用于通常键入一次的所有命令,但不适用于重复使用的命令(如向前或向后段落)。它是迄今为止最好的跨平台解决方案,因为它只需要一个自定义的.emacs和key-chord.el文件。我更喜欢一个需要较少重新映射的解决方案,并减少键入“fyi”和获取“我曾考虑过用Ctrl键替换Caps Lock或Alt,但这只对左小指有帮助。许多常用命令都是用右小指(C-x、C-s、C-w、C-y)执行的。这不是对您的问题的回答,但这是一种避免Emacs小指的方法:不要用一只手按下修改器和键。所以(假设你有一个Qwerty键盘)用右手按Control,左手按x。我将CapsLock重新映射为Control以避免痛苦(使用KDE进行映射,而不是emacs)
更新:我在LXDE和MS Windows中也能做到这一点。我认为在Emacs Lisp中不可能做到这一点。要想做你想做的事情,你必须检查“空格”键是否仍被按下或是否被释放。然而,Emacs中的键盘事件只是字符,而不是像鼠标按钮那样的“按下”和“释放”事件。我对Emacs C代码了解不够,无法说明是否可以在不中断正常事件循环的情况下在那里实现它 因此,让我们转向依赖操作系统的解决方案。在Xorg下,可以将修改器映射到普通键(使用xmodmap);但是,按“空格”键仍然会生成一个空格,而也将用作修饰符,这不是您想要的。我知道的唯一解决方案是一个特殊的Xorg键盘驱动程序: 不过,我不知道Windows是否也存在类似的问题。Xah Lee就这个问题写了一篇文章, 尤其是当他建议 用手掌或半拳头代替小指按下控制按钮 钥匙
在Windows上,对于大多数类型的键重新映射要求,是一种非常灵活且可编写脚本的解决方案。我所做的是切换控件的alt键和alt meta的super键,这样可以避免单击恼人的左控件。此外,我为Hyper切换Caps Lock,以便有一个额外的修改器,用于在缓冲区H-p H-n和其他内容之间切换。
如果你有Ubuntu,键盘设置的改变是微不足道的 您可以查看
cua模式
,该模式对C-x
和C-C
执行类似操作(当标记处于活动状态时)。我当然不是专家(我甚至不使用cua模式
),但简单地看一下代码,有一个计时器发送超时
事件,这样(在您的情况下)您就可以绑定[?\s timeout]
插入一个空格,并将其他键绑定到您想要的任何位置。您也不能(我不认为)像SPC是修改器一样绑定关键点:
(local-set-key (kbd "SPC-s") 'search-forward)
但是你会把他们绑起来
我尝试使用
cua模式进行快速测试,但不幸的是,计时器仅在标记激活时运行。嗯,这比这要复杂一点,但我可以说我没有坚持足够长的时间来解决这一切。但完全有可能让空间成为控制转义到元的方式。这应该满足您的要求:
(空间弦定义全局“s”向前搜索)
它有“和弦”功能,因此您必须同时键入空格和s,但这样做很容易
或者,如果您可以使用control lock来帮助避免按住control键(就像控制键的caps lock)。在过去几周中,我编写并使用了一个自动热键脚本,该脚本提供了Windows范围的功能,可以完全按照您所描述的操作。现在可以使用了。虽然它不是一个独立于操作系统的解决方案,但在Linux上有几乎相同的实现(例如,在家和修改器),因此您应该能够在任一平台上拥有相同的用户体验。另一方面,您还可以在其他程序中使用它来执行复制、粘贴和切换浏览器选项卡等任务。希望有帮助。这里描述了确切的解决方案。它包括使用一个额外的软件(在每个操作系统上可用)。
我发现的一个诀窍是(键盘允许的话),你可以用手的一部分按ctrl键,然后用拇指按C-x C-s键。Caps Lock重新映射也可以工作,因为您只需使用无名指即可。虽然我个人最喜欢的是切换ALT和CTRL键,但原因是以前大多数键盘都有这样的键(ALT键的使用不如CTRL键),所以你可以用拇指来代替,这需要一些时间来适应,并且假设您使用ALT的次数比CTRL少很多。我曾尝试使用下手掌按住CTRL,但这并不容易,因为MS Natural键盘上的键很小。如果我能飞
(define-key space-as-prefix-map (kbd "s") 'search-forward)