changeset 31971:fa083a5fbf0c

(partial-completion-mode) <defcustom>: Remove. (partial-completion-mode): Use define-minor-mode. (PC-do-completion): Understand `completion-auto-help = delay' to mean to popup the completion buffer only the second time. (PC-include-file-all-completions, PC-include-file-all-completions) (PC-include-file-all-completions): Don't quote lambda.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 29 Sep 2000 02:17:56 +0000
parents ebe991a7d6f9
children 5fbecb49e386
files lisp/complete.el
diffstat 1 files changed, 52 insertions(+), 80 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/complete.el	Fri Sep 29 02:05:07 2000 +0000
+++ b/lisp/complete.el	Fri Sep 29 02:17:56 2000 +0000
@@ -98,22 +98,6 @@
   :group 'minibuffer
   :group 'convenience)
 
-;;;###autoload
-(defcustom partial-completion-mode nil
-  "Toggle Partial Completion mode.
-When Partial Completion mode is enabled, TAB (or M-TAB if `PC-meta-flag' is
-nil) is enhanced so that if some string is divided into words and each word is
-delimited by a character in `PC-word-delimiters', partial words are completed
-as much as possible and `*' characters are treated likewise in file names.
-This variable should be set only with \\[customize], which is equivalent
-to using the function `partial-completion-mode'."
-  :set (lambda (symbol value)
-	 (partial-completion-mode (or value 0)))
-  :initialize 'custom-initialize-default
-  :type 'boolean
-  :group 'partial-completion
-  :require 'complete)
-
 (defcustom PC-first-char 'find-file
   "*Control how the first character of a string is to be interpreted.
 If nil, the first character of a string is not taken literally if it is a word
@@ -164,54 +148,6 @@
 
 (defvar PC-old-read-file-name-internal nil)
 
-;;;###autoload
-(defun partial-completion-mode (&optional arg)
-  "Toggle Partial Completion mode.
-With prefix ARG, turn Partial Completion mode on if ARG is positive.
-
-When Partial Completion mode is enabled, TAB (or M-TAB if `PC-meta-flag' is
-nil) is enhanced so that if some string is divided into words and each word is
-delimited by a character in `PC-word-delimiters', partial words are completed
-as much as possible.
-
-For example, M-x p-c-m expands to M-x partial-completion-mode since no other
-command begins with that sequence of characters, and
-\\[find-file] f_b.c TAB might complete to foo_bar.c if that file existed and no
-other file in that directory begin with that sequence of characters.
-
-Unless `PC-disable-includes' is non-nil, the \"<...>\" sequence is interpreted
-specially in \\[find-file].  For example,
-\\[find-file] <sys/time.h> RET finds the file /usr/include/sys/time.h.
-See also the variable `PC-include-file-path'."
-  (interactive "P")
-  (let ((on-p (if arg
-		  (> (prefix-numeric-value arg) 0)
-		(not partial-completion-mode))))
-    ;; Deal with key bindings...
-    (PC-bindings on-p)
-    ;; Deal with include file feature...
-    (cond ((not on-p)
-	   (remove-hook 'find-file-not-found-hooks 'PC-look-for-include-file))
-	  ((not PC-disable-includes)
-	   (add-hook 'find-file-not-found-hooks 'PC-look-for-include-file)))
-    ;; ... with some underhand redefining.
-    (cond ((and (not on-p) (functionp PC-old-read-file-name-internal))
-	   (fset 'read-file-name-internal PC-old-read-file-name-internal))
-	  ((and (not PC-disable-includes) (not PC-old-read-file-name-internal))
-	   (setq PC-old-read-file-name-internal
-		 (symbol-function 'read-file-name-internal))
-	   (fset 'read-file-name-internal
-		 'PC-read-include-file-name-internal)))
-    (when (and on-p (null PC-env-vars-alist))
-      (setq PC-env-vars-alist
-	    (mapcar (lambda (string)
-		      (let ((d (string-match "=" string)))
-			(cons (concat "$" (substring string 0 d))
-			      (and d (substring string (1+ d))))))
-		    process-environment)))
-    ;; Finally set the mode variable.
-    (setq partial-completion-mode on-p)))
-
 (defun PC-bindings (bind)
   (let ((completion-map minibuffer-local-completion-map)
 	(must-match-map minibuffer-local-must-match-map))
@@ -254,16 +190,50 @@
 
 	   (define-key global-map "\e\t"	'PC-lisp-complete-symbol)))))
 
-;; Because the `partial-completion-mode' option is defined before the
-;; `partial-completion-mode' command and its callee, we give the former a
-;; default `:initialize' keyword value.  Otherwise, the `:set' keyword value
-;; would be called to initialise the variable value, and that would call the
-;; as-yet undefined `partial-completion-mode' function.
-;; Since the default `:initialize' keyword value (obviously) does not turn on
-;; Partial Completion Mode, we do that here, once the `partial-completion-mode'
-;; function and its callee are defined.
-(when partial-completion-mode
-  (partial-completion-mode t))
+;;;###autoload
+(define-minor-mode partial-completion-mode
+  "Toggle Partial Completion mode.
+With prefix ARG, turn Partial Completion mode on if ARG is positive.
+
+When Partial Completion mode is enabled, TAB (or M-TAB if `PC-meta-flag' is
+nil) is enhanced so that if some string is divided into words and each word is
+delimited by a character in `PC-word-delimiters', partial words are completed
+as much as possible and `*' characters are treated likewise in file names.
+
+For example, M-x p-c-m expands to M-x partial-completion-mode since no other
+command begins with that sequence of characters, and
+\\[find-file] f_b.c TAB might complete to foo_bar.c if that file existed and no
+other file in that directory begin with that sequence of characters.
+
+Unless `PC-disable-includes' is non-nil, the \"<...>\" sequence is interpreted
+specially in \\[find-file].  For example,
+\\[find-file] <sys/time.h> RET finds the file /usr/include/sys/time.h.
+See also the variable `PC-include-file-path'."
+  nil nil nil :global t :group 'partial-completion
+  ;; Deal with key bindings...
+  (PC-bindings partial-completion-mode)
+  ;; Deal with include file feature...
+  (cond ((not partial-completion-mode)
+	 (remove-hook 'find-file-not-found-hooks 'PC-look-for-include-file))
+	((not PC-disable-includes)
+	 (add-hook 'find-file-not-found-hooks 'PC-look-for-include-file)))
+  ;; ... with some underhand redefining.
+  (cond ((and (not partial-completion-mode)
+	      (functionp PC-old-read-file-name-internal))
+	 (fset 'read-file-name-internal PC-old-read-file-name-internal))
+	((and (not PC-disable-includes) (not PC-old-read-file-name-internal))
+	 (setq PC-old-read-file-name-internal
+	       (symbol-function 'read-file-name-internal))
+	 (fset 'read-file-name-internal
+	       'PC-read-include-file-name-internal)))
+    (when (and partial-completion-mode (null PC-env-vars-alist))
+      (setq PC-env-vars-alist
+	    (mapcar (lambda (string)
+		      (let ((d (string-match "=" string)))
+			(cons (concat "$" (substring string 0 d))
+			      (and d (substring string (1+ d))))))
+		    process-environment))))
+
 
 (defun PC-complete ()
   "Like minibuffer-complete, but allows \"b--di\"-style abbreviations.
@@ -670,7 +640,9 @@
 		       (PC-is-complete-p (field-string) table pred))
 
 		;; If totally ambiguous, display a list of completions
-		(if (or completion-auto-help
+		(if (or (eq completion-auto-help t)
+			(and completion-auto-help
+			     (eq last-command this-command))
 			(eq mode 'help))
 		    (with-output-to-temp-buffer "*Completions*"
 		      (display-completion-list (sort helpposs 'string-lessp))
@@ -914,8 +886,8 @@
 If optional third argument FULL is non-nil, returned pathnames should be 
 absolute rather than relative to some directory on the SEARCH-PATH."
   (setq search-path
-	(mapcar '(lambda (dir)
-		   (if dir (file-name-as-directory dir) default-directory))
+	(mapcar (lambda (dir)
+		  (if dir (file-name-as-directory dir) default-directory))
 		search-path))
   (if (file-name-absolute-p file)
       ;; It's an absolute file name, so don't need search-path
@@ -929,7 +901,7 @@
       ;; Append subdirectory part to each element of search-path
       (if subdir
 	  (setq search-path
-		(mapcar '(lambda (dir) (concat dir subdir))
+		(mapcar (lambda (dir) (concat dir subdir))
 			search-path)
 		file ))
       ;; Make list of completions in each directory on search-path
@@ -940,14 +912,14 @@
 	      (progn
 		(setq file-lists
 		      (cons 
-		       (mapcar '(lambda (file) (concat subdir file))
+		       (mapcar (lambda (file) (concat subdir file))
 			       (file-name-all-completions ndfile 
 							  (car search-path)))
 		       file-lists))))
 	  (setq search-path (cdr search-path))))
       ;; Compress out duplicates while building complete list (slloooow!)
       (let ((sorted (sort (apply 'nconc file-lists)
-			  '(lambda (x y) (not (string-lessp x y)))))
+			  (lambda (x y) (not (string-lessp x y)))))
 	    compressed)
 	(while sorted
 	  (if (equal (car sorted) (car compressed)) nil