From 4d4fc3cc984403ecd0ebfce08c1bfe70516cb864 Mon Sep 17 00:00:00 2001 From: Eshel Yaron Date: Sat, 19 Oct 2024 14:20:23 +0200 Subject: [PATCH] (define-minor-mode): Add keywords ':on' and ':off' --- lisp/emacs-lisp/easy-mmode.el | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index f47352988f8..1466ccb8e89 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el @@ -253,7 +253,7 @@ INIT-VALUE LIGHTER KEYMAP. (format-message "Use keywords rather than deprecated positional arguments to `define-minor-mode'") exp)))) - keyw keymap-sym tmp) + keyw keymap-sym tmp on off) ;; Allow BODY to start with the old INIT-VALUE LIGHTER KEYMAP triplet. (unless (keywordp (car body)) @@ -290,6 +290,12 @@ INIT-VALUE LIGHTER KEYMAP. (setq getter (car variable)) (setq setter `(funcall #',(cdr variable))))) (:after-hook (setq after-hook (pop body))) + (:on (while (and body (not (keywordp (car body)))) + (push (pop body) on)) + (setq on (nreverse on))) + (:off (while (and body (not (keywordp (car body)))) + (push (pop body) off)) + (setq off(nreverse off))) (_ (push keyw extra-keywords) (push (pop body) extra-keywords)))) (setq pretty-name (easy-mmode-pretty-mode-name mode lighter)) @@ -304,6 +310,12 @@ INIT-VALUE LIGHTER KEYMAP. ;; TODO? Mark booleans as safe if booleanp? Eg abbrev-mode. (unless type (setq type '(:type 'boolean))) + (when (or on off) + (setq body + `((if ,mode + (progn ,@on) + ,@off)))) + `(progn ;; Define the variable to enable or disable the mode. ,(cond -- 2.39.5