emacs-diffs
[Top][All Lists]
Advanced

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

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


From: Katsumi Yamaoka
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r102172: Merge changes made in Gnus trunk.
Date: Sun, 31 Oct 2010 22:31:24 +0000
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 102172
author: Gnus developers
committer: Katsumi Yamaoka <address@hidden>
branch nick: trunk
timestamp: Sun 2010-10-31 22:31:24 +0000
message:
  Merge changes made in Gnus trunk.
  
  nnimap.el (nnimap-open-connection): Only send AUTHENTICATE PLAIN if 
LOGINDISABLED is set.
  gnus.el (gnus-group-startup-message): Move point to the start of the buffer.
  nndoc.el (nndoc-dissect-buffer): Reverse the order of the articles to reflect 
the order they're in in the digest.
  gnus-sum.el (gnus-summary-select-article): Make `C-d' work reliably by 
checking whether the original article buffer is alive.
  shr.el (shr-find-fill-point): Don't break lines between punctuation and 
non-punctuation (like after the apostrophe in "'We").
  gnus-cite.el (gnus-article-fill-cited-article): Remove unused `force' 
parameter.
  gnus-art.el (gnus-treatment-function-alist): Have gnus-treat-fill-long-lines 
point to gnus-article-fill-cited-long-lines.
  gnus-art.el (gnus-treat-fill-long-lines): Change default to fill all 
text/plain sections.
  gnus.el: Autoload gnus-article-fill-cited-long-lines.
  gnus-art.el (gnus-mime-display-alternative): Actually pass the type on to 
`gnus-treat-article'.
  gnus-sum.el (gnus-summary-show-article): Add `C-u C-u g' for showing the raw 
article, and change `C-u g' to show the article without doing treatments.
  gnus.texi (Paging the Article): Document C-u g/C-u C-u g.
  gnus-cite.el (gnus-article-foldable-buffer): Refactor out.
  gnus-cite.el (gnus-article-foldable-buffer): Don't fold regions that have a 
ragged left edge.
  gnus-cite.el (gnus-article-foldable-buffer): Skip past the prefix when 
determining raggedness.
  gnus-srvr.el, nnir.el: Allow nnir searching for an entire server.
  gnus-msg.el (gnus-configure-posting-styles): Permit the use of regular 
expression match and replace in posting styles.
  gnus-art.el (gnus-treat-article): Only inhibit body washing, and leave the 
header washing to take place.
  nnimap.el (nnimap-request-accept-article): Erase buffer before appending for 
easier debugging.
  nnimap.el (nnimap-wait-for-connection): Take a regexp.
  nnimap.el (nnimap-request-accept-article): Wait for the continuation line 
before sending anything unless we're streaming.
modified:
  doc/misc/ChangeLog
  doc/misc/gnus.texi
  lisp/gnus/ChangeLog
  lisp/gnus/gnus-art.el
  lisp/gnus/gnus-cite.el
  lisp/gnus/gnus-msg.el
  lisp/gnus/gnus-srvr.el
  lisp/gnus/gnus-sum.el
  lisp/gnus/gnus-util.el
  lisp/gnus/gnus.el
  lisp/gnus/nndoc.el
  lisp/gnus/nnimap.el
  lisp/gnus/nnir.el
  lisp/gnus/shr.el
=== modified file 'doc/misc/ChangeLog'
--- a/doc/misc/ChangeLog        2010-10-31 14:40:01 +0000
+++ b/doc/misc/ChangeLog        2010-10-31 22:31:24 +0000
@@ -1,3 +1,7 @@
+2010-10-31  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * gnus.texi (Paging the Article): Document C-u g/C-u C-u g.
+
 2010-10-31  Glenn Morris  <address@hidden>
 
        * mh-e.texi (Preface, From Bill Wohler): Change 23 to past tense.

=== modified file 'doc/misc/gnus.texi'
--- a/doc/misc/gnus.texi        2010-10-30 15:01:14 +0000
+++ b/doc/misc/gnus.texi        2010-10-31 22:31:24 +0000
@@ -6153,8 +6153,9 @@
 @vindex gnus-summary-show-article-charset-alist
 (Re)fetch the current article (@code{gnus-summary-show-article}).  If
 given a prefix, fetch the current article, but don't run any of the
-article treatment functions.  This will give you a ``raw'' article, just
-the way it came from the server.
+article treatment functions.  If given a prefix twice (i.e., @kbd{C-u
+C-u g'}), show a completely ``raw'' article, just the way it came from
+the server.
 
 @cindex charset, view article with different charset
 If given a numerical prefix, you can do semi-manual charset stuff.
@@ -13428,14 +13429,20 @@
 name will be removed.  If the attribute name is @code{eval}, the form
 is evaluated, and the result is thrown away.
 
-The attribute value can be a string (used verbatim), a function with
-zero arguments (the return value will be used), a variable (its value
-will be used) or a list (it will be @code{eval}ed and the return value
-will be used).  The functions and sexps are called/@code{eval}ed in the
-message buffer that is being set up.  The headers of the current article
-are available through the @code{message-reply-headers} variable, which
-is a vector of the following headers: number subject from date id
-references chars lines xref extra.
+The attribute value can be a string, a function with zero arguments
+(the return value will be used), a variable (its value will be used)
+or a list (it will be @code{eval}ed and the return value will be
+used).  The functions and sexps are called/@code{eval}ed in the
+message buffer that is being set up.  The headers of the current
+article are available through the @code{message-reply-headers}
+variable, which is a vector of the following headers: number subject
+from date id references chars lines xref extra.
+
+In the case of a string value, if the @code{match} is a regular
+expression, a @samp{gnus-match-substitute-replacement} is proceed on
+the value to replace the positional parameters @address@hidden by the
+corresponding parenthetical matches (see @xref{Replacing the Text that
+Matched, , Text Replacement, elisp, The Emacs Lisp Reference Manual}.)
 
 @vindex message-reply-headers
 

=== modified file 'lisp/gnus/ChangeLog'
--- a/lisp/gnus/ChangeLog       2010-10-31 10:01:11 +0000
+++ b/lisp/gnus/ChangeLog       2010-10-31 22:31:24 +0000
@@ -1,3 +1,74 @@
+2010-10-31  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * nnimap.el (nnimap-request-accept-article): Erase buffer before
+       appending for easier debugging.
+       (nnimap-wait-for-connection): Take a regexp.
+       (nnimap-request-accept-article): Wait for the continuation line before
+       sending anything unless we're streaming.
+
+       * gnus-art.el (gnus-treat-article): Only inhibit body washing, and
+       leave the header washing to take place.
+
+2010-10-31  Daniel Dehennin  <address@hidden>
+
+       * gnus-msg.el (gnus-configure-posting-styles): Permit the use of
+       regular expression match and replace in posting styles.
+
+2010-10-31  Andrew Cohen  <address@hidden>
+
+       * nnir.el (gnus-group-make-nnir-group,nnir-run-query): Allow searching
+       an entire server.
+       (nnir-get-active): New function.
+       (nnir-run-imap): Use it.
+       (nnir-run-gmane): Who knew, gmane search returns an article score!
+
+       * gnus-srvr.el (gnus-server-mode-map): add binding "G" to search the
+       server on the current line with nnir.
+
+2010-10-31  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * gnus-cite.el (gnus-article-foldable-buffer): Refactor out.
+       (gnus-article-foldable-buffer): Don't fold regions that have a ragged
+       left edge.
+       (gnus-article-foldable-buffer): Skip past the prefix when determining
+       raggedness.
+
+       * gnus-sum.el (gnus-summary-show-article): Add `C-u C-u g' for showing
+       the raw article, and change `C-u g' to show the article without doing
+       treatments.
+
+       * gnus-art.el (gnus-mime-display-alternative): Actually pass the type
+       on to `gnus-treat-article'.
+       (gnus-inhibit-article-treatments): New variable.
+
+       * gnus.el: Autoload gnus-article-fill-cited-long-lines.
+
+       * gnus-art.el (gnus-treatment-function-alist): Have
+       gnus-treat-fill-long-lines point to gnus-article-fill-cited-long-lines.
+       (gnus-treat-fill-long-lines): Change default to fill all text/plain
+       sections.
+
+       * gnus-cite.el (gnus-article-fill-cited-article): Remove unused `force'
+       parameter.
+       (gnus-article-fill-cited-long-lines): New function.
+       (gnus-article-fill-cited-article): Allow filling only long sections.
+
+       * shr.el (shr-find-fill-point): Don't break lines between punctuation
+       and non-punctuation (like after the apostrophe in "'We").
+
+       * gnus-sum.el (gnus-summary-select-article): Make sure
+       gnus-original-article-buffer is alive.
+
+       * nndoc.el (nndoc-dissect-buffer): Reverse the order of the articles to
+       reflect the order they're in in the digest.
+
+       * gnus.el (gnus-group-startup-message): Move point to the start of the
+       buffer.
+
+       * nnimap.el (nnimap-capability): New function.
+       (nnimap-open-connection): Only send AUTHENTICATE PLAIN if LOGINDISABLED
+       is set.
+
 2010-10-31  David Engster  <address@hidden>
 
        * nnmairix.el (nnmairix-get-valid-servers): Return list of strings to

=== modified file 'lisp/gnus/gnus-art.el'
--- a/lisp/gnus/gnus-art.el     2010-10-29 07:22:52 +0000
+++ b/lisp/gnus/gnus-art.el     2010-10-31 22:31:24 +0000
@@ -1590,7 +1590,7 @@
   :link '(custom-manual "(gnus)Customizing Articles")
   :type gnus-article-treat-custom)
 
-(defcustom gnus-treat-fill-long-lines nil
+(defcustom gnus-treat-fill-long-lines '(typep "text/plain")
   "Fill long lines.
 Valid values are nil, t, `head', `first', `last', an integer or a
 predicate.  See Info node `(gnus)Customizing Articles'."
@@ -1664,7 +1664,7 @@
     (gnus-treat-highlight-signature gnus-article-highlight-signature)
     (gnus-treat-buttonize gnus-article-add-buttons)
     (gnus-treat-fill-article gnus-article-fill-cited-article)
-    (gnus-treat-fill-long-lines gnus-article-fill-long-lines)
+    (gnus-treat-fill-long-lines gnus-article-fill-cited-long-lines)
     (gnus-treat-strip-cr gnus-article-remove-cr)
     (gnus-treat-unsplit-urls gnus-article-unsplit-urls)
     (gnus-treat-date-ut gnus-article-date-ut)
@@ -5704,7 +5704,7 @@
          (save-restriction
            (article-goto-body)
            (narrow-to-region (point) (point-max))
-           (gnus-treat-article nil 1 1)
+           (gnus-treat-article nil 1 1 "text/plain")
            (widen)))
        (unless ihandles
          ;; Highlight the headers.
@@ -5992,7 +5992,7 @@
                  (gnus-treat-article
                   nil (length gnus-article-mime-handle-alist)
                   (gnus-article-mime-total-parts)
-                  (mm-handle-media-type handle))))))
+                  (mm-handle-media-type preferred))))))
          (goto-char (point-max))
          (setcdr begend (point-marker)))))
     (when ibegend
@@ -8255,6 +8255,8 @@
 ;;; Treatment top-level handling.
 ;;;
 
+(defvar gnus-inhibit-article-treatments nil)
+
 (defun gnus-treat-article (condition &optional part-number total-parts type)
   (let ((length (- (point-max) (point-min)))
        (alist gnus-treatment-function-alist)
@@ -8277,6 +8279,8 @@
              (symbol-value (car elem))))
       (when (and (or (consp val)
                     treated-type)
+                (or (not gnus-inhibit-article-treatments)
+                    (eq condition 'head))
                 (gnus-treat-predicate val)
                 (or (not (get (car elem) 'highlight))
                     highlightp))

=== modified file 'lisp/gnus/gnus-cite.el'
--- a/lisp/gnus/gnus-cite.el    2010-09-02 00:55:51 +0000
+++ b/lisp/gnus/gnus-cite.el    2010-10-31 22:31:24 +0000
@@ -516,10 +516,15 @@
            (setq m (cdr m))))
        marks))))
 
-(defun gnus-article-fill-cited-article (&optional force width)
+(defun gnus-article-fill-cited-long-lines ()
+  (gnus-article-fill-cited-article nil t))
+
+(defun gnus-article-fill-cited-article (&optional width long-lines)
   "Do word wrapping in the current article.
-If WIDTH (the numerical prefix), use that text width when filling."
-  (interactive (list t current-prefix-arg))
+If WIDTH (the numerical prefix), use that text width when
+filling.  If LONG-LINES, only fill sections that have lines
+longer than the frame width."
+  (interactive "P")
   (with-current-buffer gnus-article-buffer
     (let ((buffer-read-only nil)
          (inhibit-point-motion-hooks t)
@@ -535,8 +540,12 @@
                (fill-prefix
                 (if (string= (cdar marks) "") ""
                   (concat (cdar marks) " ")))
+               (do-fill (not long-lines))
                use-hard-newlines)
-           (fill-region (point-min) (point-max)))
+           (unless do-fill
+             (setq do-fill (gnus-article-foldable-buffer (cdar marks))))
+           (when do-fill
+             (fill-region (point-min) (point-max))))
          (set-marker (caar marks) nil)
          (setq marks (cdr marks)))
        (when marks
@@ -548,6 +557,28 @@
              gnus-cite-loose-attribution-alist nil
              gnus-cite-article nil)))))
 
+(defun gnus-article-foldable-buffer (prefix)
+  (let ((do-fill nil)
+       columns)
+    (goto-char (point-min))
+    (while (not (eobp))
+      (forward-char (length prefix))
+      (skip-chars-forward " \t")
+      (unless (eolp)
+       (let ((elem (assq (current-column) columns)))
+         (unless elem
+           (setq elem (cons (current-column) 0))
+           (push elem columns))
+         (setcdr elem (1+ (cdr elem)))))
+      (end-of-line)
+      (when (> (current-column) (frame-width))
+       (setq do-fill t))
+      (forward-line 1))
+    (and do-fill
+        ;; We know know that there are long lines here, but does this look
+        ;; like code?  Check for ragged edges on the left.
+        (< (length columns) 3))))
+
 (defun gnus-article-natural-long-line-p ()
   "Return true if the current line is long, and it's natural text."
   (save-excursion

=== modified file 'lisp/gnus/gnus-msg.el'
--- a/lisp/gnus/gnus-msg.el     2010-10-30 05:59:34 +0000
+++ b/lisp/gnus/gnus-msg.el     2010-10-31 22:31:24 +0000
@@ -1891,7 +1891,11 @@
            (setq v
                  (cond
                   ((stringp value)
-                   value)
+                   (if (and (stringp match)
+                            (string-match-p "\\\\[&[:digit:]]" value)
+                            (match-beginning 1))
+                       (gnus-match-substitute-replacement value nil nil group)
+                     value))
                   ((or (symbolp value)
                        (functionp value))
                    (cond ((functionp value)

=== modified file 'lisp/gnus/gnus-srvr.el'
--- a/lisp/gnus/gnus-srvr.el    2010-10-04 22:26:51 +0000
+++ b/lisp/gnus/gnus-srvr.el    2010-10-31 22:31:24 +0000
@@ -34,6 +34,8 @@
 (require 'gnus-int)
 (require 'gnus-range)
 
+(autoload 'gnus-group-make-nnir-group "nnir")
+
 (defcustom gnus-server-mode-hook nil
   "Hook run in `gnus-server-mode' buffers."
   :group 'gnus-server
@@ -165,6 +167,8 @@
 
     "g" gnus-server-regenerate-server
 
+    "G" gnus-group-make-nnir-group
+
     "z" gnus-server-compact-server
 
     "\C-c\C-i" gnus-info-find-node

=== modified file 'lisp/gnus/gnus-sum.el'
--- a/lisp/gnus/gnus-sum.el     2010-10-30 15:01:14 +0000
+++ b/lisp/gnus/gnus-sum.el     2010-10-31 22:31:24 +0000
@@ -7596,6 +7596,7 @@
                       (not (get-buffer gnus-original-article-buffer))))
              (and (not gnus-single-article-buffer)
                   (or (null gnus-current-article)
+                      (not (get-buffer gnus-original-article-buffer))
                       (not (eq gnus-current-article article))))
              force)
          ;; The requested article is different from the current article.
@@ -9392,9 +9393,10 @@
 If ARG (the prefix) is a number, show the article with the charset
 defined in `gnus-summary-show-article-charset-alist', or the charset
 input.
-If ARG (the prefix) is non-nil and not a number, show the raw article
-without any article massaging functions being run.  Normally, the key
-strokes are `C-u g'."
+If ARG (the prefix) is non-nil and not a number, show the article,
+but without running any of the article treatment functions
+article.  Normally, the keystroke is `C-u g'.  When using `C-u
+C-u g', show the raw article."
   (interactive "P")
   (cond
    ((numberp arg)
@@ -9436,7 +9438,8 @@
    ((not arg)
     ;; Select the article the normal way.
     (gnus-summary-select-article nil 'force))
-   (t
+   ((equal arg '(16))
+    ;; C-u C-u g
     ;; We have to require this here to make sure that the following
     ;; dynamic binding isn't shadowed by autoloading.
     (require 'gnus-async)
@@ -9454,6 +9457,9 @@
          ;; Set it to nil for safety reason.
          (setq gnus-article-mime-handle-alist nil)
          (setq gnus-article-mime-handles nil)))
+      (gnus-summary-select-article nil 'force)))
+   (t
+    (let ((gnus-inhibit-article-treatments t))
       (gnus-summary-select-article nil 'force))))
   (gnus-summary-goto-subject gnus-current-article)
   (gnus-summary-position-point))

=== modified file 'lisp/gnus/gnus-util.el'
--- a/lisp/gnus/gnus-util.el    2010-10-30 05:59:34 +0000
+++ b/lisp/gnus/gnus-util.el    2010-10-31 22:31:24 +0000
@@ -1982,6 +1982,28 @@
                      (memq elem list))))
     found))
 
+(eval-and-compile
+  (cond
+   ((fboundp 'match-substitute-replacement)
+    (defalias 'gnus-match-substitute-replacement 
'match-substitute-replacement))
+   (t
+    (defun gnus-match-substitute-replacement (replacement &optional fixedcase 
literal string subexp)
+      "Return REPLACEMENT as it will be inserted by `replace-match'.
+In other words, all back-references in the form `\\&' and `\\N'
+are substituted with actual strings matched by the last search.
+Optional FIXEDCASE, LITERAL, STRING and SUBEXP have the same
+meaning as for `replace-match'.
+
+This is the definition of match-substitute-replacement in subr.el from GNU 
Emacs."
+      (let ((match (match-string 0 string)))
+       (save-match-data
+         (set-match-data (mapcar (lambda (x)
+                                   (if (numberp x)
+                                       (- x (match-beginning 0))
+                                     x))
+                                 (match-data t)))
+         (replace-match replacement fixedcase literal match subexp)))))))
+
 (provide 'gnus-util)
 
 ;;; gnus-util.el ends here

=== modified file 'lisp/gnus/gnus.el'
--- a/lisp/gnus/gnus.el 2010-10-30 15:01:14 +0000
+++ b/lisp/gnus/gnus.el 2010-10-31 22:31:24 +0000
@@ -1032,10 +1032,11 @@
   (unless (and
            (fboundp 'find-image)
            (display-graphic-p)
-           ;; Make sure the library defining `image-load-path' is loaded
-           ;; (`find-image' is autoloaded) (and discard the result).  Else, we 
may
-           ;; get "defvar ignored because image-load-path is let-bound" when 
calling
-           ;; `find-image' below.
+           ;; Make sure the library defining `image-load-path' is
+           ;; loaded (`find-image' is autoloaded) (and discard the
+           ;; result).  Else, we may get "defvar ignored because
+           ;; image-load-path is let-bound" when calling `find-image'
+           ;; below.
            (or (find-image '(nil (:type xpm :file "gnus.xpm"))) t)
            (let* ((data-directory (nnheader-find-etc-directory "images/gnus"))
                   (image-load-path (cond (data-directory
@@ -1065,9 +1066,10 @@
                  (insert-char ?\  (max 0 (round (- (window-width)
                                                    (or x (car size))) 2)))
                  (insert-image image))
+              (goto-char (point-min))
                t)))
     (insert
-     (format "              
+     (format "
          _    ___ _             _
          _ ___ __ ___  __    _ ___
          __   _     ___    __  ___
@@ -2772,7 +2774,8 @@
      ("gnus-cite" :interactive t
       gnus-article-highlight-citation gnus-article-hide-citation-maybe
       gnus-article-hide-citation gnus-article-fill-cited-article
-      gnus-article-hide-citation-in-followups)
+      gnus-article-hide-citation-in-followups
+      gnus-article-fill-cited-long-lines)
      ("gnus-kill" gnus-kill gnus-apply-kill-file-internal
       gnus-kill-file-edit-file gnus-kill-file-raise-followups-to-author
       gnus-execute gnus-expunge gnus-batch-kill gnus-batch-score)

=== modified file 'lisp/gnus/nndoc.el'
--- a/lisp/gnus/nndoc.el        2010-10-19 23:06:50 +0000
+++ b/lisp/gnus/nndoc.el        2010-10-31 22:31:24 +0000
@@ -918,7 +918,8 @@
            (setq body-end (point))
            (push (list (incf i) head-begin head-end body-begin body-end
                        (count-lines body-begin body-end))
-                 nndoc-dissection-alist)))))))
+                 nndoc-dissection-alist)))))
+    (setq nndoc-dissection-alist (nreverse nndoc-dissection-alist))))
 
 (defun nndoc-article-begin ()
   (if nndoc-article-begin-function

=== modified file 'lisp/gnus/nnimap.el'
--- a/lisp/gnus/nnimap.el       2010-10-30 12:54:28 +0000
+++ b/lisp/gnus/nnimap.el       2010-10-31 22:31:24 +0000
@@ -382,14 +382,13 @@
            ;; connection and start a STARTTLS connection instead.
            (cond
             ((and (or (and (eq nnimap-stream 'network)
-                           (member "STARTTLS"
-                                   (nnimap-capabilities nnimap-object)))
+                           (nnimap-capability "STARTTLS"))
                       (eq nnimap-stream 'starttls))
                   (fboundp 'open-gnutls-stream))
              (nnimap-command "STARTTLS")
              (gnutls-negotiate (nnimap-process nnimap-object) nil))
             ((and (eq nnimap-stream 'network)
-                  (member "STARTTLS" (nnimap-capabilities nnimap-object)))
+                  (nnimap-capability "STARTTLS"))
              (let ((nnimap-stream 'starttls))
                (let ((tls-process
                       (nnimap-open-connection buffer)))
@@ -416,8 +415,8 @@
                                (nnimap-credentials nnimap-address ports)))))
                  (setq nnimap-object nil)
                (setq login-result
-                     (if (member "AUTH=PLAIN"
-                                 (nnimap-capabilities nnimap-object))
+                     (if (and (nnimap-capability "AUTH=PLAIN")
+                              (nnimap-capability "LOGINDISABLED"))
                          (nnimap-command
                           "AUTHENTICATE PLAIN %s"
                           (base64-encode-string
@@ -439,7 +438,7 @@
                  (delete-process (nnimap-process nnimap-object))
                  (setq nnimap-object nil))))
            (when nnimap-object
-             (when (member "QRESYNC" (nnimap-capabilities nnimap-object))
+             (when (nnimap-capability "QRESYNC")
                (nnimap-command "ENABLE QRESYNC"))
              (nnimap-process nnimap-object))))))))
 
@@ -555,8 +554,11 @@
        (delete-region (point) (point-max)))
       t)))
 
+(defun nnimap-capability (capability)
+  (member capability (nnimap-capabilities nnimap-object)))
+
 (defun nnimap-ver4-p ()
-  (member "IMAP4REV1" (nnimap-capabilities nnimap-object)))
+  (nnimap-capability "IMAP4REV1"))
 
 (defun nnimap-get-partial-article (article parts structure)
   (let ((result
@@ -872,7 +874,7 @@
     (nnimap-command "UID STORE %s +FLAGS.SILENT (\\Deleted)"
                    (nnimap-article-ranges articles))
     (cond
-     ((member "UIDPLUS" (nnimap-capabilities nnimap-object))
+     ((nnimap-capability "UIDPLUS")
       (nnimap-command "UID EXPUNGE %s"
                      (nnimap-article-ranges articles))
       t)
@@ -928,9 +930,12 @@
       (nnimap-add-cr)
       (setq message (buffer-substring-no-properties (point-min) (point-max)))
       (with-current-buffer (nnimap-buffer)
+       (erase-buffer)
        (setq sequence (nnimap-send-command
                        "APPEND %S {%d}" (utf7-encode group t)
                        (length message)))
+       (unless nnimap-streaming
+         (nnimap-wait-for-connection "^[+]"))
        (process-send-string (get-buffer-process (current-buffer)) message)
        (process-send-string (get-buffer-process (current-buffer))
                             (if (nnimap-newlinep nnimap-object)
@@ -1031,7 +1036,7 @@
     (with-current-buffer (nnimap-buffer)
       (erase-buffer)
       (setf (nnimap-group nnimap-object) nil)
-      (let ((qresyncp (member "QRESYNC" (nnimap-capabilities nnimap-object)))
+      (let ((qresyncp (nnimap-capability "QRESYNC"))
            params groups sequences active uidvalidity modseq group)
        ;; Go through the infos and gather the data needed to know
        ;; what and how to request the data.
@@ -1477,12 +1482,14 @@
   (nnimap-wait-for-response sequence)
   (nnimap-parse-response))
 
-(defun nnimap-wait-for-connection ()
+(defun nnimap-wait-for-connection (&optional regexp)
+  (unless regexp
+    (setq regexp "^[*.] .*\n"))
   (let ((process (get-buffer-process (current-buffer))))
     (goto-char (point-min))
     (while (and (memq (process-status process)
                      '(open run))
-               (not (re-search-forward "^[*.] .*\n" nil t)))
+               (not (re-search-forward regexp nil t)))
       (nnheader-accept-process-output process)
       (goto-char (point-min)))
     (forward-line -1)
@@ -1669,7 +1676,7 @@
       (cond
        ;; If the server supports it, we now delete the message we have
        ;; just copied over.
-       ((member "UIDPLUS" (nnimap-capabilities nnimap-object))
+       ((nnimap-capability "UIDPLUS")
        (setq sequence (nnimap-send-command "UID EXPUNGE %s" range)))
        ;; If it doesn't support UID EXPUNGE, then we only expunge if the
        ;; user has configured it.

=== modified file 'lisp/gnus/nnir.el'
--- a/lisp/gnus/nnir.el 2010-10-31 00:13:12 +0000
+++ b/lisp/gnus/nnir.el 2010-10-31 22:31:24 +0000
@@ -491,10 +491,12 @@
        nnir-current-group-marked nil
        nnir-artlist nil)
   (let* ((query (read-string "Query: " nil 'nnir-search-history))
-        (parms (list (cons 'query query))))
+        (parms (list (cons 'query query)))
+        (srv (if (gnus-server-server-name)
+                 "all" "")))
     (add-to-list 'parms (cons 'unique-id (message-unique-id)) t)
     (gnus-group-read-ephemeral-group
-     (concat "nnir:" (prin1-to-string parms)) '(nnir "") t
+     (concat "nnir:" (prin1-to-string parms)) (list 'nnir srv) t
      (cons (current-buffer) gnus-current-window-configuration)
      nil)))
 
@@ -566,7 +568,7 @@
                (equal server nnir-current-server)))
       nnir-artlist
     ;; Cache miss.
-    (setq nnir-artlist (nnir-run-query group)))
+    (setq nnir-artlist (nnir-run-query group server)))
   (with-current-buffer nntp-server-buffer
     (setq nnir-current-query group)
     (when server (setq nnir-current-server server))
@@ -765,6 +767,7 @@
                         (cdr (assoc nnir-imap-default-search-key
                                     nnir-imap-search-arguments))))
           (gnus-inhibit-demon t)
+         (groups (or groups (nnir-get-active srv)))
           artlist)
       (message "Opening server %s" server)
       (apply
@@ -1414,15 +1417,22 @@
          (while (not (eobp))
            (unless (or (eolp) (looking-at "\x0d"))
              (let ((header (nnheader-parse-nov)))
-               (let ((xref (mail-header-xref header)))
+               (let ((xref (mail-header-xref header))
+                     (xscore (string-to-number (cdr (assoc 'X-Score
+                              (mail-header-extra header))))))
                  (when (string-match " \\([^:]+\\)[:/]\\([0-9]+\\)" xref)
                    (push
                     (vector
                      (gnus-group-prefixed-name (match-string 1 xref) srv)
-                     (string-to-number (match-string 2 xref)) 1)
+                     (string-to-number (match-string 2 xref)) xscore)
                     artlist)))))
            (forward-line 1)))
-       (reverse artlist))
+       ;; Sort by score
+       (apply 'vector
+              (sort artlist
+                    (function (lambda (x y)
+                                (> (nnir-artitem-rsv x)
+                                   (nnir-artitem-rsv y)))))))
     (message "Can't search non-gmane nntp groups")))
 
 ;;; Util Code:
@@ -1445,13 +1455,16 @@
          (cons sym (format (cdr mapping) result)))
       (cons sym (read-string prompt)))))
 
-(defun nnir-run-query (query)
+(defun nnir-run-query (query nserver)
   "Invoke appropriate search engine function (see `nnir-engines').
   If some groups were process-marked, run the query for each of the groups
   and concat the results."
   (let ((q (car (read-from-string query)))
-        (groups (nnir-sort-groups-by-server
-                (or gnus-group-marked (list (gnus-group-group-name))))))
+        (groups (if (string= "all-ephemeral" nserver)
+                   (with-current-buffer gnus-server-buffer
+                     (list (list (gnus-server-server-name))))
+                 (nnir-sort-groups-by-server
+                  (or gnus-group-marked (list (gnus-group-group-name)))))))
     (apply 'vconcat
            (mapcar (lambda (x)
                      (let* ((server (car x))
@@ -1551,6 +1564,44 @@
     value)
   nil))
 
+(defun nnir-get-active (srv)
+  (let ((method (gnus-server-to-method srv))
+       groups)
+    (gnus-request-list method)
+    (with-current-buffer nntp-server-buffer
+      (let ((cur (current-buffer))
+           name)
+       (goto-char (point-min))
+       (unless (string= gnus-ignored-newsgroups "")
+         (delete-matching-lines gnus-ignored-newsgroups))
+       ;; We treat NNTP as a special case to avoid problems with
+       ;; garbage group names like `"foo' that appear in some badly
+       ;; managed active files. -jh.
+       (if (eq (car method) 'nntp)
+           (while (not (eobp))
+             (ignore-errors
+               (push (cons
+                      (mm-string-as-unibyte
+                       (buffer-substring
+                        (point)
+                        (progn
+                          (skip-chars-forward "^ \t")
+                          (point))))
+                      (let ((last (read cur)))
+                        (cons (read cur) last)))
+                     groups))
+             (forward-line))
+         (while (not (eobp))
+           (ignore-errors
+             (push (mm-string-as-unibyte
+                    (let ((p (point)))
+                      (skip-chars-forward "^ \t\\\\")
+                      (setq name (buffer-substring (+ p 1) (- (point) 1)))
+                      (gnus-group-full-name name method)))
+                   groups))
+           (forward-line)))))
+    groups))
+
 ;; The end.
 (provide 'nnir)
 

=== modified file 'lisp/gnus/shr.el'
--- a/lisp/gnus/shr.el  2010-10-31 00:13:12 +0000
+++ b/lisp/gnus/shr.el  2010-10-31 22:31:24 +0000
@@ -286,7 +286,9 @@
                            (aref (char-category-set (following-char)) ?>)))
                  (backward-char 1))
              (while (and (>= (setq count (1- count)) 0)
-                         (aref (char-category-set (following-char)) ?>))
+                         (aref (char-category-set (following-char)) ?>)
+                         (aref fill-find-break-point-function-table
+                               (following-char)))
                (forward-char 1)))
            (when (eq (following-char) ? )
              (forward-char 1))


reply via email to

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