неверная функция в 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)
  ;; ...
  )

[Я не уверен, что это было за изменение - возможно, была добавлена ​​повторяющаяся проверка параметров?]

Другие вопросы по тегам