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/
next prev parent 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
* 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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.