Mercurial > emacs
changeset 107467:f0ec21d379ff
* finder.el: Remove TODO tasks.
* info.el (Info-finder-find-node): Add node "all"
with all package info. Handle a list of multiple keywords
separated by comma.
(info-finder): In interactive use with a prefix argument,
use `completing-read-multiple' to read a list of keywords
separated by comma.
author | Juri Linkov <juri@jurta.org> |
---|---|
date | Tue, 23 Mar 2010 09:11:50 +0200 |
parents | 0eb017273376 |
children | 008c1c06812b |
files | lisp/ChangeLog lisp/finder.el lisp/info.el |
diffstat | 3 files changed, 57 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Mon Mar 22 19:47:41 2010 -0700 +++ b/lisp/ChangeLog Tue Mar 23 09:11:50 2010 +0200 @@ -1,3 +1,14 @@ +2010-03-23 Juri Linkov <juri@jurta.org> + + * finder.el: Remove TODO tasks. + + * info.el (Info-finder-find-node): Add node "all" + with all package info. Handle a list of multiple keywords + separated by comma. + (info-finder): In interactive use with a prefix argument, + use `completing-read-multiple' to read a list of keywords + separated by comma. + 2010-03-23 Stefan Monnier <monnier@iro.umontreal.ca> Add a new completion style `substring'.
--- a/lisp/finder.el Mon Mar 22 19:47:41 2010 -0700 +++ b/lisp/finder.el Tue Mar 23 09:11:50 2010 +0200 @@ -27,12 +27,6 @@ ;; This mode uses the Keywords library header to provide code-finding ;; services by keyword. -;; -;; Things to do: -;; 1. Support multiple keywords per search. This could be extremely hairy; -;; there doesn't seem to be any way to get completing-read to exit on -;; an EOL with no substring pending, which is what we'd want to end the loop. -;; 2. Search by string in synopsis line? ;;; Code:
--- a/lisp/info.el Mon Mar 22 19:47:41 2010 -0700 +++ b/lisp/info.el Tue Mar 23 09:11:50 2010 +0200 @@ -3362,7 +3362,8 @@ (insert (format "* %-14s %s.\n" (concat (symbol-name keyword) "::") (cdr assoc))))) - (cons '(unknown . "unknown keywords") + (append '((all . "All package info") + (unknown . "unknown keywords")) finder-known-keywords))) ((equal nodename "unknown") ;; Display unknown keywords @@ -3377,6 +3378,22 @@ (concat (symbol-name (car assoc)) "::") (cdr assoc)))) (finder-unknown-keywords))) + ((equal nodename "all") + ;; Display all package info. + (insert (format "\n\^_\nFile: %s, Node: %s, Up: Top\n\n" + Info-finder-file nodename)) + (insert "Finder Package Info\n") + (insert "*******************\n\n") + (mapc (lambda (package) + (insert (format "%s - %s\n" + (format "*Note %s::" (nth 0 package)) + (nth 1 package))) + (insert "Keywords: " + (mapconcat (lambda (keyword) + (format "*Note %s::" (symbol-name keyword))) + (nth 2 package) ", ") + "\n\n")) + finder-package-info)) ((string-match-p "\\.el\\'" nodename) ;; Display commentary section (insert (format "\n\^_\nFile: %s, Node: %s, Up: Top\n\n" @@ -3401,6 +3418,7 @@ (buffer-string)))))) (t ;; Display packages that match the keyword + ;; or the list of keywords separated by comma. (insert (format "\n\^_\nFile: %s, Node: %s, Up: Top\n\n" Info-finder-file nodename)) (insert "Finder Packages\n") @@ -3408,21 +3426,39 @@ (insert "The following packages match the keyword `" nodename "':\n\n") (insert "* Menu:\n\n") - (let ((id (intern nodename))) + (let ((keywords + (mapcar 'intern (if (string-match-p "," nodename) + (split-string nodename ",[ \t\n]*" t) + (list nodename))))) (mapc - (lambda (x) - (when (memq id (cadr (cdr x))) + (lambda (package) + (unless (memq nil (mapcar (lambda (k) (memq k (nth 2 package))) + keywords)) (insert (format "* %-16s %s.\n" - (concat (car x) "::") - (cadr x))))) + (concat (nth 0 package) "::") + (nth 1 package))))) finder-package-info))))) ;;;###autoload -(defun info-finder () - "Display descriptions of the keywords in the Finder virtual manual." - (interactive) +(defun info-finder (&optional keywords) + "Display descriptions of the keywords in the Finder virtual manual. +In interactive use, a prefix argument directs this command to read +a list of keywords separated by comma. After that, it displays a node +with a list packages that contain all specified keywords." + (interactive + (when current-prefix-arg + (require 'finder) + (list + (completing-read-multiple + "Keywords (separated by comma): " + (mapcar 'symbol-name (mapcar 'car (append finder-known-keywords + (finder-unknown-keywords)))) + nil t)))) (require 'finder) - (Info-find-node Info-finder-file "Top")) + (if keywords + (Info-find-node Info-finder-file (mapconcat 'identity keywords ", ")) + (Info-find-node Info-finder-file "Top"))) + (defun Info-undefined () "Make command be undefined in Info."