4

我是 emacs lisp 的新手。我想知道在 elisp 中是否可以在输入缓冲区时监听键盘事件。我阅读了有关 read-key-sequence / read-key-sequence-vector / read-event / read-key 的文档,结果发现这些命令阻止了缓冲输入流程,因为在调用时,后续的击键不会出现在缓冲区。例如,如果我在当前缓冲区中键入“go”然后调用 read-key-sequence 然后键入“o”,则第二个“o”被视为命令序列而不是缓冲区内容文本的字符。

尽管我可能已经找到了解决此问题的方法,但就是以编程方式将击键插入缓冲区:

(catch 'break
(while 
  (progn
    (let
        ((strokes (read-key-sequence-vector nil)))
        (if 
            (equal strokes [27 27 27])
            (throw 'break nil)
            (insert strokes)))
    t)))

我更愿意看看是否有更好的方法来实现这一点。如果 elisp 可以像在 javascript 中那样做事件驱动的东西,那就太好了

 someObject.addEventListener('keydown', function (e) { ... })

这当然只是我的希望。:) 谢谢。

4

1 回答 1

4

如果我明白你在做什么,你应该看看post-self-insert-command-hook。这将允许您在每次常规按键(不包括键盘快捷键)后运行您的功能。

于 2013-10-01T14:01:33.997 回答