changeset 47463:2b213bd55695

(define-minor-mode): Add a :require arg. Don't call the function during init if mode is on by default.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 13 Sep 2002 14:16:02 +0000
parents 1bbef0cbbf67
children b8282a873821
files lisp/emacs-lisp/easy-mmode.el
diffstat 1 files changed, 15 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/easy-mmode.el	Fri Sep 13 13:56:41 2002 +0000
+++ b/lisp/emacs-lisp/easy-mmode.el	Fri Sep 13 14:16:02 2002 +0000
@@ -90,11 +90,12 @@
   It will be executed after any toggling but before running the hooks.
   BODY can start with a list of CL-style keys specifying additional arguments.
   The following keyword arguments are supported:
-:group   Followed by the group name to use for any generated `defcustom'.
-:global  If non-nil specifies that the minor mode is not meant to be
-         buffer-local.  By default, the variable is made buffer-local.
-:init-value  Same as the INIT-VALUE argument.
-:lighter  Same as the LIGHTER argument."
+:group GROUP	Group name to use for any generated `defcustom'.
+:global GLOBAL	If non-nil specifies that the minor mode is not meant to be
+              	buffer-local.  By default, the variable is made buffer-local.
+:init-value VAL	Same as the INIT-VALUE argument.
+:lighter SPEC	Same as the LIGHTER argument.
+:require SYM	Same as defcustom's :require argument."
   ;; Allow skipping the first three args.
   (cond
    ((keywordp init-value)
@@ -109,6 +110,7 @@
 	 (globalp nil)
 	 (group nil)
 	 (extra-args nil)
+	 (require t)
 	 (keymap-sym (if (and keymap (symbolp keymap)) keymap
 		       (intern (concat mode-name "-map"))))
 	 (hook (intern (concat mode-name "-hook")))
@@ -123,6 +125,7 @@
 	(:global (setq globalp (pop body)))
 	(:extra-args (setq extra-args (pop body)))
 	(:group (setq group (nconc group (list :group (pop body)))))
+	(:require (setq require (pop body)))
 	(t (pop body))))
 
     (unless group
@@ -159,12 +162,12 @@
 	       :initialize 'custom-initialize-default
 	       ,@group
 	       :type 'boolean
-	       ,@(when curfile
-		   (list
-		    :require
-		    (list 'quote
-			  (intern (file-name-nondirectory
-				   (file-name-sans-extension curfile)))))))))
+	       ,@(cond
+		  ((not (and curfile require)) nil)
+		  ((not (eq require t)) `(:require ,require))
+		  (t `(:require
+		       ',(intern (file-name-nondirectory
+				  (file-name-sans-extension curfile)))))))))
 
        ;; The actual function.
        (defun ,mode (&optional arg ,@extra-args)
@@ -224,7 +227,7 @@
 			       (symbol-value ',keymap-sym))))
        
        ;; If the mode is global, call the function according to the default.
-       ,(if globalp
+       ,(if (and globalp (null init-value))
 	    `(if (and load-file-name ,mode)
 		 (eval-after-load load-file-name '(,mode 1)))))))