1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-18 18:05:07 +00:00

* lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Fix bug#47925

In order to correctly detect the case of the "new style" with an empty body,
remove the old optional arguments `init-value`, `lighter`, and `keymap`,
so we can distinguish the "nil arg" from the "absent arg" cases.
This commit is contained in:
Stefan Monnier 2021-04-20 19:40:09 -04:00
parent c4c9a60c13
commit 9e5290aecf

View File

@ -118,7 +118,7 @@ it is disabled.")
;;;###autoload
(defalias 'easy-mmode-define-minor-mode #'define-minor-mode)
;;;###autoload
(defmacro define-minor-mode (mode doc &optional init-value lighter keymap &rest body)
(defmacro define-minor-mode (mode doc &rest body)
"Define a new minor mode MODE.
This defines the toggle command MODE and (by default) a control variable
MODE (you can override this with the :variable keyword, see below).
@ -200,6 +200,9 @@ INIT-VALUE LIGHTER KEYMAP.
(let* ((last-message (make-symbol "last-message"))
(mode-name (symbol-name mode))
(init-value nil)
(keymap nil)
(lighter nil)
(pretty-name nil)
(globalp nil)
(set nil)
@ -216,22 +219,20 @@ INIT-VALUE LIGHTER KEYMAP.
(hook-on (intern (concat mode-name "-on-hook")))
(hook-off (intern (concat mode-name "-off-hook")))
(interactive t)
(warnwrap (if (keywordp init-value) #'identity
(warnwrap (if (or (null body) (keywordp (car body))) #'identity
(lambda (exp)
(macroexp-warn-and-return
"Use keywords rather than deprecated positional arguments to `define-minor-mode'"
exp))))
keyw keymap-sym tmp)
;; Allow skipping the first three args.
(cond
((keywordp init-value)
(setq body (if keymap `(,init-value ,lighter ,keymap ,@body)
`(,init-value ,lighter))
init-value nil lighter nil keymap nil))
((keywordp lighter)
(setq body `(,lighter ,keymap ,@body) lighter nil keymap nil))
((keywordp keymap) (push keymap body) (setq keymap nil)))
;; Allow BODY to start with the old INIT-VALUE LIGHTER KEYMAP triplet.
(unless (keywordp (car body))
(setq init-value (pop body))
(unless (keywordp (car body))
(setq lighter (pop body))
(unless (keywordp (car body))
(setq keymap (pop body)))))
;; Check keys.
(while (keywordp (setq keyw (car body)))