(autoload 'nnimap-buffer "nnimap")
(autoload 'nnimap-command "nnimap")
(autoload 'nnimap-possibly-change-group "nnimap")
+ (autoload 'nnimap-make-thread-query "nnimap")
(autoload 'gnus-registry-action "gnus-registry")
(defvar gnus-registry-install))
(deffoo nnir-warp-to-article ()
(let* ((cur (if (> (gnus-summary-article-number) 0)
(gnus-summary-article-number)
- (error "This is not a real article.")))
- (gnus-newsgroup-name (nnir-article-group cur))
- (backend-number (nnir-article-number cur)))
- (gnus-summary-read-group-1 gnus-newsgroup-name t t gnus-summary-buffer
- nil (list backend-number))))
+ (error "This is not a real article")))
+ (backend-article-group (nnir-article-group cur))
+ (backend-article-number (nnir-article-number cur))
+ (quit-config (gnus-ephemeral-group-p gnus-newsgroup-name)))
+ ;; first exit from the nnir summary buffer.
+ (gnus-summary-exit)
+ ;; and if the nnir summary buffer in turn came from another
+ ;; summary buffer we have to clean that summary up too.
+ (when (eq (cdr quit-config) 'summary)
+ (gnus-summary-exit))
+ (gnus-summary-read-group-1 backend-article-group t t nil
+ nil (list backend-article-number))))
(nnoo-define-skeleton nnir)
;; remove trailing slash and, for nnmaildir, cur/new/tmp
(setq dirnam
(substring dirnam 0
- (if (string= (gnus-group-server server) "nnmaildir")
+ (if (string-match "^nnmaildir:" (gnus-group-server server))
-5 -1)))
;; Set group to dirnam without any leading dots or slashes,
"[/\\]" "." t)))
(vector (gnus-group-full-name group server)
- (if (string= (gnus-group-server server) "nnmaildir")
+ (if (string-match "^nnmaildir:" (gnus-group-server server))
(nnmaildir-base-name-to-article-number
(substring article 0 (string-match ":" article))
group nil)
;; is sufficient. Note that we can't only use the value of
;; nnml-use-compressed-files because old articles might have been
;; saved with a different value.
- (article-pattern (if (string= (gnus-group-server server) "nnmaildir")
+ (article-pattern (if (string-match "^nnmaildir:"
+ (gnus-group-server server))
":[0-9]+"
"^[0-9]+\\(\\.[a-z0-9]+\\)?$"))
score artno dirnam filenam)
;; (when group
;; (error "The Namazu backend cannot search specific groups"))
(save-excursion
- (let ((article-pattern (if (string= (gnus-group-server server) "nnmaildir")
+ (let ((article-pattern (if (string-match "^nnmaildir:"
+ (gnus-group-server server))
":[0-9]+"
"^[0-9]+$"))
artlist
(groupspec (cdr (assq 'group query)))
(prefix (nnir-read-server-parm 'nnir-notmuch-remove-prefix server))
artlist
- (article-pattern (if (string= (gnus-group-server server) "nnmaildir")
+ (article-pattern (if (string-match "^nnmaildir:"
+ (gnus-group-server server))
":[0-9]+"
"^[0-9]+$"))
artno dirnam filenam)
(let* ((server (car x))
(nnir-search-engine
(or (nnir-read-server-parm 'nnir-search-engine
- server)
+ server t)
(cdr (assoc (car
(gnus-server-to-method server))
nnir-method-default-engines))))
nil)))
groups))))
-(defun nnir-read-server-parm (key server)
- "Returns the parameter value of key for the given server, where
-server is of form 'backend:name'."
+(defun nnir-read-server-parm (key server &optional not-global)
+ "Returns the parameter value corresponding to `key' for
+`server'. If no server-specific value is found consult the global
+environment unless `not-global' is non-nil."
(let ((method (gnus-server-to-method server)))
(cond ((and method (assq key (cddr method)))
- (nth 1 (assq key (cddr method))))
- ((boundp key) (symbol-value key))
- (t nil))))
+ (nth 1 (assq key (cddr method))))
+ ((and (not not-global) (boundp key)) (symbol-value key))
+ (t nil))))
+
(defun nnir-possibly-change-server (server)
(unless (and server (nnir-server-opened server))
(nnir-open-server server)))
+(defun nnir-search-thread (header)
+ "Make an nnir group based on the thread containing the article header"
+ (let ((parm (list
+ (cons 'query
+ (nnimap-make-thread-query header))
+ (cons 'criteria "")
+ (cons 'server (gnus-method-to-server
+ (gnus-find-method-for-group
+ gnus-newsgroup-name))))))
+ (gnus-group-make-nnir-group nil parm)
+ (gnus-summary-goto-subject (gnus-id-to-article (mail-header-id header)))))
;; unused?
(defun nnir-artlist-groups (artlist)