2010-06-10 78 views
6

我不確定這裏是否推薦使用apply。有動態設置主模式的更好/標準解決方案嗎?我找不到任何其他。在Emacs Lisp中正確使用apply?

背景:

每當我在Emacs的

X has auto save data; consider M-x recover-this-file

消息,我不知道目前的文件,並自動保存版本之間的區別是什麼。由於大多數的我也懶得看它的時候,我試圖自動執行任務:

(defun ediff-auto-save() 
    "Ediff current file and its auto-save pendant." 
    (interactive) 
    (let ((auto-file-name (make-auto-save-file-name)) 
     (file-major-mode major-mode)) 
    (ediff-files buffer-file-name auto-file-name) 
    (switch-to-buffer-other-window (file-name-nondirectory auto-file-name)) 
    (apply file-major-mode '()) 
    (other-window 1))) ;; back to ediff panel 

的代碼我想要做什麼,它會打開自動保存文件,並開始ediff。我還將自動保存文件的主要模式設置爲原始文件的主要模式以實現一致的字體鎖定。

+0

這是elisp的一個非常方便的塊,無論'apply'是否是正確的選擇。 – Anne 2012-05-14 14:17:42

回答

5

雖然申請當然可以用於此,funcall可能更適合

(funcall file-major-mode) 

它不同於應用,因爲它並不需要的參數列表,只是參數。以下兩者是等效的:

(funcall '+ 1 2) 
(apply '+ '(1 2)) 
+0

謝謝,這是一個很好的觀點。隨着funcall,我不必添加該空列表作爲參數。看起來更好。 – lmichelbacher 2010-07-23 07:10:13

2

對我來說這看起來很好 - 這就是應用的目的。

此外,你自己說的:代碼做你想做的! :-)

+0

好的謝謝。只是追求完美,就是這樣;)。 – lmichelbacher 2010-06-10 14:57:13