Я не уверен ли использование 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. Я также установил главный режим файла автосохранения на главный режим исходного файла для последовательной блокировки шрифта.
Хотя apply, конечно, можно использовать для этого, funcall может подойти лучше
(funcall file-major-mode)
он отличается от apply тем, что не принимает список аргументов, а только аргументы. Оба следующих выражения эквивалентны:
(funcall '+ 1 2)
(apply '+ '(1 2))
Мне кажется, это то, для чего нужна заявка.
Кроме того, вы сами сказали: код делает то, что вы хотите! : -)