]> git.eshelyaron.com Git - emacs.git/commitdiff
* finder.el: Remove TODO tasks.
authorJuri Linkov <juri@jurta.org>
Tue, 23 Mar 2010 07:11:50 +0000 (09:11 +0200)
committerJuri Linkov <juri@jurta.org>
Tue, 23 Mar 2010 07:11:50 +0000 (09:11 +0200)
* 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.

lisp/ChangeLog
lisp/finder.el
lisp/info.el

index cf6b4d3496ff3f325d82b553c8327ec9825608e2..77b970789ff0cc57dda13a25661c7da359f09979 100644 (file)
@@ -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'.
index 358c0a1fee229fa11d374feead4f3131f2b8672a..2de8e2e01a725c60e16626557534cff728fa112a 100644 (file)
 
 ;; 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:
 
index 4f9c5a0da712c397859d76171ea5b941db1d80fe..df892d499dc703dedb493e075a5d5767667304cd 100644 (file)
@@ -3362,7 +3362,8 @@ Build a menu of the possible matches."
         (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 @@ Build a menu of the possible matches."
                       (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 @@ Build a menu of the possible matches."
           (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 @@ Build a menu of the possible matches."
     (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")))
+
 \f
 (defun Info-undefined ()
   "Make command be undefined in Info."