неверная функция в emacs 26, но работает в emacs 25
Это работает в emacs 25:
(setq custom-keymap (copy-keymap global-map))
(defun custom-def (keys func &optional file &optional global-p)
(define-key custom-keymap keys func)
(if global-p (global-set-key keys func))
(if file (autoload func file "[custom autoload]" t)))
(custom-def [delete] 'delete-char)
Но когда я звоню custom-def
в emacs 26 я получаю invalid-function
ошибка. Я изолировал его от&optional
параметры. Я удалил эти два аргумента иcustom-def
работает.
Так что же изменилось между 25 и 26 годами? Что мне здесь не хватает? Мне нужен гибкий ARGLIST, который работает в emacs 25.
1 ответ
Решение
Использовать optional
только один раз в списке параметров - все следующие параметры будут необязательными [другие ключевые слова также могут следовать - см. info(elisp) Функции].
(defun custom-def (keys func &optional file global-p)
;; ...
)
[Я не уверен, что это было за изменение - возможно, была добавлена повторяющаяся проверка параметров?]