changeset 89098:49f9e4204d1b

(widget-string-complete): New. (widget-coding-system-prompt-value-history): Deleted. (coding-system): Use coding-system-value-history.
author Dave Love <fx@gnu.org>
date Mon, 09 Sep 2002 22:19:53 +0000
parents fade73f8a259
children b58eb0130fe4
files lisp/wid-edit.el
diffstat 1 files changed, 38 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/wid-edit.el	Sun Sep 08 20:36:10 2002 +0000
+++ b/lisp/wid-edit.el	Mon Sep 09 22:19:53 2002 +0000
@@ -2870,6 +2870,43 @@
   :complete-function 'ispell-complete-word
   :prompt-history 'widget-string-prompt-value-history)
 
+(eval-when-compile (defvar widget))
+
+(defun widget-string-complete ()
+  "Complete contents of string field.
+Completions are taken from the :completion-alist property of the
+widget.  If that isn't a list, it's evalled and expected to yield a list."
+  (interactive)
+  (let* ((prefix (buffer-substring-no-properties (widget-field-start widget)
+						 (point)))
+	 (completion-ignore-case (widget-get widget :completion-ignore-case))
+	 (alist (widget-get widget :completion-alist))
+	 (_ (unless (listp alist)
+	      (setq alist (eval alist))))
+	 (completion (try-completion prefix alist)))
+    (cond ((eq completion t)
+	   (when completion-ignore-case
+	     ;; Replace field with completion in case its case is different.
+	     (delete-region (widget-field-start widget)
+			    (widget-field-end widget))
+	     (insert-and-inherit (car (assoc-ignore-case prefix alist))))
+	   (message "Only match"))
+	  ((null completion)
+	   (error "No match"))
+	  ((not (eq t (compare-strings prefix nil nil completion nil nil 
+				       completion-ignore-case)))
+	   (when completion-ignore-case
+	     ;; Replace field with completion in case its case is different.
+	     (delete-region (widget-field-start widget)
+			    (widget-field-end widget))
+	     (insert-and-inherit completion)))
+	  (t
+	   (message "Making completion list...")
+	   (with-output-to-temp-buffer "*Completions*"
+	     (display-completion-list
+	      (all-completions prefix alist nil)))
+	   (message "Making completion list...done")))))
+
 (define-widget 'regexp 'string
   "A regular expression."
   :match 'widget-regexp-match
@@ -3025,16 +3062,13 @@
 		       (interactive)
 		       (lisp-complete-symbol 'boundp))
   :tag "Variable")
-
-(defvar widget-coding-system-prompt-value-history nil
-  "History of input to `widget-coding-system-prompt-value'.")
   
 (define-widget 'coding-system 'symbol
   "A MULE coding-system."
   :format "%{%t%}: %v"
   :tag "Coding system"
   :base-only nil
-  :prompt-history 'widget-coding-system-prompt-value-history
+  :prompt-history 'coding-system-value-history
   :prompt-value 'widget-coding-system-prompt-value
   :action 'widget-coding-system-action
   :complete-function (lambda ()