changeset 111818:6da5e88812e5

nnir.el: Rearrange code to allow macros to be autoloaded by gnus-sum.el. * nnir.el: Rearrange code to allow macros to be autoloaded by gnus-sum.el. (nnir-retrieve-headers-override-function): Make this variable customizable. (nnir-retrieve-headers): Remove obsolete subject-mangling code.
author Chong Yidong <cyd@stupidchicken.com>
date Fri, 03 Dec 2010 17:06:51 -0500
parents 11c12bf13038
children 03dcd8e4c9c7
files lisp/gnus/ChangeLog lisp/gnus/gnus-sum.el lisp/gnus/nnir.el
diffstat 3 files changed, 133 insertions(+), 120 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/gnus/ChangeLog	Fri Dec 03 17:05:02 2010 -0500
+++ b/lisp/gnus/ChangeLog	Fri Dec 03 17:06:51 2010 -0500
@@ -1,3 +1,14 @@
+2010-12-03  Andrew Cohen  <cohen@andy.bu.edu>
+
+	* nnir.el: Rearrange code to allow macros to be autoloaded by
+	gnus-sum.el.
+	(nnir-retrieve-headers-override-function): Make this variable
+	customizable.
+	(nnir-retrieve-headers): Remove obsolete subject-mangling code.
+
+	* gnus-sum.el (nnir-article-group,nnir-article-rsv): Autoload macros
+	from nnir.el.
+
 2010-12-03  Julien Danjou  <julien@danjou.info>
 
 	* gnus-demon.el (gnus-demon-init): Fix time computing when time is nil.
--- a/lisp/gnus/gnus-sum.el	Fri Dec 03 17:05:02 2010 -0500
+++ b/lisp/gnus/gnus-sum.el	Fri Dec 03 17:06:51 2010 -0500
@@ -60,6 +60,8 @@
 (autoload 'gnus-article-outlook-unwrap-lines "deuglify" nil t)
 (autoload 'gnus-article-outlook-repair-attribution "deuglify" nil t)
 (autoload 'gnus-article-outlook-rearrange-citation "deuglify" nil t)
+(autoload 'nnir-article-rsv "nnir" nil nil 'macro)
+(autoload 'nnir-article-group "nnir" nil nil 'macro)
 
 (defcustom gnus-kill-summary-on-exit t
   "*If non-nil, kill the summary buffer when you exit from it.
--- a/lisp/gnus/nnir.el	Fri Dec 03 17:05:02 2010 -0500
+++ b/lisp/gnus/nnir.el	Fri Dec 03 17:06:51 2010 -0500
@@ -163,7 +163,9 @@
 ;; `nnir-engines'.  Then, users can choose the backend by setting
 ;; `nnir-search-engine' as a server variable.
 
-;;; Setup Code:
+;;; Code:
+
+;;; Setup:
 
 ;; For Emacs <22.2 and XEmacs.
 (eval-and-compile
@@ -171,12 +173,117 @@
 
 (require 'nnoo)
 (require 'gnus-group)
-(require 'gnus-sum)
 (require 'message)
 (require 'gnus-util)
 (eval-when-compile
   (require 'cl))
 
+;;; Internal Variables:
+
+(defvar nnir-current-query nil
+  "Internal: stores current query (= group name).")
+
+(defvar nnir-current-server nil
+  "Internal: stores current server (does it ever change?).")
+
+(defvar nnir-current-group-marked nil
+  "Internal: stores current list of process-marked groups.")
+
+(defvar nnir-artlist nil
+  "Internal: stores search result.")
+
+(defvar nnir-tmp-buffer " *nnir*"
+  "Internal: temporary buffer.")
+
+(defvar nnir-search-history ()
+  "Internal: the history for querying search options in nnir")
+
+(defvar nnir-extra-parms nil
+  "Internal: stores request for extra search parms")
+
+;; Imap variables
+
+(defvar nnir-imap-search-arguments
+  '(("Whole message" . "TEXT")
+    ("Subject" . "SUBJECT")
+    ("To" . "TO")
+    ("From" . "FROM")
+    ("Imap" . ""))
+  "Mapping from user readable keys to IMAP search items for use in nnir")
+
+(defvar nnir-imap-search-other "HEADER %S"
+  "The IMAP search item to use for anything other than
+  `nnir-imap-search-arguments'. By default this is the name of an
+  email header field")
+
+(defvar nnir-imap-search-argument-history ()
+  "The history for querying search options in nnir")
+
+;;; Helper macros
+
+;; Data type article list.
+
+(defmacro nnir-artlist-length (artlist)
+  "Returns number of articles in artlist."
+  `(length ,artlist))
+
+(defmacro nnir-artlist-article (artlist n)
+  "Returns from ARTLIST the Nth artitem (counting starting at 1)."
+  `(when (> ,n 0)
+     (elt ,artlist (1- ,n))))
+
+(defmacro nnir-artitem-group (artitem)
+  "Returns the group from the ARTITEM."
+  `(elt ,artitem 0))
+
+(defmacro nnir-artitem-number (artitem)
+  "Returns the number from the ARTITEM."
+  `(elt ,artitem 1))
+
+(defmacro nnir-artitem-rsv (artitem)
+  "Returns the Retrieval Status Value (RSV, score) from the ARTITEM."
+  `(elt ,artitem 2))
+
+(defmacro nnir-article-group (article)
+  "Returns the group for ARTICLE"
+  `(nnir-artitem-group (nnir-artlist-article nnir-artlist ,article)))
+
+(defmacro nnir-article-number (article)
+  "Returns the number for ARTICLE"
+  `(nnir-artitem-number (nnir-artlist-article nnir-artlist ,article)))
+
+(defmacro nnir-article-rsv (article)
+  "Returns the rsv for ARTICLE"
+  `(nnir-artitem-rsv (nnir-artlist-article nnir-artlist ,article)))
+
+(defsubst nnir-article-ids (article)
+  "Returns the pair `(nnir id . real id)' of ARTICLE"
+  (cons article (nnir-article-number article)))
+
+(defmacro nnir-categorize (sequence keyfunc &optional valuefunc)
+  "Sorts a sequence into categories and returns a list of the form
+`((key1 (element11 element12)) (key2 (element21 element22))'.
+The category key for a member of the sequence is obtained
+as `(keyfunc member)' and the corresponding element is just
+`member'. If `valuefunc' is non-nil, the element of the list
+is `(valuefunc member)'."
+  `(unless (null ,sequence)
+     (let (value)
+       (mapcar
+	(lambda (member)
+	  (let ((y (,keyfunc member))
+		(x ,(if valuefunc
+			`(,valuefunc member)
+		      'member)))
+	    (if (assoc y value)
+		(push x (cadr (assoc y value)))
+	      (push (list y (list x)) value))))
+	,sequence)
+       value)))
+
+;;; Finish setup:
+
+(require 'gnus-sum)
 
 (eval-when-compile
   (autoload 'nnimap-buffer "nnimap")
@@ -223,6 +330,17 @@
   :type '(regexp)
   :group 'nnir)
 
+(defcustom nnir-retrieve-headers-override-function nil
+  "*If non-nil, a function that accepts an article list and group
+and populates the `nntp-server-buffer' with the retrieved
+headers. Must return either 'nov or 'headers indicating the
+retrieved header format.
+
+If this variable is nil, or if the provided function returns nil for a search
+result, `gnus-retrieve-headers' will be called instead."
+  :type '(function)
+  :group 'nnir)
+
 (defcustom nnir-imap-default-search-key "Whole message"
   "*The default IMAP search key for an nnir search. Must be one of
   the keys in `nnir-imap-search-arguments'. To use raw imap queries
@@ -385,24 +503,6 @@
   :type '(directory)
   :group 'nnir)
 
-;; Imap variables
-
-(defvar nnir-imap-search-arguments
-  '(("Whole message" . "TEXT")
-    ("Subject" . "SUBJECT")
-    ("To" . "TO")
-    ("From" . "FROM")
-    ("Imap" . ""))
-  "Mapping from user readable keys to IMAP search items for use in nnir")
-
-(defvar nnir-imap-search-other "HEADER %S"
-  "The IMAP search item to use for anything other than
-  `nnir-imap-search-arguments'. By default this is the name of an
-  email header field")
-
-(defvar nnir-imap-search-argument-history ()
-  "The history for querying search options in nnir")
-
 ;;; Developer Extension Variable:
 
 (defvar nnir-engines
@@ -444,101 +544,6 @@
 
 Add an entry here when adding a new search engine.")
 
-(defvar nnir-retrieve-headers-override-function nil
-  "If non-nil, a function that accepts an article list and group
-and populates the `nntp-server-buffer' with the retrieved
-headers. Must return either 'nov or 'headers indicating the
-retrieved header format.
-
-If this variable is nil, or if the provided function returns nil for a search
-result, `gnus-retrieve-headers' will be called instead.")
-
-;;; Internal Variables:
-
-(defvar nnir-current-query nil
-  "Internal: stores current query (= group name).")
-
-(defvar nnir-current-server nil
-  "Internal: stores current server (does it ever change?).")
-
-(defvar nnir-current-group-marked nil
-  "Internal: stores current list of process-marked groups.")
-
-(defvar nnir-artlist nil
-  "Internal: stores search result.")
-
-(defvar nnir-tmp-buffer " *nnir*"
-  "Internal: temporary buffer.")
-
-(defvar nnir-search-history ()
-  "Internal: the history for querying search options in nnir")
-
-(defvar nnir-extra-parms nil
-  "Internal: stores request for extra search parms")
-
-;;; Code:
-
-;;; Helper macros
-
-;; Data type article list.
-
-(defmacro nnir-artlist-length (artlist)
-  "Returns number of articles in artlist."
-  `(length ,artlist))
-
-(defmacro nnir-artlist-article (artlist n)
-  "Returns from ARTLIST the Nth artitem (counting starting at 1)."
-  `(when (> ,n 0)
-     (elt ,artlist (1- ,n))))
-
-(defmacro nnir-artitem-group (artitem)
-  "Returns the group from the ARTITEM."
-  `(elt ,artitem 0))
-
-(defmacro nnir-artitem-number (artitem)
-  "Returns the number from the ARTITEM."
-  `(elt ,artitem 1))
-
-(defmacro nnir-artitem-rsv (artitem)
-  "Returns the Retrieval Status Value (RSV, score) from the ARTITEM."
-  `(elt ,artitem 2))
-
-(defmacro nnir-article-group (article)
-  "Returns the group for ARTICLE"
-  `(nnir-artitem-group (nnir-artlist-article nnir-artlist ,article)))
-
-(defmacro nnir-article-number (article)
-  "Returns the number for ARTICLE"
-  `(nnir-artitem-number (nnir-artlist-article nnir-artlist ,article)))
-
-(defmacro nnir-article-rsv (article)
-  "Returns the rsv for ARTICLE"
-  `(nnir-artitem-rsv (nnir-artlist-article nnir-artlist ,article)))
-
-(defsubst nnir-article-ids (article)
-  "Returns the pair `(nnir id . real id)' of ARTICLE"
-  (cons article (nnir-article-number article)))
-
-(defmacro nnir-categorize (sequence keyfunc &optional valuefunc)
-  "Sorts a sequence into categories and returns a list of the form
-`((key1 (element11 element12)) (key2 (element21 element22))'.
-The category key for a member of the sequence is obtained
-as `(keyfunc member)' and the corresponding element is just
-`member'. If `valuefunc' is non-nil, the element of the list
-is `(valuefunc member)'."
-  `(unless (null ,sequence)
-     (let (value)
-       (mapcar
-	(lambda (member)
-	  (let ((y (,keyfunc member))
-		(x ,(if valuefunc
-			`(,valuefunc member)
-		      'member)))
-	    (if (assoc y value)
-		(push x (cadr (assoc y value)))
-	      (push (list y (list x)) value))))
-	,sequence)
-       value)))
 
 ;; Gnus glue.
 
@@ -633,11 +638,6 @@
 		   (art (car (rassoc artno articleids))))
 	      (when art
 		(mail-header-set-number novitem art)
-		;; (mail-header-set-subject
-		;;  novitem
-		;;  (format "[%d: %s/%d] %s"
-		;; 	 (nnir-article-rsv art) artgroup artno
-		;; 	 (mail-header-subject novitem)))
 		(push novitem headers))
 	      (forward-line 1)))))
       (setq headers