2013-10-01 48 views
2

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

虽然我可能已经找到一种方法来解决这个问题,这是对击键插回到编程缓冲区:

(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) { ... }) 

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

+2

你想达到什么目的?通常情况下,你可以将键或键序列绑定到函数,或者你可以使用'pre-command-hook'和'post-command-hook'等事件钩子来做“神奇”的事情。 – Lindydancer

+0

我想在当前缓冲区中输入东西时在每个关键笔划上附加一些行为;行为可以是任何东西 - 就像在* Message *缓冲区中显示有趣的东西。关键是我不希望这些行为中断正常的打字流程 - 不切换回迷你缓冲区。我会看看前后钩子。谢谢。 – Shawn

回答

2

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