2010-06-10 67 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