Function: elisp-scope-define-minor-mode
elisp-scope-define-minor-mode is a byte-compiled function defined in
elisp-scope.el.gz.
Signature
(elisp-scope-define-minor-mode MODE DOC BODY)
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/elisp-scope.el.gz
(defun elisp-scope-define-minor-mode (mode _doc body)
(let ((explicit-var nil) (command t))
(while-let ((kw (car-safe body))
(bkw (elisp-scope--sym-bare kw))
((keywordp bkw)))
(when-let* ((beg (elisp-scope--sym-pos kw)))
(elisp-scope--report 'constant beg bkw))
(cl-case bkw
((:init-value :keymap :after-hook :initialize)
(elisp-scope-1 (cadr body)))
(:lighter (elisp-scope-mode-line-construct (cadr body)))
((:interactive)
(let ((val (cadr body)))
(when (consp val) (mapc #'elisp-scope-major-mode-name val))
(setq command val)))
((:variable)
(let* ((place (cadr body))
(tail (cdr-safe place)))
(if (and tail (let ((symbols-with-pos-enabled t))
(or (symbolp tail) (functionp tail))))
(progn
(elisp-scope-1 (car place))
(elisp-scope-sharpquote tail))
(elisp-scope-1 place)))
(setq explicit-var t))
((:group) (elisp-scope-1 (cadr body) '(symbol . group)))
((:predicate) ;For globalized minor modes.
(elisp-scope-global-minor-mode-predicate (cadr body)))
((:on :off)
(let ((obod (cdr body)))
(while (and obod (not (keywordp (elisp-scope--sym-bare (car obod)))))
(elisp-scope-1 (pop obod)))
(setq body (cons bkw (cons nil obod))))))
(setq body (cddr body)))
(when-let* ((bare (elisp-scope--sym-bare mode)) (beg (elisp-scope--sym-pos mode))
(typ (if command 'defcmd 'defun)))
(elisp-scope--report typ beg bare)
(unless explicit-var
(elisp-scope--report 'defvar beg bare)))
(elisp-scope-n body)))