Корректное использование применяется в Lisp Emacs?

Я не уверен ли использование apply рекомендуется здесь. Существует ли лучшее/стандартное решение для установки главного режима динамично? Я не мог найти никакого другого.

Фон:

Каждый раз, когда я добираюсь

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

сообщение в Emacs, интересно, каково различие между текущим файлом и версией автосохранения. С большей части времени я не могу быть побеспокоен для поиска его, я пытался автоматизировать задачу:

(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. Я также установил главный режим файла автосохранения на главный режим исходного файла для последовательной блокировки шрифта.

6
задан malana 23 July 2010 в 07:08
поделиться

2 ответа

Хотя apply, конечно, можно использовать для этого, funcall может подойти лучше

(funcall file-major-mode)

он отличается от apply тем, что не принимает список аргументов, а только аргументы. Оба следующих выражения эквивалентны:

(funcall '+ 1 2)
(apply '+ '(1 2))
5
ответ дан 17 December 2019 в 00:03
поделиться

Мне кажется, это то, для чего нужна заявка.

Кроме того, вы сами сказали: код делает то, что вы хотите! : -)

2
ответ дан 17 December 2019 в 00:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: