[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] scratch/gnus-search 371748d 22/30: Switch base massage-out
From: |
Eric Abrahamsen |
Subject: |
[Emacs-diffs] scratch/gnus-search 371748d 22/30: Switch base massage-output method for indexed search engines |
Date: |
Thu, 1 Jun 2017 03:50:23 -0400 (EDT) |
branch: scratch/gnus-search
commit 371748dbdc0917caa78c020175aac99f12455183
Author: Eric Abrahamsen <address@hidden>
Commit: Eric Abrahamsen <address@hidden>
Switch base massage-output method for indexed search engines
* lisp/gnus/gnus-search.el (gnus-search-indexed-massage-output): I had
been using the namazu version, which was wrong -- that's very
namazue specific. Use the notmuch version: the base method should
handle plain lists of absolute filenames.
---
lisp/gnus/gnus-search.el | 115 +++++++++++++++++++++++------------------------
1 file changed, 57 insertions(+), 58 deletions(-)
diff --git a/lisp/gnus/gnus-search.el b/lisp/gnus/gnus-search.el
index d43b0dc..d970131 100644
--- a/lisp/gnus/gnus-search.el
+++ b/lisp/gnus/gnus-search.el
@@ -1426,18 +1426,12 @@ Returns a vector of [group name, file name, score]
vectors."
(cl-defmethod gnus-search-indexed-massage-output ((engine gnus-search-indexed)
server &optional groups)
- "Common method for massaging filenames returned by indexed
-search engines.
+ "Filter search results of a locally-indexed search engine.
-This method assumes that the engine returns a plain list of
-absolute filepaths to standard out."
- ;; This method was originally the namazu-specific method. I'm
- ;; almost certain that all the engines can use this same method
- ;; (meaning some fairly significant code reduction), but I haven't
- ;; gone and tested them all yet.
-
- ;; What if the server backend is nnml, and/or uses mboxes?
- (let ((article-pattern (if (string-match "\\'nnmaildir:"
+This base implementation works for any engine that returns its
+results as a simple list of absolute file names. Engines that
+return more information have their own methods."
+ (let ((article-pattern (if (string-match "\\`nnmaildir:"
(gnus-group-server server))
":[0-9]+"
"^[0-9]+$"))
@@ -1447,21 +1441,23 @@ absolute filepaths to standard out."
(mapcar
(lambda (x) (gnus-group-real-name x))
groups))))
- score group article artlist)
+ artno dirnam filenam artlist)
(goto-char (point-min))
- (while (re-search-forward
- "^\\([0-9,]+\\.\\).*\\((score: \\([0-9]+\\)\\))\n\\([^ ]+\\)"
- nil t)
- (setq score (match-string 3)
- group (file-name-directory (match-string 4))
- article (file-name-nondirectory (match-string 4)))
+ (while (not (eobp))
+ (setq filenam (buffer-substring-no-properties (line-beginning-position)
+ (line-end-position))
+ artno (file-name-nondirectory filenam)
+ dirnam (file-name-directory filenam))
+ (forward-line 1)
- ;; make sure article and group is sane
- (when (and (string-match article-pattern article)
- (not (null group))
- (or (null group-regexp)
- (string-match-p group-regexp group)))
- (gnus-search-add-result group article score prefix server artlist)))
+ ;; don't match directories
+ (when (string-match article-pattern artno)
+ (when (not (null dirnam))
+
+ ;; maybe limit results to matching groups.
+ (when (or (not groups)
+ (string-match-p group-regexp dirnam))
+ (gnus-search-add-result dirnam artno "" prefix server artlist)))))
artlist))
;; Swish++
@@ -1610,10 +1606,46 @@ absolute filepaths to standard out."
,index-dir ; index directory
))))
+(cl-defmethod gnus-search-indexed-massage-output ((engine gnus-search-namazu)
+ server &optional groups)
+ "Common method for massaging filenames returned by indexed
+search engines.
+
+This method assumes that the engine returns a plain list of
+absolute filepaths to standard out."
+
+ ;; What if the server backend is nnml, and/or uses mboxes?
+ (let ((article-pattern (if (string-match "\\'nnmaildir:"
+ (gnus-group-server server))
+ ":[0-9]+"
+ "^[0-9]+$"))
+ (prefix (slot-value engine 'prefix))
+ (group-regexp (when groups
+ (regexp-opt
+ (mapcar
+ (lambda (x) (gnus-group-real-name x))
+ groups))))
+ score group article artlist)
+ (goto-char (point-min))
+ (while (re-search-forward
+ "^\\([0-9,]+\\.\\).*\\((score: \\([0-9]+\\)\\))\n\\([^ ]+\\)"
+ nil t)
+ (setq score (match-string 3)
+ group (file-name-directory (match-string 4))
+ article (file-name-nondirectory (match-string 4)))
+
+ ;; make sure article and group is sane
+ (when (and (string-match article-pattern article)
+ (not (null group))
+ (or (null group-regexp)
+ (string-match-p group-regexp group)))
+ (gnus-search-add-result group article score prefix server artlist)))
+ artlist))
+
;;; Notmuch interface
(cl-defmethod gnus-search-transform ((_engine gnus-search-notmuch)
- (_query null))
+ (_query null))
"*")
(cl-defmethod gnus-search-transform-expression ((engine gnus-search-notmuch)
@@ -1686,39 +1718,6 @@ absolute filepaths to standard out."
,qstring
))))
-(cl-defmethod gnus-search-indexed-massage-output ((engine gnus-search-notmuch)
- server &optional groups)
- ;; The results are output in the format of:
- ;; absolute-path-name
- (let ((article-pattern (if (string-match "\\`nnmaildir:"
- (gnus-group-server server))
- ":[0-9]+"
- "^[0-9]+$"))
- (prefix (slot-value engine 'prefix))
- (group-regexp (when groups
- (regexp-opt
- (mapcar
- (lambda (x) (gnus-group-real-name x))
- groups))))
- artno dirnam filenam artlist)
- (goto-char (point-min))
- (while (not (eobp))
- (setq filenam (buffer-substring-no-properties (line-beginning-position)
- (line-end-position))
- artno (file-name-nondirectory filenam)
- dirnam (file-name-directory filenam))
- (forward-line 1)
-
- ;; don't match directories
- (when (string-match article-pattern artno)
- (when (not (null dirnam))
-
- ;; maybe limit results to matching groups.
- (when (or (not groups)
- (string-match-p group-regexp dirnam))
- (gnus-search-add-result dirnam artno "" prefix server artlist)))))
- artlist))
-
;;; Mairix interface
;; See the Gnus manual for why mairix searching is a bit weird.
- [Emacs-diffs] scratch/gnus-search 9e61dd3 16/30: Find-grep can only search on plain strings, (continued)
- [Emacs-diffs] scratch/gnus-search 9e61dd3 16/30: Find-grep can only search on plain strings, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search cc541ba 14/30: Missing a base implementation of transform-expression for strings, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search 31514a0 04/30: Add function gnus-search-prepare-query, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search 32a328f 17/30: Fix for parsing delimited strings, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search b086d9a 07/30: Handle regexp and wildcard search terms, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search a4fe929 18/30: Notmuch query transformation improvements, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search 2ae2549 24/30: Fix bum namazu search command, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search 37e044f 19/30: Don't do any sorting at all in gnus-search, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search 9c57f16 15/30: Some refactoring of gnus-search-run-query, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search 09aff52 26/30: Do result limiting in the indexed engine process, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search 371748d 22/30: Switch base massage-output method for indexed search engines,
Eric Abrahamsen <=
- [Emacs-diffs] scratch/gnus-search 6a4dc13 09/30: WIP on documentation, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search 79b5546 25/30: Add gnus-search-grep abstract engine, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search 9eebc88 21/30: More comments, small improvements, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search e39079c 08/30: Remove Hyrex search engine, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search fcf327b 10/30: Add Mairix search engine, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search 7f21251 29/30: Don't parse the address: key, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search 64bf8de 27/30: Messed up rebase, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search 8ea8644 23/30: Refactor parsing of indexed search engine output, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search a43c410 13/30: Refactor parsing/no parsing of queries, Eric Abrahamsen, 2017/06/01
- [Emacs-diffs] scratch/gnus-search a1cfb38 01/30: WIP on a generalized search query language for Gnus, Eric Abrahamsen, 2017/06/01