diff options
| author | Jim Blandy | 1993-04-10 06:20:55 +0000 |
|---|---|---|
| committer | Jim Blandy | 1993-04-10 06:20:55 +0000 |
| commit | f5a168237e702f25240c0ea9550b8b2f7c36038e (patch) | |
| tree | 1b4ddf9705d0271589929fc2372a6464af3b8def | |
| parent | 51509df90c0966121bb8dafdb29de6721f9ff01b (diff) | |
| download | emacs-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.el | 66 |
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 | ||