(hack-local-variables-prop-line): Bind enable-local-eval.
[bpt/emacs.git] / lisp / gnus.el
index 299abcb..74a6ed2 100644 (file)
@@ -1,6 +1,6 @@
 ;;; gnus.el --- a newsreader for GNU Emacs
 
-;; Copyright (C) 1987,88,89,90,93,94,95 Free Software Foundation, Inc.
+;; Copyright (C) 1987,88,89,90,93,94,95,96 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
@@ -710,6 +710,9 @@ beginning of a line.")
     (article ([summary 0.25 point] 
              (if gnus-carpal [summary-carpal 4]) 
              [article 1.0]))
+    (pipe ([summary 0.25 point] 
+          (if gnus-carpal [summary-carpal 4]) 
+          [pipe 1.0]))
     (server ([server 1.0 point]
             (if gnus-carpal [server-carpal 2])))
     (browse ([browse 1.0 point]
@@ -757,6 +760,7 @@ buffer configuration.")
     (article . gnus-article-buffer)
     (server . gnus-server-buffer)
     (browse . "*Gnus Browse Server*")
+    (pipe . "*Shell Command Output*")
     (edit-group . gnus-group-edit-buffer)
     (edit-server . gnus-server-edit-buffer)
     (group-carpal . gnus-carpal-group-buffer)
@@ -6502,7 +6506,7 @@ Unscored articles will be counted as having a score of zero."
   "Prepare summary buffer from THREADS and indentation LEVEL.  
 THREADS is either a list of `(PARENT [(CHILD1 [(GRANDCHILD ...]...) ...])'  
 or a straight list of headers."
-  (message "Generating summary...")
+  (gnus-message 5 "Generating summary...")
   (let ((level 0)
        thread header number subject stack state gnus-tmp-gathered)
     (if (vectorp (car threads))
@@ -6628,7 +6632,7 @@ or a straight list of headers."
            (setq stack (cons (cons (max 0 level) (nthcdr 1 thread)) stack)))
        (setq level (1+ level))
        (setq threads (cdr (car thread))))))
-  (message "Generating summary...done"))
+  (gnus-message 5 "Generating summary...done"))
 
 
 
@@ -6877,12 +6881,13 @@ If READ-ALL is non-nil, all articles in the group are selected."
       (cond ((or (eq 'tick (car prev)) (eq 'dormant (car prev)))
             ;; Make sure that all ticked articles are a subset of the
             ;; unread/unselected articles.
-            (while m
-              (if (or (memq (car m) gnus-newsgroup-unreads)
-                      (memq (car m) gnus-newsgroup-unselected))
-                  (setq prev m)
-                (setcdr prev (cdr m)))
-              (setq m (cdr m))))
+            ;;(while m
+            ;;  (if (or (memq (car m) gnus-newsgroup-unreads)
+            ;;  (memq (car m) gnus-newsgroup-unselected))
+            ;; (setq prev m)
+            ;; (setcdr prev (cdr m)))
+            ;; (setq m (cdr m)))
+            )
            ((eq 'score (car prev))
             ;; Scored articles should be a subset of
             ;; unread/unselected articles. 
@@ -10417,7 +10422,8 @@ pipe those articles instead."
   (interactive "P")
   (gnus-set-global-variables)
   (let ((gnus-default-article-saver 'gnus-summary-save-in-pipe))
-    (gnus-summary-save-article arg)))
+    (gnus-summary-save-article arg))
+  (gnus-configure-windows 'pipe))
 
 (defun gnus-summary-save-article-mail (&optional arg)
   "Append the current article to an mail file.
@@ -11281,12 +11287,16 @@ how much time has lapsed since DATE."
            ((eq type 'lapsed)
             ;; If the date is seriously mangled, the timezone
             ;; functions are liable to bug out, so we condition-case
-            ;; the entire thing.  
-            (let* ((real-sec (condition-case ()
+            ;; the entire thing.  We call (current-time) once, rather than
+            ;; letting current-time-string and current-time-zone default to
+            ;; it, because that avoids a rare race condition when the time
+            ;; zone changes between those two calls.
+            (let* ((now (current-time))
+                   (real-sec (condition-case ()
                                  (- (gnus-seconds-since-epoch 
                                      (timezone-make-date-arpa-standard
-                                      (current-time-string) 
-                                      (current-time-zone) "UT"))
+                                      (current-time-string now
+                                      (current-time-zone now) "UT"))
                                     (gnus-seconds-since-epoch 
                                      (timezone-make-date-arpa-standard 
                                       date nil "UT")))
@@ -11462,7 +11472,7 @@ Intended to be used with gnus-article-prepare-hook."
            (delete-region (match-beginning 1) (match-end 1))
            (insert
             (timezone-make-date-arpa-standard 
-             date nil (current-time-zone))))))))
+             date)))))))
 
 
 ;; Article mode commands
@@ -11954,6 +11964,8 @@ is returned insted of the status string."
             (nth 1 method) accept-function last)))
 
 (defun gnus-request-accept-article (group &optional last)
+  (goto-char (point-max))
+  (or (bolp) (insert "\n"))
   (let ((func (if (symbolp group) group
                (car (gnus-find-method-for-group group)))))
     (funcall (intern (format "%s-request-accept-article" func))
@@ -12713,6 +12725,12 @@ Returns whether the updating was successful."
       (while (and dormant (< (car dormant) (car active)))
        (setq dormant (cdr dormant)))
       (setq unread (sort (append unselected unread) '<))
+      ;; Weed out duplicates.
+      (let ((un unread))
+       (while (cdr un)
+         (if (eq (car un) (car (cdr un)))
+             (setcdr un (cdr (cdr un)))
+           (setq un (cdr un)))))
       ;; Compute the ranges of read articles by looking at the list of
       ;; unread articles.  
       (while unread