2013-10-01 50 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。這將允許您在每次常規按鍵之後運行您的功能(不包括鍵盤快捷鍵)。