(hack-local-variables-prop-line): Bind enable-local-eval.
[bpt/emacs.git] / lisp / gnus.el
index e750646..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)
@@ -3281,6 +3285,11 @@ As opposed to `gnus', this command will not connect to the local server."
     (gnus (or arg (1- gnus-level-default-subscribed)) t)
     (setq gnus-tmp-prev-perm perm)))
 
+;;;###autoload
+(defun read-news (&optional arg dont-connect)
+  "Read network news.  This is an alias for the `gnus' command."
+  (gnus arg dont-connect))
+
 ;;;###autoload
 (defun gnus (&optional arg dont-connect)
   "Read network news.
@@ -6497,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))
@@ -6623,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"))
 
 
 
@@ -6872,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. 
@@ -10412,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.
@@ -11276,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")))
@@ -11457,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
@@ -11949,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))
@@ -12708,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
@@ -13406,6 +13429,8 @@ If FORCE is non-nil, the .newsrc file is read."
                                 gnus-current-startup-file)))
             ;; Quickly loadable .newsrc.
             (set-buffer (get-buffer-create " *Gnus-newsrc*"))
+            (make-local-variable 'version-control)
+            (setq version-control 'never)
             (setq buffer-file-name (concat gnus-current-startup-file ".eld"))
             (gnus-add-current-to-buffer-list)
             (buffer-disable-undo (current-buffer))
@@ -13480,6 +13505,8 @@ If FORCE is non-nil, the .newsrc file is read."
                        (if ranges (insert ","))))))
              (insert "\n")))
        (setq newsrc (cdr newsrc)))
+      (make-local-variable 'version-control)
+      (setq version-control 'never)
       ;; It has been reported that sometime the modtime on the .newsrc
       ;; file seems to be off. We really do want to overwrite it, so
       ;; we clear the modtime here before saving. It's a bit odd,