Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用空格而不是控件来避免emacs pinky?_Emacs_Elisp - Fatal编程技术网

使用空格而不是控件来避免emacs pinky?

使用空格而不是控件来避免emacs pinky?,emacs,elisp,Emacs,Elisp,我发现了一例因过度按压C-x导致的emacs小指。理想情况下,我希望使用空格键而不是控件作为前缀命令,因为它更容易用拇指按住。按空格键和释放空格键仍应添加空格,但同时按空格+x键应可绑定到命令。例如: (local-set-key (kbd "SPC-s") 'search-forward) 有人对如何实现这一点有什么想法吗?是否可以只使用elisp来实现,或者我必须修改emacs源代码并编译自己的版本 我更喜欢独立于操作系统的解决方案,因为我在Windows和Linux上都使用emacs 编

我发现了一例因过度按压C-x导致的emacs小指。理想情况下,我希望使用空格键而不是控件作为前缀命令,因为它更容易用拇指按住。按空格键和释放空格键仍应添加空格,但同时按空格+x键应可绑定到命令。例如:

(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”和获取“I”的风险。我相信使用空间是可行的,但我对emacs的技术细节知之甚少


我曾考虑过用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)