Commit f3b330d6 authored by Karl Heuer's avatar Karl Heuer
Browse files

(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.
parent 274c59c9
;;; 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*")
......@@ -265,6 +260,14 @@ arguments compiles from `load-path'."
(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."
(interactive)
......@@ -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)
(condition-case nil ; might be sole window
(delete-window)
(kill-buffer "*Finder*"))
(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)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment