*** empty log message ***
[gnus] / lisp / gnus-sum.el
index 8114b0b..1ea7d13 100644 (file)
@@ -126,7 +126,8 @@ non-nil and non-`some', fill in all gaps that Gnus manages to guess."
                 (const more)
                 (sexp :menu-tag "all" t)))
 
-(defcustom gnus-summary-thread-gathering-function 'gnus-gather-threads-by-subject
+(defcustom gnus-summary-thread-gathering-function
+  'gnus-gather-threads-by-subject
   "Function used for gathering loose threads.
 There are two pre-defined functions: `gnus-gather-threads-by-subject',
 which only takes Subjects into consideration; and
@@ -1311,7 +1312,8 @@ increase the score of each group you read."
     "t" gnus-article-remove-trailing-blank-lines
     "l" gnus-article-strip-leading-blank-lines
     "m" gnus-article-strip-multiple-blank-lines
-    "a" gnus-article-strip-blank-lines)
+    "a" gnus-article-strip-blank-lines
+    "s" gnus-article-strip-leading-space)
 
   (gnus-define-keys (gnus-summary-help-map "H" gnus-summary-mode-map)
     "v" gnus-version
@@ -1513,7 +1515,8 @@ increase the score of each group you read."
         ["Leading" gnus-article-strip-leading-blank-lines t]
         ["Multiple" gnus-article-strip-multiple-blank-lines t]
         ["Trailing" gnus-article-remove-trailing-blank-lines t]
-        ["All of the above" gnus-article-strip-blank-lines t])
+        ["All of the above" gnus-article-strip-blank-lines t]
+        ["Leading space" gnus-article-strip-leading-space t])
        ["Overstrike" gnus-article-treat-overstrike t]
        ["Emphasis" gnus-article-emphasize t]
        ["Word wrap" gnus-article-fill-cited-article t]
@@ -2449,7 +2452,7 @@ the thread are to be displayed."
           (symbolp (car elem))         ; Has to be a symbol in there.
           (not (memq (car elem)
                      '(quit-config to-address to-list to-group)))
-          (progn                       ; So we set it.
+          (ignore-errors               ; So we set it.
             (make-local-variable (car elem))
             (set (car elem) (eval (nth 1 elem))))))))
 
@@ -3190,11 +3193,11 @@ If NO-DISPLAY, don't generate a summary buffer."
    (let ((extract (funcall
                   gnus-extract-address-components
                   (mail-header-from h1))))
-     (or (car extract) (cdr extract)))
+     (or (car extract) (cadr extract) ""))
    (let ((extract (funcall
                   gnus-extract-address-components
                   (mail-header-from h2))))
-     (or (car extract) (cdr extract)))))
+     (or (car extract) (cadr extract) ""))))
 
 (defun gnus-thread-sort-by-author (h1 h2)
   "Sort threads by root author."
@@ -3819,12 +3822,28 @@ If READ-ALL is non-nil, all articles in the group are selected."
        type list newmarked symbol)
     (when info
       ;; Add all marks lists that are non-nil to the list of marks lists.
-      (while types
-       (setq type (pop types))
+      (while (setq type (pop types))
        (when (setq list (symbol-value
                          (setq symbol
                                (intern (format "gnus-newsgroup-%s"
                                                (car type))))))
+
+         ;; Get rid of the entries of the articles that have the
+         ;; default score.
+         (when (and (eq (cdr type) 'score)
+                    gnus-save-score
+                    list)
+           (let* ((arts list)
+                  (prev (cons nil articles))
+                  (all prev))
+             (while arts
+               (if (or (not (consp (car arts)))
+                       (= (cdar arts) gnus-summary-default-score))
+                   (setcdr prev (cdr arts))
+                 (setq prev arts))
+               (setq arts (cdr arts)))
+             (setq list (cdr all))))
+
          (push (cons (cdr type)
                      (if (memq (cdr type) uncompressed) list
                        (gnus-compress-sequence
@@ -3972,7 +3991,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
         xref-hashtb)))))
 
 (defun gnus-group-make-articles-read (group articles)
-  "Update the info of GROUP to say that only ARTICLES are unread."
+  "Update the info of GROUP to say that ARTICLES are read."
   (let* ((num 0)
         (entry (gnus-gethash group gnus-newsrc-hashtb))
         (info (nth 2 entry))
@@ -4104,8 +4123,10 @@ The resulting hash table is returned, or nil if no Xrefs were found."
            ;; Message-ID.
            (progn
              (goto-char p)
-             (setq id (if (search-forward "\nmessage-id: " nil t)
-                          (nnheader-header-value)
+             (setq id (if (search-forward "\nmessage-id:" nil t)
+                          (buffer-substring
+                           (1- (or (search-forward "<" nil t) (point)))
+                           (or (search-forward ">" nil t) (point)))
                         ;; If there was no message-id, we just fake one
                         ;; to make subsequent routines simpler.
                         (nnheader-generate-fake-message-id))))
@@ -5387,7 +5408,7 @@ article."
   (gnus-set-global-variables)
   (let ((article (gnus-summary-article-number))
        (article-window (get-buffer-window gnus-article-buffer t))
-       (endp nil))
+       endp)
     (gnus-configure-windows 'article)
     (if (eq (cdr (assq article gnus-newsgroup-reads)) gnus-canceled-mark)
        (if (and (eq gnus-summary-goto-unread 'never)
@@ -5416,13 +5437,16 @@ article."
     (gnus-summary-recenter)
     (gnus-summary-position-point)))
 
-(defun gnus-summary-prev-page (&optional lines)
+(defun gnus-summary-prev-page (&optional lines move)
   "Show previous page of selected article.
-Argument LINES specifies lines to be scrolled down."
+Argument LINES specifies lines to be scrolled down.
+If MOVE, move to the previous unread article if point is at
+the beginning of the buffer."
   (interactive "P")
   (gnus-set-global-variables)
   (let ((article (gnus-summary-article-number))
-       (article-window (get-buffer-window gnus-article-buffer t)))
+       (article-window (get-buffer-window gnus-article-buffer t))
+       endp)
     (gnus-configure-windows 'article)
     (if (or (null gnus-current-article)
            (null gnus-article-current)
@@ -5433,9 +5457,24 @@ Argument LINES specifies lines to be scrolled down."
       (gnus-summary-recenter)
       (when article-window
        (gnus-eval-in-buffer-window gnus-article-buffer
-         (gnus-article-prev-page lines)))))
+         (setq endp (gnus-article-prev-page lines)))
+       (when (and move endp)
+         (cond (lines
+                (gnus-message 3 "Beginning of message"))
+               ((null lines)
+                (if (and (eq gnus-summary-goto-unread 'never)
+                         (not (gnus-summary-first-article-p article)))
+                    (gnus-summary-prev-article)
+                  (gnus-summary-prev-unread-article))))))))
   (gnus-summary-position-point))
 
+(defun gnus-summary-prev-page-or-article (&optional lines)
+  "Show previous page of selected article.
+Argument LINES specifies lines to be scrolled down.
+If at the beginning of the article, go to the next article."
+  (interactive "P")
+  (gnus-summary-prev-page lines t))
+
 (defun gnus-summary-scroll-up (lines)
   "Scroll up (or down) one line current article.
 Argument LINES specifies lines to be scrolled up (or down if negative)."
@@ -5650,7 +5689,7 @@ If ALL is non-nil, limit strictly to unread articles."
           gnus-killed-mark gnus-kill-file-mark
           gnus-low-score-mark gnus-expirable-mark
           gnus-canceled-mark gnus-catchup-mark gnus-sparse-mark
-          gnus-duplicate-mark)
+          gnus-duplicate-mark gnus-souped-mark)
      'reverse)))
 
 (defalias 'gnus-summary-delete-marked-with 'gnus-summary-limit-exclude-marks)
@@ -8326,16 +8365,11 @@ save those articles instead."
     (gnus-article-setup-buffer)
     (set-buffer gnus-article-buffer)
     (setq buffer-read-only nil)
-    (let ((command (if automatic command (read-string "Command: " command)))
-         ;; Just binding this here doesn't help, because there might
-         ;; be output from the process after exiting the scope of
-         ;; this `let'.
-         ;; (buffer-read-only nil)
-         )
+    (let ((command (if automatic command (read-string "Command: " command))))
       (erase-buffer)
       (insert "$ " command "\n\n")
       (if gnus-view-pseudo-asynchronously
-         (start-process "gnus-execute" nil shell-file-name
+         (start-process "gnus-execute" (current-buffer) shell-file-name
                         shell-command-switch command)
        (call-process shell-file-name nil t nil
                      shell-command-switch command)))))