# HG changeset patch # User Karl Heuer # Date 875604988 0 # Node ID 09bc233eb0183abd4479e696b8f465544b66dc7b # Parent 173f2683e3c4adc1bbc2ad6f3a6a46c26ade3ded (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. diff -r 173f2683e3c4 -r 09bc233eb018 lisp/finder.el --- a/lisp/finder.el Tue Sep 30 07:33:35 1997 +0000 +++ b/lisp/finder.el Tue Sep 30 07:36:28 1997 +0000 @@ -1,6 +1,6 @@ ;;; finder.el --- topic & keyword-based code finder -;; Copyright (C) 1992 Free Software Foundation, Inc. +;; Copyright (C) 1992, 1997 Free Software Foundation, Inc. ;; Author: Eric S. Raymond ;; Created: 16 Jun 1992 @@ -87,6 +87,7 @@ (let ((map (make-sparse-keymap))) (define-key map " " 'finder-select) (define-key map "f" 'finder-select) + (define-key map [mouse-2] 'finder-mouse-select) (define-key map "\C-m" 'finder-select) (define-key map "?" 'finder-summary) (define-key map "q" 'finder-exit) @@ -117,7 +118,12 @@ (lambda (d) (mapcar (lambda (f) - (if (and (string-match "^[^=.].*\\.el$" f) + (if (and (or (string-match "^[^=].*\\.el$" f) + ;; Allow compressed files also. Fixme: + ;; generalize this, especially for + ;; MS-DOG-type filenames. + (and (string-match "^[^=].*\\.el\\.\\(gz\\|Z\\)$" f) + (require 'jka-compr))) (not (member f processed))) (let (summary keystart keywords) (setq processed (cons f processed)) @@ -130,7 +136,10 @@ (setq summary (lm-synopsis)) (setq keywords (lm-keywords))) (insert - (format " (\"%s\"\n " f)) + (format " (\"%s\"\n " + (if (string-match "\\.\\(gz\\|Z\\)$" f) + (file-name-sans-extension f) + f))) (prin1 summary (current-buffer)) (insert "\n ") @@ -215,23 +224,9 @@ (shrink-window-if-larger-than-buffer) (finder-summary))) -;; Search for a file named FILE the same way `load' would search. -(defun finder-find-library (file) - (if (file-name-absolute-p file) - file - (let ((dirs load-path) - found) - (while (and dirs (not found)) - (if (file-exists-p (expand-file-name (concat file ".el") (car dirs))) - (setq found (expand-file-name file (car dirs))) - (if (file-exists-p (expand-file-name file (car dirs))) - (setq found (expand-file-name file (car dirs))))) - (setq dirs (cdr dirs))) - found))) - (defun finder-commentary (file) (interactive) - (let* ((str (lm-commentary (finder-find-library file)))) + (let* ((str (lm-commentary (locate-library file)))) (if (null str) (error "Can't find any Commentary section")) (pop-to-buffer "*Finder*") @@ -261,9 +256,17 @@ (defun finder-select () (interactive) (let ((key (finder-current-item))) - (if (string-match "\\.el$" key) - (finder-commentary key) - (finder-list-matches key)))) + (if (string-match "\\.el$" key) + (finder-commentary key) + (finder-list-matches key)))) + +(defun finder-mouse-select (event) + (interactive "e") + (save-excursion + (set-buffer (window-buffer (posn-window (event-start event)))) + (goto-char (posn-point (event-start event))) + (let ((key (finder-current-item))) + (finder-select)))) (defun finder-by-keyword () "Find packages matching a given keyword." @@ -289,13 +292,21 @@ (interactive) (message "%s" (substitute-command-keys - "\\\\[finder-select] = select, \\[finder-list-keywords] = to finder directory, \\[finder-exit] = quit, \\[finder-summary] = help"))) + "\\\\[finder-select] = select, \\[finder-mouse-select] = select, \\[finder-list-keywords] = to finder directory, \\[finder-exit] = quit, \\[finder-summary] = help"))) (defun finder-exit () "Exit Finder mode and kill the buffer" (interactive) - (delete-window) - (kill-buffer "*Finder*")) + (condition-case nil ; might be sole window + (delete-window) + (error nil)) + ;; Can happen in either buffer -- kill each of the two that exists + (condition-case nil + (kill-buffer "*Finder*") + (error nil)) + (condition-case nil + (kill-buffer "*Finder Category*") + (error nil))) (provide 'finder)