diff options
| author | Karl Heuer | 1997-09-30 07:36:28 +0000 |
|---|---|---|
| committer | Karl Heuer | 1997-09-30 07:36:28 +0000 |
| commit | f3b330d6d810be33ddf73e1b5375b602e086497b (patch) | |
| tree | 7445af6887986ee953a5483e18cb45a39f53585c /lisp | |
| parent | 274c59c95c6eb90a3eed5adba9c213a8a0e5d9c0 (diff) | |
| download | emacs-f3b330d6d810be33ddf73e1b5375b602e086497b.tar.gz emacs-f3b330d6d810be33ddf73e1b5375b602e086497b.zip | |
(finder-mode-map): Bind [mouse-2].
(finder-compile-keywords): Match compressed file names, but don't
put compression extension in the output.
(finder-find-library): Deleted.
(finder-commentary): Use locate-library, not finder-find-library.
(finder-mouse-select): New function.
(finder-summary): Mention mouse binding.
(finder-exit): Kill "*Finder Category*" buffer too. Avoid error
from deleting sole window.
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/finder.el | 59 |
1 files changed, 35 insertions, 24 deletions
diff --git a/lisp/finder.el b/lisp/finder.el index 57f5d331b0e..19929e080fb 100644 --- a/lisp/finder.el +++ b/lisp/finder.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; finder.el --- topic & keyword-based code finder | 1 | ;;; finder.el --- topic & keyword-based code finder |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1992 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1992, 1997 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Eric S. Raymond <esr@snark.thyrsus.com> | 5 | ;; Author: Eric S. Raymond <esr@snark.thyrsus.com> |
| 6 | ;; Created: 16 Jun 1992 | 6 | ;; Created: 16 Jun 1992 |
| @@ -87,6 +87,7 @@ | |||
| 87 | (let ((map (make-sparse-keymap))) | 87 | (let ((map (make-sparse-keymap))) |
| 88 | (define-key map " " 'finder-select) | 88 | (define-key map " " 'finder-select) |
| 89 | (define-key map "f" 'finder-select) | 89 | (define-key map "f" 'finder-select) |
| 90 | (define-key map [mouse-2] 'finder-mouse-select) | ||
| 90 | (define-key map "\C-m" 'finder-select) | 91 | (define-key map "\C-m" 'finder-select) |
| 91 | (define-key map "?" 'finder-summary) | 92 | (define-key map "?" 'finder-summary) |
| 92 | (define-key map "q" 'finder-exit) | 93 | (define-key map "q" 'finder-exit) |
| @@ -117,7 +118,12 @@ arguments compiles from `load-path'." | |||
| 117 | (lambda (d) | 118 | (lambda (d) |
| 118 | (mapcar | 119 | (mapcar |
| 119 | (lambda (f) | 120 | (lambda (f) |
| 120 | (if (and (string-match "^[^=.].*\\.el$" f) | 121 | (if (and (or (string-match "^[^=].*\\.el$" f) |
| 122 | ;; Allow compressed files also. Fixme: | ||
| 123 | ;; generalize this, especially for | ||
| 124 | ;; MS-DOG-type filenames. | ||
| 125 | (and (string-match "^[^=].*\\.el\\.\\(gz\\|Z\\)$" f) | ||
| 126 | (require 'jka-compr))) | ||
| 121 | (not (member f processed))) | 127 | (not (member f processed))) |
| 122 | (let (summary keystart keywords) | 128 | (let (summary keystart keywords) |
| 123 | (setq processed (cons f processed)) | 129 | (setq processed (cons f processed)) |
| @@ -130,7 +136,10 @@ arguments compiles from `load-path'." | |||
| 130 | (setq summary (lm-synopsis)) | 136 | (setq summary (lm-synopsis)) |
| 131 | (setq keywords (lm-keywords))) | 137 | (setq keywords (lm-keywords))) |
| 132 | (insert | 138 | (insert |
| 133 | (format " (\"%s\"\n " f)) | 139 | (format " (\"%s\"\n " |
| 140 | (if (string-match "\\.\\(gz\\|Z\\)$" f) | ||
| 141 | (file-name-sans-extension f) | ||
| 142 | f))) | ||
| 134 | (prin1 summary (current-buffer)) | 143 | (prin1 summary (current-buffer)) |
| 135 | (insert | 144 | (insert |
| 136 | "\n ") | 145 | "\n ") |
| @@ -215,23 +224,9 @@ arguments compiles from `load-path'." | |||
| 215 | (shrink-window-if-larger-than-buffer) | 224 | (shrink-window-if-larger-than-buffer) |
| 216 | (finder-summary))) | 225 | (finder-summary))) |
| 217 | 226 | ||
| 218 | ;; Search for a file named FILE the same way `load' would search. | ||
| 219 | (defun finder-find-library (file) | ||
| 220 | (if (file-name-absolute-p file) | ||
| 221 | file | ||
| 222 | (let ((dirs load-path) | ||
| 223 | found) | ||
| 224 | (while (and dirs (not found)) | ||
| 225 | (if (file-exists-p (expand-file-name (concat file ".el") (car dirs))) | ||
| 226 | (setq found (expand-file-name file (car dirs))) | ||
| 227 | (if (file-exists-p (expand-file-name file (car dirs))) | ||
| 228 | (setq found (expand-file-name file (car dirs))))) | ||
| 229 | (setq dirs (cdr dirs))) | ||
| 230 | found))) | ||
| 231 | |||
| 232 | (defun finder-commentary (file) | 227 | (defun finder-commentary (file) |
| 233 | (interactive) | 228 | (interactive) |
| 234 | (let* ((str (lm-commentary (finder-find-library file)))) | 229 | (let* ((str (lm-commentary (locate-library file)))) |
| 235 | (if (null str) | 230 | (if (null str) |
| 236 | (error "Can't find any Commentary section")) | 231 | (error "Can't find any Commentary section")) |
| 237 | (pop-to-buffer "*Finder*") | 232 | (pop-to-buffer "*Finder*") |
| @@ -261,9 +256,17 @@ arguments compiles from `load-path'." | |||
| 261 | (defun finder-select () | 256 | (defun finder-select () |
| 262 | (interactive) | 257 | (interactive) |
| 263 | (let ((key (finder-current-item))) | 258 | (let ((key (finder-current-item))) |
| 264 | (if (string-match "\\.el$" key) | 259 | (if (string-match "\\.el$" key) |
| 265 | (finder-commentary key) | 260 | (finder-commentary key) |
| 266 | (finder-list-matches key)))) | 261 | (finder-list-matches key)))) |
| 262 | |||
| 263 | (defun finder-mouse-select (event) | ||
| 264 | (interactive "e") | ||
| 265 | (save-excursion | ||
| 266 | (set-buffer (window-buffer (posn-window (event-start event)))) | ||
| 267 | (goto-char (posn-point (event-start event))) | ||
| 268 | (let ((key (finder-current-item))) | ||
| 269 | (finder-select)))) | ||
| 267 | 270 | ||
| 268 | (defun finder-by-keyword () | 271 | (defun finder-by-keyword () |
| 269 | "Find packages matching a given keyword." | 272 | "Find packages matching a given keyword." |
| @@ -289,13 +292,21 @@ arguments compiles from `load-path'." | |||
| 289 | (interactive) | 292 | (interactive) |
| 290 | (message "%s" | 293 | (message "%s" |
| 291 | (substitute-command-keys | 294 | (substitute-command-keys |
| 292 | "\\<finder-mode-map>\\[finder-select] = select, \\[finder-list-keywords] = to finder directory, \\[finder-exit] = quit, \\[finder-summary] = help"))) | 295 | "\\<finder-mode-map>\\[finder-select] = select, \\[finder-mouse-select] = select, \\[finder-list-keywords] = to finder directory, \\[finder-exit] = quit, \\[finder-summary] = help"))) |
| 293 | 296 | ||
| 294 | (defun finder-exit () | 297 | (defun finder-exit () |
| 295 | "Exit Finder mode and kill the buffer" | 298 | "Exit Finder mode and kill the buffer" |
| 296 | (interactive) | 299 | (interactive) |
| 297 | (delete-window) | 300 | (condition-case nil ; might be sole window |
| 298 | (kill-buffer "*Finder*")) | 301 | (delete-window) |
| 302 | (error nil)) | ||
| 303 | ;; Can happen in either buffer -- kill each of the two that exists | ||
| 304 | (condition-case nil | ||
| 305 | (kill-buffer "*Finder*") | ||
| 306 | (error nil)) | ||
| 307 | (condition-case nil | ||
| 308 | (kill-buffer "*Finder Category*") | ||
| 309 | (error nil))) | ||
| 299 | 310 | ||
| 300 | (provide 'finder) | 311 | (provide 'finder) |
| 301 | 312 | ||