+2003-09-30 Kai Grossjohann <kai.grossjohann@gmx.net>
+ From Torsten Hilbrich <torsten.hilbrich@gmx.net>.
+
+ * nnir.el (nnir-imap-search-field, nnir-imap-search-arguments)
+ (nnir-imap-search-argument-history): New variables.
+ (nnir-engines, nnir-run-imap): Use them.
+ (nnir-read-parm): Support reading the new IMAP query parameters.
+
2003-06-03 Kai Gro\e,A_\e(Bjohann <kai.grossjohann@gmx.net>
* README: Explain purpose of each file (well, most files).
;;; Setup Code:
-(defconst nnir-version "$Id: nnir.el,v 1.80 2002/12/22 17:38:15 grossjoh Exp $"
+(defconst nnir-version "$Id: nnir.el,v 1.1 2003/09/30 21:19:01 kaig Exp $"
"Version of NNIR.")
(require 'cl)
(gnus-declare-backend "nnir" 'mail)
+(defvar nnir-imap-search-field "TEXT"
+ "The IMAP search item when doing an nnir search")
+
+(defvar nnir-imap-search-arguments
+ '(("Whole message" . "TEXT")
+ ("Subject" . "SUBJECT")
+ ("To" . "TO")
+ ("From" . "FROM")
+ (nil . "HEADER \"%s\""))
+ "Mapping from user readable strings to IMAP search items for use in nnir")
+
+(defvar nnir-imap-search-argument-history ()
+ "The history for querying search options in nnir")
+
;;; Developer Extension Variable:
(defvar nnir-engines
- '((glimpse nnir-run-glimpse
+ `((glimpse nnir-run-glimpse
((group . "Group spec: ")))
(wais nnir-run-waissearch
())
(excite nnir-run-excite-search
())
(imap nnir-run-imap
- ())
+ ((criteria
+ "Search in: " ; Prompt
+ ,nnir-imap-search-arguments ; alist for completing
+ nil ; no filtering
+ nil ; allow any user input
+ nil ; initial value
+ nnir-imap-search-argument-history ; the history to use
+ ,nnir-imap-search-field ; default
+ )))
(swish++ nnir-run-swish++
((group . "Group spec: ")))
(swish-e nnir-run-swish-e
;; send queries as literals
;; handle errors
-(defun nnir-run-imap (query srv &optional group)
+(defun nnir-run-imap (query srv &optional group-option)
(require 'imap)
(require 'nnimap)
- (unless group
- (error "Must process-mark groups for IMAP searching."))
(save-excursion
(let ((qstring (cdr (assq 'query query)))
(server (cadr (gnus-server-to-method srv)))
+ (group (or group-option (gnus-group-group-name)))
(defs (caddr (gnus-server-to-method srv)))
+ (criteria (or (cdr (assq 'criteria query))
+ nnir-imap-search-field))
artlist buf)
(message "Opening server %s" server)
(condition-case ()
(lambda (artnum)
(push (vector group artnum 1) artlist)
(setq arts (1+ arts)))
- (imap-search (concat "TEXT \"" qstring "\"") buf))
+ (imap-search (concat criteria " \"" qstring "\"") buf))
(message "Searching %s... %d matches" mbx arts)))
(message "Searching %s...done" group))
(quit nil))
`parmspec' is a cons cell, the car is a symbol, the cdr is a prompt."
(let ((sym (car parmspec))
(prompt (cdr parmspec)))
- (cons sym (read-string prompt))))
+ (if (listp prompt)
+ (let* ((result (apply 'completing-read prompt))
+ (mapping (or (assoc result nnir-imap-search-arguments)
+ (assoc nil nnir-imap-search-arguments))))
+ (cons sym (format (cdr mapping) result)))
+ (cons sym (read-string prompt)))))
(defun nnir-run-query (query)
"Invoke appropriate search engine function (see `nnir-engines').