2012-06-27 46 views
5

我喜歡使用C-jeval-last-sexp,但是paredit-mode(我喜歡它)將其覆蓋爲paredit-newline。尋找paredit模式的文檔,我沒有看到任何東西像paredit-mode-hook定義在哪裏我可以add-hook調用local-set-key或類似的功能。是否有可用的Emacs paredit鉤子,因此我可以重新定義C-j?

任何人有一個建議?

更新 嘗試下面的兩個答案,並沒有多少成功後,我認爲這個問題可能涉及到paredit是在幾個不同的情況下得到加載的事實呢?換句話說,我打開Common Lisp,Clojure和Emacs Lisp文件,所有這些文件都可以使用paredit。可悲的是,各種形式的eval-last-sexp在每種模式下都有稍微不同的名稱,所以我無法爲所有事情定義一次密鑰。相反,我需要根據我所處的主要模式來綁定密鑰。希望這增加了另一個有用的數據點。

回答

10

無需使用掛鉤,類似下面應該工作:

(eval-after-load "paredit" 
    #'(define-key paredit-mode-map (kbd "C-j") 'eval-last-sexp)) 

另外,如果由於某種原因不工作,或者你更喜歡使用鉤子,你可以添加上述define-key調用到paredit被激活的主要模式的鉤子。

+0

謝謝!這工作像一個魅力。 – bitops

6

define-*-mode宏之一定義的每個模式自動運行相應的MODE-hook

我看到paredit-mode是一個用(define-minor-mode paredit-mode ...)定義的次要模式,因此它將運行paredit-mode-hook

您可以鍵入M-Xfind-functionRETdefine-minor-modeRET和搜索run-hooks,看看這個行爲定義。

編輯(基於除了質疑):

他們是否都使用C-x C-e作爲默認的特定模式-EVAL-最後SEXP功能結合,通過任何機會呢?這似乎像他們做一個一致的東西,如果是這樣,那麼你可以用下面的辦法:

+1

+1。即使鉤子變量沒有被相關模式明確定義,Emacs也沒有意識到這種行爲是自動的。 –

2

有一個paredit模式掛機。直到你添加了一些東西,你纔會看到它。奇怪,但這是鉤子表現的方式。

然而,在你的情況,最好的辦法可能是清除paredit對C-J結合:

(eval-after-load 'paredit 
    #'(define-key paredit-mode-map (kbd "C-j") nil)) 

然後設置你通過在每一個主要模式鉤本地設置鍵自己。

相關問題