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.
This commit is contained in:
parent
6ce4202f43
commit
1b811c905a
3 changed files with 133 additions and 120 deletions
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 @@ If nil this will use `gnus-summary-line-format'."
|
|||
: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 @@ arrive at the correct group name, \"mail.misc\"."
|
|||
: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 @@ needs the variables `nnir-namazu-program',
|
|||
|
||||
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 @@ is `(valuefunc member)'."
|
|||
(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
|
||||
|
|
Loading…
Add table
Reference in a new issue