diff options
Diffstat (limited to 'lisp/gnus/nnir.el')
| -rw-r--r-- | lisp/gnus/nnir.el | 79 |
1 files changed, 43 insertions, 36 deletions
diff --git a/lisp/gnus/nnir.el b/lisp/gnus/nnir.el index 2a264d1fa32..a32d748a60c 100644 --- a/lisp/gnus/nnir.el +++ b/lisp/gnus/nnir.el @@ -378,6 +378,10 @@ should return a message's headers in NOV format. 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: @@ -401,8 +405,8 @@ result, `gnus-retrieve-headers' will be called instead.") ()) (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 @@ -677,16 +681,6 @@ that it is for Namazu, not Wais." 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) @@ -716,22 +710,22 @@ and show thread that contains this article." (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)) @@ -1602,24 +1596,37 @@ and concat the results." (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)) |
