Make nnir work by default.
authorLars Magne Ingebrigtsen <larsi@quimbies.gnus.org>
Sun, 24 Oct 2010 04:18:33 +0000 (06:18 +0200)
committerLars Magne Ingebrigtsen <larsi@quimbies.gnus.org>
Sun, 24 Oct 2010 04:18:33 +0000 (06:18 +0200)
lisp/ChangeLog
lisp/gnus-group.el
lisp/nnir.el

index 9275ff8..dd07ebd 100644 (file)
@@ -1,3 +1,13 @@
+2010-10-22  Andrew Cohen  <cohen@andy.bu.edu>
+
+       * nnir.el (nnir-method-default-engines): new variable.
+       (nnir-run-query): use it.
+       (nnir-group-mode-hook): remove key binding and move to gnus-group.el.
+       (gnus-summary-nnir-goto-thread): change group if needed.
+
+       * gnus-group.el (gnus-group-group-map): add key binding for
+       gnus-group-make-nnir-group.
+
 2010-10-24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * shr.el (shr-tag-object): Added.
index 667c4ba..7e2ea37 100644 (file)
@@ -55,6 +55,8 @@
 (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
@@ -653,6 +655,7 @@ simple manner.")
   "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
@@ -904,6 +907,7 @@ simple manner.")
        ["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]
index 2a264d1..a32d748 100644 (file)
@@ -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))