aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Blandy1993-04-10 06:20:55 +0000
committerJim Blandy1993-04-10 06:20:55 +0000
commitf5a168237e702f25240c0ea9550b8b2f7c36038e (patch)
tree1b4ddf9705d0271589929fc2372a6464af3b8def
parent51509df90c0966121bb8dafdb29de6721f9ff01b (diff)
downloademacs-f5a168237e702f25240c0ea9550b8b2f7c36038e.tar.gz
emacs-f5a168237e702f25240c0ea9550b8b2f7c36038e.zip
* finder.el (finder-by-keyword): Build an alist to pass to
completing-read, instead of building an invalid obarray. * finder.el (finder-by-keyword): If the user quits or enters the empty string in response to the keyword prompt, restore the old window configuration properly.
-rw-r--r--lisp/finder.el66
1 files changed, 34 insertions, 32 deletions
diff --git a/lisp/finder.el b/lisp/finder.el
index ce3b858c009..57c5995e790 100644
--- a/lisp/finder.el
+++ b/lisp/finder.el
@@ -132,40 +132,42 @@ arguments compiles from `load-path'."
132(defun finder-by-keyword () 132(defun finder-by-keyword ()
133 "Find packages matching a given keyword." 133 "Find packages matching a given keyword."
134 (interactive) 134 (interactive)
135 (pop-to-buffer "*Help*") 135 (set-buffer (get-buffer-create "*Help*"))
136 (erase-buffer) 136 (erase-buffer)
137 (mapcar 137
138 (function (lambda (x) 138 ;; Display descriptions of the keywords in the help buffer, and
139 (insert (symbol-name (car x))) 139 ;; build an assoc list mapping the names of known keywords to their
140 (insert-at-column 14 (cdr x) "\n") 140 ;; symbols.
141 )) 141 (let ((keyword-names
142 finder-known-keywords) 142 (mapcar (lambda (assoc)
143 (goto-char (point-min)) 143 (let ((keyword (car assoc)))
144 (let (key 144 (insert (symbol-name keyword))
145 (known (mapcar (function (lambda (x) (car x))) finder-known-keywords))) 145 (insert-at-column 14 (cdr assoc) "\n")
146 (let ((key (completing-read 146 (cons (symbol-name keyword) keyword)))
147 "Package keyword: " 147 finder-known-keywords)))
148 (vconcat known) 148 (let ((key
149 (function (lambda (arg) (memq arg known))) 149 (save-window-excursion
150 t)) 150 (pop-to-buffer "*Help*")
151 (goto-char (point-min))
152 (completing-read "Package keyword: " keyword-names nil t)))
151 id) 153 id)
152 (erase-buffer) 154 (or (equal key "")
153 (if (equal key "") 155 (progn
154 (delete-window (get-buffer-window "*Help*")) 156 (erase-buffer)
155 (setq id (intern key)) 157 (pop-to-buffer "*Help*")
156 (insert 158 (setq id (intern key))
157 "The following packages match the keyword `" key "':\n\n") 159 (insert
158 (mapcar 160 "The following packages match the keyword `" key "':\n\n")
159 (function (lambda (x) 161 (mapcar
160 (if (memq id (car (cdr (cdr x)))) 162 (function (lambda (x)
161 (progn 163 (if (memq id (car (cdr (cdr x))))
162 (insert (car x)) 164 (progn
163 (insert-at-column 16 (car (cdr x)) "\n") 165 (insert (car x))
164 )) 166 (insert-at-column 16 (car (cdr x)) "\n")
165 )) 167 ))
166 finder-package-info) 168 ))
167 (goto-char (point-min)) 169 finder-package-info)
168 )))) 170 (goto-char (point-min)))))))
169 171
170(provide 'finder) 172(provide 'finder)
171 173