Mercurial > emacs
diff lisp/finder.el @ 2228:d40154ca6354
(finder-compile-keywords) Treat nil in a path argument as $PWD.
(finder-by-keyword) Handle LFD as input gracefully.
author | Eric S. Raymond <esr@snark.thyrsus.com> |
---|---|
date | Wed, 17 Mar 1993 14:26:35 +0000 |
parents | 2596132752ff |
children | 2c7997f249eb |
line wrap: on
line diff
--- a/lisp/finder.el Wed Mar 17 14:01:56 1993 +0000 +++ b/lisp/finder.el Wed Mar 17 14:26:35 1993 +0000 @@ -79,42 +79,46 @@ Optional arguments are a list of Emacs Lisp directories to compile from; no arguments compiles from `load-path'." (save-excursion - (find-file "finder-inf.el") - (erase-buffer) - (insert ";;; Don't edit this file. It's generated by finder.el\n\n") - (insert "\n(setq finder-package-info '(\n") - (mapcar - (function (lambda (d) - (mapcar - (function (lambda (f) - (if (string-match "\\.el$" f) - (let (summary keystart) - (save-excursion - (set-buffer (get-buffer-create "*finder-scratch*")) - (erase-buffer) - (insert-file-contents - (concat (file-name-as-directory d) f)) - (setq summary (lm-synopsis)) - (setq keywords (lm-keywords))) - (insert - (format " (\"%s\"\n " f)) - (prin1 summary (current-buffer)) - (insert - "\n ") - (setq keystart (point)) - (insert - (if keywords (format "(%s)" keywords) "nil") - ")\n") - (subst-char-in-region keystart (point) ?, ? ) - ) - ))) - (directory-files (or d "."))) - )) - (or dirs load-path)) - (insert "))\n\n(provide 'finder-inf)\n") - (kill-buffer "*finder-scratch*") - (basic-save-buffer) - )) + (let ((processed nil)) + (find-file "finder-inf.el") + (erase-buffer) + (insert ";;; Don't edit this file. It's generated by finder.el\n\n") + (insert "\n(setq finder-package-info '(\n") + (mapcar + (function + (lambda (d) + (mapcar + (function + (lambda (f) + (if (and (string-match "\\.el$" f) (not (member f processed))) + (let (summary keystart) + (setq processed (cons f processed)) + (save-excursion + (set-buffer (get-buffer-create "*finder-scratch*")) + (erase-buffer) + (insert-file-contents + (concat (file-name-as-directory (or d ".")) f)) + (setq summary (lm-synopsis)) + (setq keywords (lm-keywords))) + (insert + (format " (\"%s\"\n " f)) + (prin1 summary (current-buffer)) + (insert + "\n ") + (setq keystart (point)) + (insert + (if keywords (format "(%s)" keywords) "nil") + ")\n") + (subst-char-in-region keystart (point) ?, ? ) + ) + ))) + (directory-files (or d "."))) + )) + (or dirs load-path)) + (insert "))\n\n(provide 'finder-inf)\n") + (kill-buffer "*finder-scratch*") + (basic-save-buffer) + ))) ;;; Now the retrieval code @@ -132,25 +136,29 @@ (goto-char (point-min)) (let (key (known (mapcar (function (lambda (x) (car x))) finder-known-keywords))) - (let ((key (intern (completing-read + (let ((key (completing-read "Package keyword: " (vconcat known) (function (lambda (arg) (memq arg known))) - t)))) + t)) + id) (erase-buffer) - (insert - "The following packages match the keyword `" (symbol-name key) "':\n\n") - (mapcar - (function (lambda (x) - (if (memq key (car (cdr (cdr x)))) - (progn - (insert (car x)) - (insert-at-column 16 (car (cdr x)) "\n") - )) - )) - finder-package-info) - (goto-char (point-min)) - ))) + (if (equal key "") + (delete-window (get-buffer-window "*Help*")) + (setq id (intern key)) + (insert + "The following packages match the keyword `" key "':\n\n") + (mapcar + (function (lambda (x) + (if (memq id (car (cdr (cdr x)))) + (progn + (insert (car x)) + (insert-at-column 16 (car (cdr x)) "\n") + )) + )) + finder-package-info) + (goto-char (point-min)) + )))) (provide 'finder)