Subject: [PATCH] define-minor-mode docstring generation bug

From: Kelly Dean <[email-masked]>
Date: Sun, 25 Jan 2015 08:52:42 +0000

Try this:
(define-minor-mode foo "foo" :global t)

The variable it creates includes a docstring with

⌜Setting this variable directly does not take effect⌝.

That's a bug.

The attached dmm-docstring-gen-bug.patch fixes it.

Also attached is dmm-docstring-clarification.patch. (Not a bug, but might as well include it here.)

--- emacs-24.4/lisp/emacs-lisp/easy-mmode.el
+++ emacs-24.4/lisp/emacs-lisp/easy-mmode.el
@@ -158,7 +158,8 @@
   ;; Allow skipping the first three args.
   (cond
    ((keywordp init-value)
-    (setq body `(,init-value ,lighter ,keymap ,@body)
+    (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))
--- emacs-24.4/lisp/emacs-lisp/easy-mmode.el
+++ emacs-24.4/lisp/emacs-lisp/easy-mmode.el
@@ -114,9 +114,11 @@
 BODY contains code to execute each time the mode is enabled or disabled.
   It is executed after toggling the mode, and before running MODE-hook.
   Before the actual body code, you can write keyword arguments, i.e.
-  alternating keywords and values.  These following special keywords
-  are supported (other keywords are passed to `defcustom' if the minor
-  mode is global):
+  alternating keywords and values.  If you provide BODY, then you must
+  provide INIT-VALUE, LIGHTER, and KEYMAP, or provide at least one
+  keyword argument, or both; otherwise, BODY would be misinterpreted.
+  The following special keywords are supported (other keywords are passed
+  to `defcustom' if the minor mode is global):
 
 :group GROUP	Custom group name to use in all generated `defcustom' forms.
 		Defaults to MODE without the possible trailing \"-mode\".