From b0628208cbc52cc19ae9610f08b596ddc28d99a6 Mon Sep 17 00:00:00 2001 From: Dave Love Date: Mon, 9 Sep 2002 22:19:53 +0000 Subject: [PATCH] (widget-string-complete): New. (widget-coding-system-prompt-value-history): Deleted. (coding-system): Use coding-system-value-history. --- lisp/wid-edit.el | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el index 783c0efbf37..1ac4e3c2542 100644 --- a/lisp/wid-edit.el +++ b/lisp/wid-edit.el @@ -2870,6 +2870,43 @@ as the value." :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 @@ It will read a directory name from the minibuffer when invoked." (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 () -- 2.39.5