emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r101654: Merge changes made in Gnus t


From: Katsumi Yamaoka
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r101654: Merge changes made in Gnus trunk.
Date: Mon, 27 Sep 2010 23:07:47 +0000
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 101654
author: Gnus developers
committer: Katsumi Yamaoka <address@hidden>
branch nick: trunk
timestamp: Mon 2010-09-27 23:07:47 +0000
message:
  Merge changes made in Gnus trunk.
  
  sieve-manage.el (sieve-manage-default-stream): Make default stream 
customizable.
  nnimap.el (nnimap-request-accept-article): Send a "." at the end, which may 
or may not help.
  nnimap.el (nnimap-open-connection): Have the `network' nnimap connection use 
STARTTLS opportunistically.
  gnus-sum.el (gnus-summary-insert-new-articles): Copy the old-high watermark 
so that nothing alters it while scanning for new messages.
  nnimap.el (nnimap-request-accept-article): Remove the "." at the end, since 
some servers don't like it.
  nnimap.el (nnimap-open-connection): Forget credentials if the server says the 
password was wrong.
  nnimap.el (nnimap-parse-line): Protect against invalid data.
  gnus-art.el, gnus-sum.el, nnimap.el: Allow setting the partial fetch per 
server instead of globally.
  message.el (message-cite-prefix-regexp): Revert last edit.
  nnmairix.el: Make it work with latest changes in nnimap.
  gnus-sum.el (gnus-summary-move-article): Don't alter gnus-newsgroup-active.
  gnus-sum.el (gnus-summary-exit): Kill the article buffer later, so that you 
don't get flashes of other buffers.
  nnimap.el: Fix up partial nnimap fetching.
  gnus-sum.el: Rework the `/ N' based on the new gnus-newsgroup-highest 
variable.
modified:
  lisp/gnus/ChangeLog
  lisp/gnus/gnus-art.el
  lisp/gnus/gnus-sum.el
  lisp/gnus/nnimap.el
  lisp/gnus/nnmairix.el
  lisp/gnus/sieve-manage.el
=== modified file 'lisp/gnus/ChangeLog'
--- a/lisp/gnus/ChangeLog       2010-09-27 13:22:21 +0000
+++ b/lisp/gnus/ChangeLog       2010-09-27 23:07:47 +0000
@@ -1,5 +1,64 @@
 2010-09-27  Lars Magne Ingebrigtsen  <address@hidden>
 
+       * gnus-sum.el (gnus-summary-read-group-1): Set gnus-newsgroup-highest.
+       (gnus-summary-insert-new-articles): Use gnus-newsgroup-highest to get
+       new articles.
+
+       * nnimap.el (nnimap-request-article): Don't partial-fetch single-part
+       parts.
+       (nnimap-request-article): Work with the t setting, too.
+
+       * gnus-sum.el (gnus-summary-exit): Kill the article buffer later, so
+       that you don't get flashes of other buffers.
+       (gnus-summary-show-complete-article): Intern before setting.
+
+2010-09-27  David Engster  <address@hidden>
+
+       * nnmairix.el: (nnmairix-replace-group-and-numbers): Deal with NOV as
+       well as HEADERS.
+       (nnmairix-retrieve-headers): Provide new argument for the above.
+
+2010-09-27  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * gnus-sum.el (gnus-summary-move-article): Don't alter
+       gnus-newsgroup-active.  This makes `/ N' work after copying to the same
+       group.
+
+       * nnimap.el (nnimap-update-info): Don't destructively alter active.
+
+       * message.el (message-cite-prefix-regexp): Revert my last edit.
+
+       * gnus-sum.el (gnus-summary-show-complete-article): Bind the server
+       variable instead of the Gnus variable.
+
+       * nnimap.el (nnimap-find-wanted-parts-1): Use it.
+
+       * gnus-art.el (gnus-fetch-partial-articles): Moved back to nnimap
+       again.
+
+       * nnimap.el (nnimap-request-accept-article): Remove the "." at the end,
+       since some servers don't like it.
+       (nnimap-open-connection): Forget credentials if the server says the
+       password was wrong.
+       (nnimap-parse-line): Protect against invalid data.
+
+       * gnus-sum.el (gnus-summary-move-article): Add comment.
+       (gnus-summary-insert-new-articles): Copy the old-high watermark so that
+       nothing alters it while scanning for new messages.
+
+       * nnimap.el (nnimap-request-accept-article): Send a "." at the end,
+       which may or may not help.
+       (nnimap-open-connection): If we're doing a stream connection, and then
+       discover we're on a STARTTLS-capable server, then open a STARTTLS
+       connection instead.
+
+2010-09-27  Florian Ragwitz  <address@hidden>  (tiny change)
+
+       * sieve-manage.el (sieve-manage-default-stream): Make default stream
+       customizable.
+
+2010-09-27  Lars Magne Ingebrigtsen  <address@hidden>
+
        * nnimap.el (utf7): Required.
 
        * message.el (message-cite-prefix-regexp): Remove "}" from citation
@@ -18,7 +77,7 @@
 
        * gnus-art.el (gnus-mime-delete-part): Fix Lisp type of byte(s).
 
-2010-09-26  Florian Ragwitz  <address@hidden>
+2010-09-26  Florian Ragwitz  <address@hidden>  (tiny change)
 
        * gnus-html.el (gnus-html-wash-tags): Decode URL entities to avoid
        handing broken links to browse-url.

=== modified file 'lisp/gnus/gnus-art.el'
--- a/lisp/gnus/gnus-art.el     2010-09-27 03:16:55 +0000
+++ b/lisp/gnus/gnus-art.el     2010-09-27 23:07:47 +0000
@@ -257,22 +257,6 @@
                 (regexp :value ".*"))
   :group 'gnus-article-signature)
 
-(defcustom gnus-fetch-partial-articles nil
-  "If non-nil, Gnus will fetch partial articles.
-If t, nnimap will fetch only the first part.  If a string, it
-will fetch all parts that have types that match that string.  A
-likely value would be \"text/\" to automatically fetch all
-textual parts.
-
-Currently only the nnimap backend actually supports partial
-article fetching.  If the backend doesn't support it, it has no
-effect."
-  :version "24.1"
-  :type '(choice (const nil)
-                (const t)
-                (regexp))
-  :group 'gnus-article)
-
 (defcustom gnus-hidden-properties '(invisible t intangible t)
   "Property list to use for hiding text."
   :type 'sexp

=== modified file 'lisp/gnus/gnus-sum.el'
--- a/lisp/gnus/gnus-sum.el     2010-09-26 12:47:09 +0000
+++ b/lisp/gnus/gnus-sum.el     2010-09-27 23:07:47 +0000
@@ -1431,6 +1431,7 @@
 (defvar gnus-newsgroup-last-directory nil)
 (defvar gnus-newsgroup-auto-expire nil)
 (defvar gnus-newsgroup-active nil)
+(defvar gnus-newsgroup-highest nil)
 
 (defvar gnus-newsgroup-data nil)
 (defvar gnus-newsgroup-data-reverse nil)
@@ -1582,6 +1583,7 @@
     (gnus-summary-mark-below . global)
     (gnus-orphan-score . global)
     gnus-newsgroup-active gnus-scores-exclude-files
+    gnus-newsgroup-highest
     gnus-newsgroup-history gnus-newsgroup-ancient
     gnus-newsgroup-sparse gnus-newsgroup-process-stack
     (gnus-newsgroup-adaptive . gnus-use-adaptive-scoring)
@@ -3957,6 +3959,7 @@
       (setq gnus-newsgroup-active
            (gnus-copy-sequence
             (gnus-active gnus-newsgroup-name)))
+      (setq gnus-newsgroup-highest (cdr gnus-newsgroup-active))
       ;; You can change the summary buffer in some way with this hook.
       (gnus-run-hooks 'gnus-select-group-hook)
       (when (memq 'summary (gnus-update-format-specifications
@@ -7090,15 +7093,6 @@
       (when gnus-use-scoring
        (gnus-score-save)))
     (gnus-run-hooks 'gnus-summary-prepare-exit-hook)
-    ;; If we have several article buffers, we kill them at exit.
-    (unless gnus-single-article-buffer
-      (when (gnus-buffer-live-p gnus-article-buffer)
-       (with-current-buffer gnus-article-buffer
-         ;; Don't kill sticky article buffers
-         (unless (eq major-mode 'gnus-sticky-article-mode)
-           (gnus-kill-buffer gnus-article-buffer)
-           (setq gnus-article-current nil))))
-      (gnus-kill-buffer gnus-original-article-buffer))
     (when gnus-use-cache
       (gnus-cache-possibly-remove-articles)
       (gnus-cache-save-buffers))
@@ -7147,6 +7141,17 @@
        ;; Return to group mode buffer.
        (when (eq mode 'gnus-summary-mode)
          (gnus-kill-buffer buf)))
+
+      ;; If we have several article buffers, we kill them at exit.
+      (unless gnus-single-article-buffer
+       (when (gnus-buffer-live-p gnus-article-buffer)
+         (with-current-buffer gnus-article-buffer
+           ;; Don't kill sticky article buffers
+           (unless (eq major-mode 'gnus-sticky-article-mode)
+             (gnus-kill-buffer gnus-article-buffer)
+             (setq gnus-article-current nil))))
+       (gnus-kill-buffer gnus-original-article-buffer))
+
       (setq gnus-current-select-method gnus-select-method)
       (set-buffer gnus-group-buffer)
       (if quit-config
@@ -9360,9 +9365,19 @@
   (let ((gnus-keep-backlog nil)
        (gnus-use-cache nil)
        (gnus-agent nil)
-       (gnus-fetch-partial-articles nil))
-    (gnus-flush-original-article-buffer)
-    (gnus-summary-show-article)))
+       (variable (intern
+                  (format "%s-fetch-partial-articles"
+                          (car (gnus-find-method-for-group
+                                gnus-newsgroup-name)))
+                  obarray))
+       old-val)
+    (unwind-protect
+       (progn
+         (setq old-val (symbol-value variable))
+         (set variable nil)
+         (gnus-flush-original-article-buffer)
+         (gnus-summary-show-article))
+      (set variable old-val))))
 
 (defun gnus-summary-show-article (&optional arg)
   "Force redisplaying of the current article.
@@ -9797,8 +9812,9 @@
                           (not (memq article gnus-newsgroup-unreads)))
                  ;; Mark this article as read in this group.
                  (push (cons to-article gnus-read-mark) gnus-newsgroup-reads)
+                 ;; Increase the active status of this group.
                  (setcdr (gnus-active to-group) to-article)
-                 (setcdr gnus-newsgroup-active to-article))
+                 (setcdr gnus-newsgroup-active to-article))
 
                (while marks
                  (when (eq (gnus-article-mark-to-type (cdar marks)) 'list)
@@ -12624,13 +12640,15 @@
   (interactive)
   (prog1
       (let ((old (sort (mapcar 'car gnus-newsgroup-data) '<))
-           (old-active gnus-newsgroup-active)
+           (old-high gnus-newsgroup-highest)
            (nnmail-fetched-sources (list t))
            i new)
        (setq gnus-newsgroup-active
-             (gnus-activate-group gnus-newsgroup-name 'scan))
-       (setq i (cdr gnus-newsgroup-active))
-       (while (> i (cdr old-active))
+             (gnus-copy-sequence
+              (gnus-activate-group gnus-newsgroup-name 'scan)))
+       (setq i (cdr gnus-newsgroup-active)
+             gnus-newsgroup-highest i)
+       (while (> i old-high)
          (push i new)
          (decf i))
        (if (not new)

=== modified file 'lisp/gnus/nnimap.el'
--- a/lisp/gnus/nnimap.el       2010-09-27 13:22:21 +0000
+++ b/lisp/gnus/nnimap.el       2010-09-27 23:07:47 +0000
@@ -85,6 +85,13 @@
 
 (defvoo nnimap-current-infos nil)
 
+(defvoo nnimap-fetch-partial-articles nil
+  "If non-nil, Gnus will fetch partial articles.
+If t, nnimap will fetch only the first part.  If a string, it
+will fetch all parts that have types that match that string.  A
+likely value would be \"text/\" to automatically fetch all
+textual parts.")
+
 (defvar nnimap-process nil)
 
 (defvar nnimap-status-string "")
@@ -271,91 +278,110 @@
   (unless nnimap-keepalive-timer
     (setq nnimap-keepalive-timer (run-at-time (* 60 15) (* 60 15)
                                              'nnimap-keepalive)))
-  (with-current-buffer (nnimap-make-process-buffer buffer)
-    (let* ((coding-system-for-read 'binary)
-          (coding-system-for-write 'binary)
-          (port nil)
-          (ports
-           (cond
-            ((eq nnimap-stream 'network)
-             (open-network-stream
-              "*nnimap*" (current-buffer) nnimap-address
-              (setq port
-                    (or nnimap-server-port
-                        (if (netrc-find-service-number "imap")
-                            "imap"
-                          "143"))))
-             '("143" "imap"))
-            ((eq nnimap-stream 'shell)
-             (nnimap-open-shell-stream
-              "*nnimap*" (current-buffer) nnimap-address
-              (setq port (or nnimap-server-port "imap")))
-             '("imap"))
-            ((eq nnimap-stream 'starttls)
-             (starttls-open-stream
-              "*nnimap*" (current-buffer) nnimap-address
-              (setq port (or nnimap-server-port "imap")))
-             '("imap"))
-            ((eq nnimap-stream 'ssl)
-             (open-tls-stream
-              "*nnimap*" (current-buffer) nnimap-address
-              (setq port
-                    (or nnimap-server-port
-                        (if (netrc-find-service-number "imaps")
-                            "imaps"
-                          "993"))))
-             '("143" "993" "imap" "imaps"))))
-          connection-result login-result credentials)
-      (setf (nnimap-process nnimap-object)
-           (get-buffer-process (current-buffer)))
-      (if (not (and (nnimap-process nnimap-object)
-                   (memq (process-status (nnimap-process nnimap-object))
-                         '(open run))))
-         (nnheader-report 'nnimap "Unable to contact %s:%s via %s"
-                          nnimap-address port nnimap-stream)
-       (gnus-set-process-query-on-exit-flag (nnimap-process nnimap-object) nil)
-       (if (not (setq connection-result (nnimap-wait-for-connection)))
-           (nnheader-report 'nnimap
-                            "%s" (buffer-substring
-                                  (point) (line-end-position)))
-         (setf (nnimap-greeting nnimap-object)
-               (buffer-substring (line-beginning-position)
-                                 (line-end-position)))
-         (when (eq nnimap-stream 'starttls)
-           (nnimap-command "STARTTLS")
-           (starttls-negotiate (nnimap-process nnimap-object)))
-         (when nnimap-server-port
-           (push (format "%s" nnimap-server-port) ports))
-         (unless (equal connection-result "PREAUTH")
-           (if (not (setq credentials
-                          (if (eq nnimap-authenticator 'anonymous)
-                              (list "anonymous"
-                                    (message-make-address))
-                            (or
-                             ;; First look for the credentials based
-                             ;; on the virtual server name.
-                             (nnimap-credentials
-                              (nnoo-current-server 'nnimap) ports t)
-                             ;; Then look them up based on the
-                             ;; physical address.
-                             (nnimap-credentials nnimap-address ports)))))
-               (setq nnimap-object nil)
-             (setq login-result (nnimap-command "LOGIN %S %S"
-                                                (car credentials)
-                                                (cadr credentials)))
-             (unless (car login-result)
-               (delete-process (nnimap-process nnimap-object))
-               (setq nnimap-object nil))))
-         (when nnimap-object
+  (block nil
+    (with-current-buffer (nnimap-make-process-buffer buffer)
+      (let* ((coding-system-for-read 'binary)
+            (coding-system-for-write 'binary)
+            (port nil)
+            (ports
+             (cond
+              ((eq nnimap-stream 'network)
+               (open-network-stream
+                "*nnimap*" (current-buffer) nnimap-address
+                (setq port
+                      (or nnimap-server-port
+                          (if (netrc-find-service-number "imap")
+                              "imap"
+                            "143"))))
+               '("143" "imap"))
+              ((eq nnimap-stream 'shell)
+               (nnimap-open-shell-stream
+                "*nnimap*" (current-buffer) nnimap-address
+                (setq port (or nnimap-server-port "imap")))
+               '("imap"))
+              ((eq nnimap-stream 'starttls)
+               (starttls-open-stream
+                "*nnimap*" (current-buffer) nnimap-address
+                (setq port (or nnimap-server-port "imap")))
+               '("imap"))
+              ((eq nnimap-stream 'ssl)
+               (open-tls-stream
+                "*nnimap*" (current-buffer) nnimap-address
+                (setq port
+                      (or nnimap-server-port
+                          (if (netrc-find-service-number "imaps")
+                              "imaps"
+                            "993"))))
+               '("143" "993" "imap" "imaps"))))
+            connection-result login-result credentials)
+       (setf (nnimap-process nnimap-object)
+             (get-buffer-process (current-buffer)))
+       (if (not (and (nnimap-process nnimap-object)
+                     (memq (process-status (nnimap-process nnimap-object))
+                           '(open run))))
+           (nnheader-report 'nnimap "Unable to contact %s:%s via %s"
+                            nnimap-address port nnimap-stream)
+         (gnus-set-process-query-on-exit-flag (nnimap-process nnimap-object) 
nil)
+         (if (not (setq connection-result (nnimap-wait-for-connection)))
+             (nnheader-report 'nnimap
+                              "%s" (buffer-substring
+                                    (point) (line-end-position)))
+           ;; Store the greeting (for debugging purposes).
+           (setf (nnimap-greeting nnimap-object)
+                 (buffer-substring (line-beginning-position)
+                                   (line-end-position)))
+           ;; Store the capabilities.
            (setf (nnimap-capabilities nnimap-object)
                  (mapcar
                   #'upcase
-                  (or (nnimap-find-parameter "CAPABILITY" (cdr login-result))
-                      (nnimap-find-parameter
-                       "CAPABILITY" (cdr (nnimap-command "CAPABILITY"))))))
-           (when (member "QRESYNC" (nnimap-capabilities nnimap-object))
-             (nnimap-command "ENABLE QRESYNC"))
-           t))))))
+                  (nnimap-find-parameter
+                   "CAPABILITY" (cdr (nnimap-command "CAPABILITY")))))
+           (when (eq nnimap-stream 'starttls)
+             (nnimap-command "STARTTLS")
+             (starttls-negotiate (nnimap-process nnimap-object)))
+           ;; If this is a STARTTLS-capable server, then sever the
+           ;; connection and start a STARTTLS connection instead.
+           (when (and (eq nnimap-stream 'network)
+                      (member "STARTTLS" (nnimap-capabilities nnimap-object)))
+             (let ((nnimap-stream 'starttls))
+               (delete-process (nnimap-process nnimap-object))
+               (kill-buffer (current-buffer))
+               (return
+                (nnimap-open-connection buffer))))
+           (when nnimap-server-port
+             (push (format "%s" nnimap-server-port) ports))
+           (unless (equal connection-result "PREAUTH")
+             (if (not (setq credentials
+                            (if (eq nnimap-authenticator 'anonymous)
+                                (list "anonymous"
+                                      (message-make-address))
+                              (or
+                               ;; First look for the credentials based
+                               ;; on the virtual server name.
+                               (nnimap-credentials
+                                (nnoo-current-server 'nnimap) ports t)
+                               ;; Then look them up based on the
+                               ;; physical address.
+                               (nnimap-credentials nnimap-address ports)))))
+                 (setq nnimap-object nil)
+               (setq login-result (nnimap-command "LOGIN %S %S"
+                                                  (car credentials)
+                                                  (cadr credentials)))
+               (unless (car login-result)
+                 ;; If the login failed, then forget the credentials
+                 ;; that are now possibly cached.
+                 (dolist (host (list (nnoo-current-server 'nnimap)
+                                     nnimap-address))
+                   (dolist (port ports)
+                     (dolist (element '("login" "password"))
+                       (auth-source-forget-user-or-password
+                        element host port))))
+                 (delete-process (nnimap-process nnimap-object))
+                 (setq nnimap-object nil))))
+           (when nnimap-object
+             (when (member "QRESYNC" (nnimap-capabilities nnimap-object))
+               (nnimap-command "ENABLE QRESYNC"))
+             t)))))))
 
 (defun nnimap-find-parameter (parameter elems)
   (let (result)
@@ -395,14 +421,12 @@
        (erase-buffer)
        (with-current-buffer (nnimap-buffer)
          (erase-buffer)
-         (when gnus-fetch-partial-articles
-           (if (eq gnus-fetch-partial-articles t)
-               (setq parts '(1))
-             (nnimap-command "UID FETCH %d (BODYSTRUCTURE)" article)
-             (goto-char (point-min))
-             (when (re-search-forward "FETCH.*BODYSTRUCTURE" nil t)
-               (setq structure (ignore-errors (read (current-buffer)))
-                     parts (nnimap-find-wanted-parts structure)))))
+         (when nnimap-fetch-partial-articles
+           (nnimap-command "UID FETCH %d (BODYSTRUCTURE)" article)
+           (goto-char (point-min))
+           (when (re-search-forward "FETCH.*BODYSTRUCTURE" nil t)
+             (setq structure (ignore-errors (read (current-buffer)))
+                   parts (nnimap-find-wanted-parts structure))))
          (when (if parts
                    (nnimap-get-partial-article article parts structure)
                  (nnimap-get-whole-article article))
@@ -525,7 +549,9 @@
                        (number-to-string num)
                      (format "%s.%s" prefix num))))
            (setcar (nthcdr 9 sub) id)
-           (when (string-match gnus-fetch-partial-articles type)
+           (when (if (eq nnimap-fetch-partial-articles t)
+                     (equal id "1")
+                   (string-match nnimap-fetch-partial-articles type))
              (push id parts))))
        (incf num)))
     (nreverse parts)))
@@ -941,7 +967,10 @@
                              (t
                               ;; No articles and no uidnext.
                               nil)))
-         (setcdr (gnus-active group) (or high (1- uidnext))))
+         (gnus-set-active
+          group
+          (cons (car (gnus-active group))
+                (or high (1- uidnext)))))
        (when (and (not high)
                   uidnext)
          (setq high (1- uidnext)))
@@ -1193,13 +1222,18 @@
           (cond
            ((eql char ?\[)
             (split-string (buffer-substring
-                           (1+ (point)) (1- (search-forward "]")))))
+                           (1+ (point))
+                           (1- (search-forward "]" (line-end-position) 
'move)))))
            ((eql char ?\()
             (split-string (buffer-substring
-                           (1+ (point)) (1- (search-forward ")")))))
+                           (1+ (point))
+                           (1- (search-forward ")" (line-end-position) 
'move)))))
            ((eql char ?\")
             (forward-char 1)
-            (buffer-substring (point) (1- (search-forward "\""))))
+            (buffer-substring
+             (point)
+             (1- (or (search-forward "\"" (line-end-position) 'move)
+                     (point)))))
            (t
             (buffer-substring (point) (if (search-forward " " nil t)
                                           (1- (point))

=== modified file 'lisp/gnus/nnmairix.el'
--- a/lisp/gnus/nnmairix.el     2010-09-23 23:14:02 +0000
+++ b/lisp/gnus/nnmairix.el     2010-09-27 23:07:47 +0000
@@ -562,9 +562,8 @@
                 "retrieve-headers" articles folder nnmairix-backend-server 
fetch-old))
            (nnmairix-call-backend
             "retrieve-headers" articles folder nnmairix-backend-server 
fetch-old)))
-    (when (eq rval 'nov)
-      (nnmairix-replace-group-and-numbers articles folder group numcorr)
-      rval)))
+    (nnmairix-replace-group-and-numbers articles folder group numcorr rval)
+    rval))
 
 (deffoo nnmairix-request-article (article &optional group server to-buffer)
   (when server (nnmairix-open-server server))
@@ -1413,43 +1412,55 @@
        (setq cur lastplusone))
       (setq lastplusone (1+ cur)))))
 
-(defun nnmairix-replace-group-and-numbers (articles backendgroup mairixgroup 
numc)
+(defun nnmairix-replace-group-and-numbers (articles backendgroup mairixgroup 
numc type)
   "Replace folder names in Xref header and correct article numbers.
 Do this for all ARTICLES on BACKENDGROUP.  Replace using
-MAIRIXGROUP.  NUMC contains values for article number correction."
-  (let ((buf (get-buffer-create " *nnmairix buffer*"))
-       (corr (not (zerop numc)))
-       (name (buffer-name nntp-server-buffer))
-       header cur xref)
-    (with-current-buffer buf
-      (erase-buffer)
-      (set-buffer nntp-server-buffer)
-      (goto-char (point-min))
-      (nnheader-message 7 "nnmairix: Rewriting headers...")
-      (mapc
-       (lambda (article)
-         (when (or (looking-at (number-to-string article))
-                   (nnheader-find-nov-line article))
-           (setq cur (nnheader-parse-nov))
-           (when corr
-             (setq article (+ (mail-header-number cur) numc))
-             (mail-header-set-number cur article))
-           (setq xref (mail-header-xref cur))
-           (when (and (stringp xref)
-                      (string-match (format "[ \t]%s:[0-9]+" backendgroup) 
xref))
-             (setq xref (replace-match (format " %s:%d" mairixgroup article) t 
nil xref))
-             (mail-header-set-xref cur xref))
-           (set-buffer buf)
-           (nnheader-insert-nov cur)
-           (set-buffer nntp-server-buffer)
-           (when (not (eobp))
-             (forward-line 1))))
-       articles)
-      (nnheader-message 7 "nnmairix: Rewriting headers... done")
-      (kill-buffer nntp-server-buffer)
-      (set-buffer buf)
-      (rename-buffer name)
-      (setq nntp-server-buffer buf))))
+MAIRIXGROUP.  NUMC contains values for article number correction.
+TYPE is either 'nov or 'headers."
+  (nnheader-message 7 "nnmairix: Rewriting headers...")
+  (cond
+   ((eq type 'nov)
+    (let ((buf (get-buffer-create " *nnmairix buffer*"))
+         (corr (not (zerop numc)))
+         (name (buffer-name nntp-server-buffer))
+         header cur xref)
+      (with-current-buffer buf
+       (erase-buffer)
+       (set-buffer nntp-server-buffer)
+       (goto-char (point-min))
+       (mapc
+        (lambda (article)
+          (when (or (looking-at (number-to-string article))
+                    (nnheader-find-nov-line article))
+            (setq cur (nnheader-parse-nov))
+            (when corr
+              (setq article (+ (mail-header-number cur) numc))
+              (mail-header-set-number cur article))
+            (setq xref (mail-header-xref cur))
+            (when (and (stringp xref)
+                       (string-match (format "[ \t]%s:[0-9]+" backendgroup) 
xref))
+              (setq xref (replace-match (format " %s:%d" mairixgroup article) 
t nil xref))
+              (mail-header-set-xref cur xref))
+            (set-buffer buf)
+            (nnheader-insert-nov cur)
+            (set-buffer nntp-server-buffer)
+            (when (not (eobp))
+              (forward-line 1))))
+        articles)
+       (kill-buffer nntp-server-buffer)
+       (set-buffer buf)
+       (rename-buffer name)
+       (setq nntp-server-buffer buf))))
+   ((and (eq type 'headers)
+        (not (zerop numc)))
+    (with-current-buffer nntp-server-buffer
+      (save-excursion
+       (goto-char (point-min))
+       (while (re-search-forward "^[23][0-9]+ \\([0-9]+\\)" nil t)
+         (replace-match (number-to-string
+                         (+ (string-to-number (match-string 1)) numc))
+                        t t nil 1))))))
+  (nnheader-message 7 "nnmairix: Rewriting headers... done"))
 
 (defun nnmairix-backend-to-server (server)
   "Return nnmairix server most probably responsible for back end SERVER.

=== modified file 'lisp/gnus/sieve-manage.el'
--- a/lisp/gnus/sieve-manage.el 2010-09-02 01:42:32 +0000
+++ b/lisp/gnus/sieve-manage.el 2010-09-27 23:07:47 +0000
@@ -162,6 +162,12 @@
   :type 'integer
   :group 'sieve-manage)
 
+(defcustom sieve-manage-default-stream 'network
+  "Default stream type to use for `sieve-manage'.
+Must be a name of a stream in `sieve-manage-stream-alist'."
+  :type 'symbol
+  :group 'sieve-manage)
+
 ;; Internal variables:
 
 (defconst sieve-manage-local-variables '(sieve-manage-server
@@ -174,7 +180,6 @@
                                         sieve-manage-client-eol
                                         sieve-manage-server-eol
                                         sieve-manage-capability))
-(defconst sieve-manage-default-stream 'network)
 (defconst sieve-manage-coding-system-for-read 'binary)
 (defconst sieve-manage-coding-system-for-write 'binary)
 (defvar sieve-manage-stream nil)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]