2014-05-03 93 views
1

我有興趣創建一個基於用戶定義標準運行的交互式準後命令鉤,如:Emacs - 創建一個交互式的只准後命令鉤

  • 向上(交互式);

  • Down(interactive);

  • Left(interactive);

  • Right(interactive);

  • 將文本插入緩衝區的任何(交互式)鍵 - 例如aA-zZ; 0-9;空間; (上/下)(交互式)。

  • 鼠標滾輪(上/下)(交互式)。

相信後命令鉤包括更多,我想要當鉤被激活以限制/控制。

任何有關如何創建這樣一個鉤子的指導,將不勝感激。


2013年5月3日:例如草案基於由下面@phils答案。

(add-hook 'post-command-hook 'quasi-post-command-hook) 

(defvar quasi-this-command-functions '(next-line previous-line left-char right-char 
    self-insert-command newline delete-backward-char delete-forward-char 
    indent-for-tab-command mwheel-scroll lawlist-mwheel-scroll end-of-visual-line 
    beginning-of-visual-line end-of-buffer beginning-of-buffer lawlist-forward-entity 
    lawlist-backward-entity left-word right-word forward-word backward-word) 
"Variable list of functions that trigger the `quasi-post-command-hook`.") 

(defvar quasi-major-mode-inclusions '(text-mode emacs-lisp-mode) 
"Variable list of major modes where the `quasi-post-command-hook` operates.") 

(defun quasi-post-command-hook() 
    (unless (minibufferp) 
    (when 
     (and 
     (memq major-mode quasi-major-mode-inclusions) 
     (memq this-command quasi-this-command-functions)) 
     (message "this-command: %s" this-command)))) 

回答

3

您可能想要測試this-command變量。

例如C-u M-x apropos-variable RET this RET

real-this-command 
    This is like `this-command', except that commands should never 
    modify it. 
this-command 
    The command now being executed. 
this-command-keys-shift-translated 
    Non-nil if the key sequence activating this command was 
    shift-translated. 
this-original-command 
    The command bound to the current key sequence before remapping. 
+0

真棒!非常感謝你 - 非常感謝! :) – lawlist

1

歷數你知道應該觸發這個鉤子(使用this-command)的命令當然是一種選擇,但「它不適合」。如果你試圖描述這些命令與其他命令有什麼共同之處,而其他命令沒有這些命令,那麼你可以做得更好。

+0

這兩個組基本上是:由於用戶按下交互鍵,'point'已經手動移動;或者,手動向上或向下滾動緩衝區。 – lawlist

+0

所以,也許你可以記住'lawlist-last-point'中的前一點,然後將它與當前點進行比較,以查看最後一個命令是否移動了點。 – Stefan

+0

謝謝你的建議 - 隨着時間的推移,我會在接下來的幾天繼續處理這個問題,然後我會報告回來。 – lawlist