Mercurial > emacs
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.