unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Juri Linkov <juri@jurta.org>
To: emacs-devel@gnu.org
Subject: Re: Keywords
Date: Mon, 15 Mar 2010 23:33:03 +0200	[thread overview]
Message-ID: <87fx41uwl4.fsf@mail.jurta.org> (raw)
In-Reply-To: <87pr37ka78.fsf@mail.jurta.org> (Juri Linkov's message of "Sun, 14 Mar 2010 23:33:55 +0200")

There are remaining two tasks in finder.el that I think would be useful:

;; 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?

The first task is easy to implement with the help of
`completing-read-multiple'.

The second task is also easy to implement by just listing all packages
with synopsis lines and keywords thus allowing to search a string
simply using Isearch.

=== modified file 'lisp/finder.el'
--- lisp/finder.el	2010-03-14 19:59:20 +0000
+++ lisp/finder.el	2010-03-15 21:32:35 +0000
@@ -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:
 

=== modified file 'lisp/info.el'
--- lisp/info.el	2010-03-14 16:59:20 +0000
+++ lisp/info.el	2010-03-15 21:31:05 +0000
@@ -3390,7 +3390,8 @@ (defun Info-finder-find-node (filename n
 	 (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
@@ -3405,6 +3406,22 @@ (defun Info-finder-find-node (filename n
 		       (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"
@@ -3429,6 +3446,7 @@ (defun Info-finder-find-node (filename n
 	   (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")
@@ -3436,21 +3454,39 @@ (defun Info-finder-find-node (filename n
     (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."


-- 
Juri Linkov
http://www.jurta.org/emacs/




  reply	other threads:[~2010-03-15 21:33 UTC|newest]

Thread overview: 102+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-10  2:22 Emacs-23 release branch Stefan Monnier
2010-03-10  4:09 ` Chong Yidong
2010-03-10  5:18   ` Jason Rumney
2010-03-10 15:23     ` Chong Yidong
2010-03-10 23:11       ` Jason Rumney
2010-03-10 23:25         ` Lennart Borgman
2010-03-10  5:19   ` Stefan Monnier
2010-03-10  5:58   ` joakim
2010-03-10 13:30     ` Ted Zlatanov
2010-03-10  7:55   ` Ulrich Mueller
2010-03-10 15:24     ` Chong Yidong
2010-03-10 17:23   ` Eli Zaretskii
2010-03-10 17:34     ` Chong Yidong
2010-03-10 17:56       ` Eli Zaretskii
2010-03-10 18:15         ` Chong Yidong
2010-03-10 17:37     ` David Kastrup
2010-03-10 17:58       ` Eli Zaretskii
2010-03-10 19:23       ` Stefan Monnier
2010-03-10 19:41         ` David Kastrup
2010-03-10 21:53         ` Eli Zaretskii
2010-03-11  3:15           ` Stefan Monnier
2010-03-11  4:22             ` Eli Zaretskii
2010-03-11 14:00               ` Stefan Monnier
2010-03-11 18:00                 ` Eli Zaretskii
2010-03-11 19:04                   ` Stefan Monnier
2010-03-11 19:53                     ` Eli Zaretskii
2010-03-11 22:09                       ` Andreas Schwab
2010-03-11 22:19                       ` James Cloos
2010-03-12  8:41                         ` bidi branch (was: Emacs-23 release branch) Eli Zaretskii
2010-03-13 18:16                           ` bidi branch James Cloos
2010-03-13 19:03                             ` Eli Zaretskii
2010-03-13 21:33                               ` Eli Zaretskii
2010-03-13 21:39                                 ` Drew Adams
2010-03-15 14:10                               ` Stephen J. Turnbull
2010-03-11 22:45                       ` Emacs-23 release branch Stefan Monnier
2010-03-12  8:46                         ` bidi branch Eli Zaretskii
2010-03-12  9:16                         ` Emacs-23 release branch Andreas Schwab
2010-03-12 15:32                           ` Stefan Monnier
2010-03-10 21:22   ` Michael Albinus
2010-03-11  3:20     ` Stefan Monnier
2010-03-11  4:27       ` Michael Albinus
2010-03-11 14:04         ` Stefan Monnier
2010-03-11 14:30           ` Michael Albinus
2010-03-11 15:14             ` Stefan Monnier
2010-03-11 16:02               ` Michael Albinus
2010-03-11 16:07                 ` Chong Yidong
2010-03-11 16:10                   ` Michael Albinus
2010-03-12 15:28                 ` Ted Zlatanov
2010-03-12 15:31                   ` Ted Zlatanov
2010-03-12 16:36                     ` Keywords (was: Emacs-23 release branch) Juri Linkov
2010-03-12 16:32             ` Emacs-23 release branch Juri Linkov
2010-03-12 18:03               ` Stefan Monnier
2010-03-13 20:40                 ` secrets.el (was: Emacs-23 release branch) Michael Albinus
2010-03-14 16:37                   ` secrets.el Stefan Monnier
2010-03-20 19:32                   ` secrets.el Ted Zlatanov
2010-03-11 20:48           ` Keywords (Re: Emacs-23 release branch) Juri Linkov
2010-03-11 21:45             ` Keywords Juri Linkov
2010-03-12  1:30               ` Keywords Stefan Monnier
2010-03-14 21:33                 ` Keywords Juri Linkov
2010-03-15 21:33                   ` Juri Linkov [this message]
2010-03-19 17:25                     ` finder.el UI (was: Keywords) Ted Zlatanov
2010-03-19 22:48                       ` Juri Linkov
2010-03-22 13:30                         ` finder.el UI Ted Zlatanov
2010-03-22 14:19                           ` Stefan Monnier
2010-03-22 14:29                             ` Ted Zlatanov
2010-03-22 15:08                               ` Juri Linkov
2010-03-22 16:33                                 ` Ted Zlatanov
2010-03-22 16:09                               ` Stefan Monnier
2010-03-22 16:36                                 ` Ted Zlatanov
2010-03-22 15:07                             ` Juri Linkov
2010-03-22 17:13                             ` Drew Adams
2010-03-22 15:04                           ` Juri Linkov
2010-03-14 21:34   ` Customize UI (was: Emacs-23 release branch) Juri Linkov
2010-03-15  1:05     ` Customize UI Miles Bader
2010-03-15  1:34       ` Juri Linkov
2010-03-15  3:32         ` Miles Bader
2010-03-15 17:17     ` Chong Yidong
2010-03-15 17:34       ` Lennart Borgman
2010-03-15 21:34       ` Juri Linkov
2010-03-19 17:21     ` Ted Zlatanov
2010-03-10 17:21 ` Emacs-23 release branch Eli Zaretskii
2010-03-10 17:48   ` Sven Joachim
2010-03-10 18:00     ` Eli Zaretskii
2010-03-10 19:30     ` Chad Brown
2010-03-10 19:36       ` Óscar Fuentes
2010-03-10 19:55         ` Chad Brown
2010-03-10 19:47       ` Sven Joachim
2010-03-11  3:16         ` Stefan Monnier
2010-03-11  7:42           ` Sven Joachim
2010-03-11 13:35             ` Óscar Fuentes
2010-03-11 14:02             ` Stefan Monnier
2010-03-10 17:48 ` Eli Zaretskii
2010-03-10 17:59   ` Eli Zaretskii
2010-03-10 19:31     ` Stefan Monnier
2010-03-10 21:55       ` Eli Zaretskii
2010-03-11  3:17         ` Stefan Monnier
2010-03-10 19:44     ` Óscar Fuentes
2010-03-10 22:05       ` Eli Zaretskii
2010-03-10 22:19         ` Óscar Fuentes
2010-03-11  4:21           ` Eli Zaretskii
2010-03-11 13:42             ` Óscar Fuentes
2010-03-11 14:08             ` Stefan Monnier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87fx41uwl4.fsf@mail.jurta.org \
    --to=juri@jurta.org \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).