changeset 4736:6aeb2227ed30

(read-cookie): New function.
author Roland McGrath <roland@gnu.org>
date Fri, 17 Sep 1993 18:51:05 +0000
parents 97c1e7309a2d
children 430cee1995ab
files lisp/play/cookie1.el
diffstat 1 files changed, 23 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/play/cookie1.el	Fri Sep 17 17:51:40 1993 +0000
+++ b/lisp/play/cookie1.el	Fri Sep 17 18:51:05 1993 +0000
@@ -91,9 +91,9 @@
 
 ;;;###autoload
 (defun cookie-snarf (phrase-file startmsg endmsg)
-  "Reads in the PHRASE-FILE, returns it as a vector of strings.  Emit
-STARTMSG and ENDMSG before and after.  Caches the result; second and
-subsequent calls on the same file won't go to disk."
+  "Reads in the PHRASE-FILE, returns it as a vector of strings.
+Emit STARTMSG and ENDMSG before and after.  Caches the result; second
+and subsequent calls on the same file won't go to disk."
   (let ((sym (intern-soft phrase-file cookie-cache)))
     (and sym (not (equal (symbol-function sym)
 			 (nth 5 (file-attributes phrase-file))))
@@ -120,6 +120,26 @@
 	  (message endmsg)
 	  (set sym (apply 'vector result)))))))
 
+(defun read-cookie (prompt phrase-file startmsg endmsg &optional require-match)
+  "Prompt with PROMPT and read with completion among cookies in PHRASE-FILE.
+STARTMSG and ENDMSG are passed along to `cookie-snarf'.
+Optional fifth arg REQUIRE-MATCH non-nil forces a matching cookie."
+  ;; Make sure the cookies are in the cache.
+  (or (intern-soft phrase-file cookie-cache)
+      (cookie-snarf phrase-file startmsg endmsg))
+  (completing-read prompt
+		   (let ((sym (intern phrase-file cookie-cache)))
+		     ;; We cache the alist form of the cookie in a property.
+		     (or (get sym 'completion-alist)
+			 (let* ((alist nil)
+				(vec (cookie-snarf phrase-file
+						   startmsg endmsg))
+				(i (length vec)))
+			   (while (> (setq i (1- i)) 0)
+			     (setq alist (cons (list (aref vec i)) alist)))
+			   (put sym 'completion-alist alist))))
+		   nil require-match nil nil))
+
 ; Thanks to Ian G Batten <BattenIG@CS.BHAM.AC.UK>
 ; [of the University of Birmingham Computer Science Department]
 ; for the iterative version of this shuffle.