为什么emacs不支持按键向上/向下事件


9

AFAIK emacs keyup/keydown仅支持事件keypressed。结果的一个例子是,当我们要标记一个区域时,我们必须先设置一个标记set-mark-command,然后可以通过在该点周围移动来标记该区域。尽管这确实是一个有趣的功能,因为您不必在标记文本时按住Shift键,但是有时希望像其他编辑器一样具有相同的行为。这个问题是为了理解为什么emacs不支持这个功能以及为什么它被认为更好。还有一种意识形态的方法如何解决emacs中的问题?


6
Emacs也可以在终端中使用,并且在该环境中按键向上/向下事件没有意义。很可能,这至少是不支持这些事件的历史原因。但这并不意味着它们不能得到支持。我怀疑没有人看到有足够紧迫的需要去打扰它。
Harald Hanche-Olsen 2015年

1
好的,这是一个有效的论据,尽管emacs中还有其他功能仅在图形环境中有效(字体,鼠标事件等)
竖井

3
我编写了一些模拟键向上/向下事件的代码,以在键按下时预览文件,然后关闭键按下时的预览缓冲区,就像答案说的那样,它很hacky,但也许可以做成稳定的东西。emacs.stackexchange.com/questions/275/...
乔丹比翁

3
您指的是“与其他编辑器中的行为相同” [我不使用其他文本编辑器]?文本的其余部分似乎暗示了“ Shift + Move to select”,但是Emacs已支持该功能。
Stefan

4
尽管您说对了,但Emacs中不存在这些关键事件,但您应该知道Emacs 确实支持班次选择(如果这正是激发您的问题的原因)。
马拉巴巴

Answers:


2

正如历史原因在评论中所回答的那样,Emacs运行在终端中,并且那些设备是面向字符的-当在键盘上发生这种情况时,您将得到字节序列而没有任何保证。

讨论还指出,可以在图形环境中实现此功能。但是没有人对此感兴趣。

请注意,某些程序(例如游戏或音乐软件)可能会使用有关何时按下按键,持续多长时间以及何时松开的详细信息,但是文本编辑对此没有什么共同之处。

从手册(info "(elisp)Mouse Events")

Emacs supports four kinds of mouse events:
click events, drag events, button-down events, and motion events.

悬停事件可以由空闲计时器模拟-在延迟后的某个时刻分析事件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.