2010-06-10 9 views
6

no estoy seguro de si es recomendable el uso de apply aquí. ¿Hay una solución mejor/estándar para configurar el modo principal de forma dinámica? No pude encontrar ningún otro.¿Uso correcto de aplicar en Emacs Lisp?

Antecedentes:

Cada vez que sale el mensaje

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

en Emacs, me pregunto cuál es la diferencia entre la imagen actual y la versión de guardado automático es. Dado que la mayoría de las veces no puedo ser molestado a mirar hacia arriba, he tratado de automatizar la tarea:

(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 

El código hace lo que yo quiero, se abre el archivo de guardado automático y comienza ediff. También configuré el modo principal del archivo de guardado automático en el modo principal del archivo original para un bloqueo de fuente consistente.

+0

Esta es una porción muy útil de elisp, independientemente de si 'aplicar' es la elección correcta. – Anne

Respuesta

5

Aunque ciertamente se puede utilizar para esto, funcall podría ser más adecuada

(funcall file-major-mode) 

se diferencia de aplicar, ya que no toma una lista de argumentos, a los argumentos. Ambos de los siguientes son equivalentes:

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

Gracias, ese es un buen punto. Con funcall no tengo que agregar esa lista vacía como argumento. Se ve mejor. – lmichelbacher

2

Se ve muy bien a mí - eso es lo que se aplica es para.

Además, usted mismo lo dijo: ¡el código hace lo que quiere! :-) aplica

+0

OK gracias. Solo luchando hacia la perfección, eso es todo;). – lmichelbacher