]> git.eshelyaron.com Git - emacs.git/commitdiff
(finder-mode-map): Bind [mouse-2].
authorKarl Heuer <kwzh@gnu.org>
Tue, 30 Sep 1997 07:36:28 +0000 (07:36 +0000)
committerKarl Heuer <kwzh@gnu.org>
Tue, 30 Sep 1997 07:36:28 +0000 (07:36 +0000)
(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.

lisp/finder.el

index 57f5d331b0e32c32fd7507f64276c7bedcafd6dd..19929e080fb02a62add1915d21164b8c2e11b43d 100644 (file)
@@ -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 <esr@snark.thyrsus.com>
 ;; 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 @@ arguments compiles from `load-path'."
        (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 @@ arguments compiles from `load-path'."
                    (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 @@ arguments compiles from `load-path'."
     (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 @@ arguments compiles from `load-path'."
 (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 @@ arguments compiles from `load-path'."
   (interactive)
   (message "%s"
    (substitute-command-keys
-    "\\<finder-mode-map>\\[finder-select] = select, \\[finder-list-keywords] = to finder directory, \\[finder-exit] = quit, \\[finder-summary] = help")))
+    "\\<finder-mode-map>\\[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)