(autoload 'gnus-agent-total-fetched-for "gnus-agent")
(autoload 'gnus-cache-total-fetched-for "gnus-cache")
+(autoload 'gnus-group-make-nnir-group "nnir")
+
(defcustom gnus-no-groups-message "No Gnus is good news"
"*Message displayed by Gnus when no groups are available."
:group 'gnus-start
"D" gnus-group-enter-directory
"f" gnus-group-make-doc-group
"w" gnus-group-make-web-group
+ "G" gnus-group-make-nnir-group
"M" gnus-group-read-ephemeral-group
"r" gnus-group-rename-group
"R" gnus-group-make-rss-group
["Add the help group" gnus-group-make-help-group t]
["Make a doc group..." gnus-group-make-doc-group t]
["Make a web group..." gnus-group-make-web-group t]
+ ["Make a search group..." gnus-group-make-nnir-group t]
["Make a virtual group..." gnus-group-make-empty-virtual t]
["Add a group to a virtual..." gnus-group-add-to-virtual t]
["Make an ephemeral group..." gnus-group-read-ephemeral-group t]
If this variable is nil, or if the provided function returns nil for a search
result, `gnus-retrieve-headers' will be called instead.")
+(defvar nnir-method-default-engines
+ '((nnimap . imap)
+ (nntp . nil))
+ "Alist of default search engines by server method")
;;; Developer Extension Variable:
())
(hyrex nnir-run-hyrex
((group . "Group spec: ")))
- (find-grep nnir-run-find-grep
- ((grep-options . "Grep options: "))))
+ (find-grep nnir-run-find-grep
+ ((grep-options . "Grep options: "))))
"Alist of supported search engines.
Each element in the alist is a three-element list (ENGINE FUNCTION ARGS).
ENGINE is a symbol designating the searching engine. FUNCTION is also
gnus-current-window-configuration)
nil)))
-(eval-when-compile
- (when (featurep 'xemacs)
- ;; The `kbd' macro requires that the `read-kbd-macro' macro is available.
- (require 'edmacro)))
-
-(defun nnir-group-mode-hook ()
- (define-key gnus-group-mode-map (kbd "G G")
- 'gnus-group-make-nnir-group))
-(add-hook 'gnus-group-mode-hook 'nnir-group-mode-hook)
-
;; Why is this needed? Is this for compatibility with old/new gnusae? Using
;; gnus-group-server instead works for me. -- Justus Piater
(defmacro nnir-group-server (group)
(id (mail-header-id (gnus-summary-article-header)))
(refs (split-string
(mail-header-references (gnus-summary-article-header)))))
- (if (string= (car (gnus-group-method group)) "nnimap")
- (with-current-buffer (nnimap-buffer)
- (let* ((cmd (let ((value
- (format
- "(OR HEADER REFERENCES %s HEADER Message-Id %s)"
- id id)))
- (dolist (refid refs value)
- (setq value (format
- "(OR (OR HEADER Message-Id %s HEADER REFERENCES %s) %s)"
- refid refid value)))))
- (result (nnimap-command
- "UID SEARCH %s" cmd)))
- (gnus-summary-read-group-1 group t t gnus-summary-buffer nil
- (and (car result)
- (delete 0 (mapcar #'string-to-number
- (cdr (assoc "SEARCH" (cdr result)))))))))
+ (if (eq (car (gnus-group-method group)) 'nnimap)
+ (progn (nnimap-possibly-change-group (gnus-group-short-name group) nil)
+ (with-current-buffer (nnimap-buffer)
+ (let* ((cmd (let ((value (format
+ "(OR HEADER REFERENCES %s HEADER Message-Id %s)"
+ id id)))
+ (dolist (refid refs value)
+ (setq value (format
+ "(OR (OR HEADER Message-Id %s HEADER REFERENCES %s) %s)"
+ refid refid value)))))
+ (result (nnimap-command
+ "UID SEARCH %s" cmd)))
+ (gnus-summary-read-group-1 group t t gnus-summary-buffer nil
+ (and (car result)
+ (delete 0 (mapcar #'string-to-number
+ (cdr (assoc "SEARCH" (cdr result))))))))))
(gnus-summary-read-group-1 group t t gnus-summary-buffer
nil (list backend-number))
(gnus-summary-limit (list backend-number))
(if gnus-group-marked
(apply 'vconcat
(mapcar (lambda (x)
- (let ((server (nnir-group-server x))
- search-func)
+ (let* ((server (nnir-group-server x))
+ (engine
+ (or (nnir-read-server-parm 'nnir-search-engine
+ server)
+ (cdr
+ (assoc (car (gnus-server-to-method server))
+ nnir-method-default-engines))))
+ search-func)
(setq search-func (cadr
(assoc
- (nnir-read-server-parm 'nnir-search-engine server) nnir-engines)))
+ engine
+ nnir-engines)))
(if search-func
(funcall search-func q server x)
nil)))
- gnus-group-marked)
- )
+ gnus-group-marked))
(apply 'vconcat
(mapcar (lambda (x)
(if (and (equal (cadr x) 'ok) (not (equal (cadar x) "-ephemeral")))
- (let ((server (format "%s:%s" (caar x) (cadar x)))
- search-func)
+ (let* ((server (format "%s:%s" (caar x) (cadar x)))
+ (engine
+ (or (nnir-read-server-parm 'nnir-search-engine
+ server)
+ (cdr
+ (assoc (car (gnus-server-to-method server))
+ nnir-method-default-engines))))
+ search-func)
(setq search-func (cadr
(assoc
- (nnir-read-server-parm 'nnir-search-engine server) nnir-engines)))
+ engine
+ nnir-engines)))
(if search-func
(funcall search-func q server nil)
nil))