*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Sun, 29 Jun 1997 19:36:17 +0000 (19:36 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Sun, 29 Jun 1997 19:36:17 +0000 (19:36 +0000)
12 files changed:
lisp/ChangeLog
lisp/gnus-art.el
lisp/gnus-salt.el
lisp/gnus-start.el
lisp/gnus-sum.el
lisp/gnus-uu.el
lisp/gnus.el
lisp/message.el
lisp/nnfolder.el
lisp/nnml.el
texi/gnus.texi
texi/message.texi

index f05cf12..5cfb4e1 100644 (file)
@@ -1,3 +1,59 @@
+Sun Jun 29 21:32:13 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Gnus v5.4.60 is released.
+
+Sun Jun 29 21:14:27 1997  Hrvoje Niksic  <hniksic@srce.hr>
+
+       * gnus-salt.el: Customized.
+
+1997-06-27  Hrvoje Niksic  <hniksic@srce.hr>
+
+       * gnus-salt.el (gnus-tree-show-summary): New function.
+       (gnus-tree-mode-map): Use it.
+
+Sun Jun 29 20:19:27 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-salt.el (gnus-generate-horizontal-tree): Protect against
+       nil threads.
+
+       * gnus-sum.el (gnus-adjust-marked-articles): Change.
+
+Sun Jun 29 20:19:03 1997  Scott Byer  <byer@adobe.com>
+
+       * gnus-sum.el (gnus-adjust-marked-articles): Improper lists.
+
+1997-06-24  Hrvoje Niksic  <hniksic@srce.hr>
+
+       * gnus-sum.el (gnus-summary-search-article): Inhibit updating tree 
+       buffer.
+
+Sun Jun 29 19:36:48 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-start.el (gnus-activate-group): Ignore zero returns.
+
+       * gnus-salt.el (gnus-generate-vertical-tree): Use a safer
+       line-drawing algorithm.
+
+       * nnml.el (nnml-generate-nov-file): Articles with null bodies are
+       legal. 
+
+Sun Jun 22 15:44:02 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-art.el (article-hide-pgp): Only run hook when hiding pgp. 
+
+       * nnfolder.el (nnfolder-save-buffer): Make sure the directory
+       exists. 
+
+       * gnus-uu.el (gnus-uu-post-news-inews): Didn't work when posting
+       threaded. 
+       (gnus-uu-post-encoded): Include sequence numbers in threaded
+       posts. 
+
+Sat Jun 21 00:17:16 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.el (message-set-auto-save-file-name): Translate / in
+       buffer names.
+
 Wed Jun 18 17:26:35 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Gnus v5.4.59 is released.
index 3999768..7600c43 100644 (file)
@@ -981,8 +981,8 @@ always hide."
            (while (re-search-forward "^- " nil t)
              (gnus-article-hide-text-type
               (match-beginning 0) (match-end 0) 'pgp))
-           (widen)))
-       (run-hooks 'gnus-article-hide-pgp-hook)))))
+           (widen))
+         (run-hooks 'gnus-article-hide-pgp-hook))))))
 
 (defun article-hide-pem (&optional arg)
   "Toggle hiding of any PEM headers and signatures in the current article.
index 10bb67f..fd80bc2 100644 (file)
 (defvar gnus-pick-mode nil
   "Minor mode for providing a pick-and-read interface in Gnus summary buffers.")
 
-(defvar gnus-pick-display-summary nil
-  "*Display summary while reading.")
-
-(defvar gnus-pick-mode-hook nil
-  "Hook run in summary pick mode buffers.")
-
-(defvar gnus-mark-unpicked-articles-as-read nil
-  "*If non-nil, mark all unpicked articles as read.")
-
-(defvar gnus-pick-elegant-flow t
-  "If non-nil, gnus-pick-start-reading will run gnus-summary-next-group when no articles have been picked.")
-
-(defvar gnus-summary-pick-line-format
+(defcustom gnus-pick-display-summary nil
+  "*Display summary while reading."
+  :type 'boolean
+  :group 'gnus-summary-pick)
+
+(defcustom gnus-pick-mode-hook nil
+  "Hook run in summary pick mode buffers."
+  :type 'hook
+  :group 'gnus-summary-pick)
+
+(defcustom gnus-mark-unpicked-articles-as-read nil
+  "*If non-nil, mark all unpicked articles as read."
+  :type 'boolean
+  :group 'gnus-summary-pick)
+
+(defcustom gnus-pick-elegant-flow t
+  "If non-nil, gnus-pick-start-reading will run gnus-summary-next-group when no articles have been picked."
+  :type 'boolean
+  :group 'gnus-summary-pick)
+
+(defcustom gnus-summary-pick-line-format
   "%-5P %U\%R\%z\%I\%(%[%4L: %-20,20n%]%) %s\n"
   "*The format specification of the lines in pick buffers.
-It accepts the same format specs that `gnus-summary-line-format' does.")
+It accepts the same format specs that `gnus-summary-line-format' does."
+  :type 'string
+  :group 'gnus-summary-pick)
 
 ;;; Internal variables.
 
@@ -350,16 +360,22 @@ This must be bound to a button-down mouse event."
 ;;; gnus-tree-mode
 ;;;
 
-(defvar gnus-tree-line-format "%(%[%3,3n%]%)"
-  "Format of tree elements.")
+(defcustom gnus-tree-line-format "%(%[%3,3n%]%)"
+  "Format of tree elements."
+  :type 'string
+  :group 'gnus-summary-tree)
 
-(defvar gnus-tree-minimize-window t
+(defcustom gnus-tree-minimize-window t
   "If non-nil, minimize the tree buffer window.
 If a number, never let the tree buffer grow taller than that number of
-lines.")
+lines."
+  :type 'boolean
+  :group 'gnus-summary-tree)
 
-(defvar gnus-selected-tree-face 'modeline
-  "*Face used for highlighting selected articles in the thread tree.")
+(defcustom gnus-selected-tree-face 'modeline
+  "*Face used for highlighting selected articles in the thread tree."
+  :type 'face
+  :group 'gnus-summary-tree)
 
 (defvar gnus-tree-brackets '((?\[ . ?\]) (?\( . ?\))
                             (?\{ . ?\}) (?< . ?>))
@@ -368,16 +384,24 @@ lines.")
 (defvar gnus-tree-parent-child-edges '(?- ?\\ ?|)
   "Characters used to connect parents with children.")
 
-(defvar gnus-tree-mode-line-format "Gnus: %%b %S %Z"
-  "*The format specification for the tree mode line.")
+(defcustom gnus-tree-mode-line-format "Gnus: %%b %S %Z"
+  "*The format specification for the tree mode line."
+  :type 'string
+  :group 'gnus-summary-tree)
 
-(defvar gnus-generate-tree-function 'gnus-generate-vertical-tree
+(defcustom gnus-generate-tree-function 'gnus-generate-vertical-tree
   "*Function for generating a thread tree.
 Two predefined functions are available:
-`gnus-generate-horizontal-tree' and `gnus-generate-vertical-tree'.")
+`gnus-generate-horizontal-tree' and `gnus-generate-vertical-tree'."
+  :type '(radio (function-item gnus-generate-vertical-tree)
+               (function-item gnus-generate-horizontal-tree)
+               (function :tag "Other" nil))
+  :group 'gnus-summary-tree)
 
-(defvar gnus-tree-mode-hook nil
-  "*Hook run in tree mode buffers.")
+(defcustom gnus-tree-mode-hook nil
+  "*Hook run in tree mode buffers."
+  :type 'hook
+  :group 'gnus-summary-tree)
 
 ;;; Internal variables.
 
@@ -410,6 +434,7 @@ Two predefined functions are available:
    "\r" gnus-tree-select-article
    gnus-mouse-2 gnus-tree-pick-article
    "\C-?" gnus-tree-read-summary-keys
+   "h" gnus-tree-show-summary
 
    "\C-c\C-i" gnus-info-find-node)
 
@@ -460,6 +485,14 @@ Two predefined functions are available:
        (goto-char (or (gnus-overlay-end gnus-selected-tree-overlay) 1)))
       (gnus-tree-minimize))))
 
+(defun gnus-tree-show-summary ()
+  "Reconfigure windows to show summary buffer."
+  (interactive)
+  (if (not (gnus-buffer-live-p gnus-summary-buffer))
+      (error "There is no summary buffer for this tree buffer")
+    (gnus-configure-windows 'article)
+    (gnus-summary-goto-subject gnus-current-article)))
+
 (defun gnus-tree-select-article (article)
   "Select the article under point, if any."
   (interactive (list (gnus-tree-article-number)))
@@ -646,7 +679,9 @@ Two predefined functions are available:
   "Generate a horizontal tree."
   (let* ((dummy (stringp (car thread)))
         (do (or dummy
-                (memq (mail-header-number (car thread)) gnus-tmp-limit)))
+                (and (car thread)
+                     (memq (mail-header-number (car thread))
+                           gnus-tmp-limit))))
         col beg)
     (if (not do)
        ;; We don't want this article.
@@ -718,13 +753,12 @@ Two predefined functions are available:
          (delete-char -1)
          (insert (cadr gnus-tree-parent-child-edges))
          (setq beg (point))
+         (forward-char -1)
          ;; Draw "-" lines leftwards.
-         (while (progn
-                  (unless (bolp)
-                    (forward-char -2))
-                  (= (following-char) ? ))
-           (delete-char 1)
-           (insert (car gnus-tree-parent-child-edges)))
+         (while (= (char-after (1- (point))) ? )
+           (delete-char -1)
+           (insert (car gnus-tree-parent-child-edges))
+           (forward-char -1))
          (goto-char beg)
          (gnus-tree-forward-line 1)))
       (setq dummyp nil)
index aca6c8a..64c0272 100644 (file)
@@ -1284,12 +1284,11 @@ newsgroup."
     "Alter the ACTIVE info for GROUP to reflect the articles in the cache."
     (when gnus-cache-active-hashtb
       (let ((cache-active (gnus-gethash group gnus-cache-active-hashtb)))
-       (and cache-active
-            (< (car cache-active) (car active))
-            (setcar active (car cache-active)))
-       (and cache-active
-            (> (cdr cache-active) (cdr active))
-            (setcdr active (cdr cache-active)))))))
+       (when cache-active
+         (when (< (car cache-active) (car active))
+           (setcar active (car cache-active)))
+         (when (> (cdr cache-active) (cdr active))
+           (setcdr active (cdr cache-active))))))))
 
 (defun gnus-activate-group (group &optional scan dont-check method)
   ;; Check whether a group has been activated or not.
@@ -1309,7 +1308,15 @@ newsgroup."
             (inline (gnus-request-group group dont-check method))
           (error nil)
           (quit nil))
-        (gnus-set-active group (setq active (gnus-parse-active)))
+        (setq active (gnus-parse-active))
+        ;; If there are no articles in the group, the GROUP
+        ;; command may have responded with the `(0 . 0)'.  We
+        ;; ignore this if we already have an active entry
+        ;; for the group.
+        (unless (and (zerop (car active))
+                     (zerop (cdr active))
+                     (gnus-active group))
+          (gnus-set-active group active))
         ;; Return the new active info.
         active)))
 
index fca59a5..27fbd28 100644 (file)
@@ -3826,6 +3826,10 @@ If READ-ALL is non-nil, all articles in the group are selected."
            (set var (delq article (symbol-value var))))))
        ;; Adjust assocs.
        ((memq mark uncompressed)
+       (when (not (listp (car (symbol-value var)))))
+         (set var (list (symbol-value var)))
+       (when (not (listp (cdr articles)))
+         (setq articles (list articles)))
        (while articles
          (when (or (not (consp (setq article (pop articles))))
                    (< (car article) min)
@@ -6341,6 +6345,7 @@ Optional argument BACKWARD means do search for backward.
        (gnus-mark-article-hook nil)    ;Inhibit marking as read.
        (gnus-use-article-prefetch nil)
        (gnus-xmas-force-redisplay nil) ;Inhibit XEmacs redisplay.
+       (gnus-use-trees nil)            ;Inhibit updating tree buffer.
        (sum (current-buffer))
        (found nil)
        point)
index a002f61..ee75ce8 100644 (file)
@@ -1206,7 +1206,6 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
 (defun gnus-uu-grab-articles (articles process-function
                                       &optional sloppy limit no-errors)
   (let ((state 'first)
-       (gnus-asynchronous nil)
        has-been-begin article result-file result-files process-state
        gnus-summary-display-article-function
        gnus-article-display-hook gnus-article-prepare-hook
@@ -1778,7 +1777,7 @@ post the entire file."
 This may not be smart, as no other decoder I have seen are able to
 follow threads when collecting uuencoded articles.  (Well, I have seen
 one package that does that - gnus-uu, but somehow, I don't think that
-counts...) Default is nil."
+counts...)  The default is nil."
   :group 'gnus-extract-post
   :type 'boolean)
 
@@ -1877,28 +1876,7 @@ If no file has been included, the user will be asked for a file."
        (setq file-name gnus-uu-post-inserted-file-name)
       (setq file-name (gnus-uu-post-insert-binary)))
 
-    (if gnus-uu-post-threaded
-       (let ((message-required-news-headers
-              (if (memq 'Message-ID message-required-news-headers)
-                  message-required-news-headers
-                (cons 'Message-ID message-required-news-headers)))
-             gnus-inews-article-hook)
-
-         (setq gnus-inews-article-hook (if (listp gnus-inews-article-hook)
-                                           gnus-inews-article-hook
-                                         (list gnus-inews-article-hook)))
-         (push
-          '(lambda ()
-             (save-excursion
-               (goto-char (point-min))
-               (if (re-search-forward "^Message-ID: \\(.*\\)$" nil t)
-                   (setq gnus-uu-post-message-id
-                         (buffer-substring
-                          (match-beginning 1) (match-end 1)))
-                 (setq gnus-uu-post-message-id nil))))
-          gnus-inews-article-hook)
-         (gnus-uu-post-encoded file-name t))
-      (gnus-uu-post-encoded file-name nil)))
+    (gnus-uu-post-encoded file-name gnus-uu-post-threaded))
   (setq gnus-uu-post-inserted-file-name nil)
   (when gnus-uu-winconf-post-news
     (set-window-configuration gnus-uu-winconf-post-news)))
@@ -1965,12 +1943,12 @@ If no file has been included, the user will be asked for a file."
       (goto-char (point-min))
       (setq length (count-lines 1 (point-max)))
       (setq parts (/ length gnus-uu-post-length))
-      (when (not (< (% length gnus-uu-post-length) 4))
-       (setq parts (1+ parts))))
+      (unless (< (% length gnus-uu-post-length) 4)
+       (incf parts)))
 
     (when gnus-uu-post-separate-description
       (forward-line -1))
-    (kill-region (point) (point-max))
+    (delete-region (point) (point-max))
 
     (goto-char (point-min))
     (re-search-forward
@@ -1979,12 +1957,13 @@ If no file has been included, the user will be asked for a file."
     (setq header (buffer-substring 1 (point)))
 
     (goto-char (point-min))
-    (if (not gnus-uu-post-separate-description)
-       ()
-      (when (and (not threaded) (re-search-forward "^Subject: " nil t))
+    (when gnus-uu-post-separate-description
+      (when (re-search-forward "^Subject: " nil t)
        (end-of-line)
        (insert (format " (0/%d)" parts)))
-      (message-send))
+      (save-excursion
+       (message-send))
+      (setq gnus-uu-post-message-id (message-fetch-field "message-id")))
 
     (save-excursion
       (setq i 1)
@@ -1994,7 +1973,7 @@ If no file has been included, the user will be asked for a file."
        (erase-buffer)
        (insert header)
        (when (and threaded gnus-uu-post-message-id)
-         (insert (format "References: %s\n" gnus-uu-post-message-id)))
+         (insert "References: " gnus-uu-post-message-id "\n"))
        (insert separator)
        (setq whole-len
              (- 62 (length (format top-string "" file-name i parts ""))))
@@ -2009,15 +1988,9 @@ If no file has been included, the user will be asked for a file."
                  (if (= 0 (% whole-len 2)) (1- minlen) minlen) ?-)))
 
        (goto-char (point-min))
-       (if (not (re-search-forward "^Subject: " nil t))
-           ()
-         (if (not threaded)
-             (progn
-               (end-of-line)
-               (insert (format " (%d/%d)" i parts)))
-           (when (or (and (= i 2) gnus-uu-post-separate-description)
-                     (and (= i 1) (not gnus-uu-post-separate-description)))
-             (replace-match "Subject: Re: "))))
+       (when (re-search-forward "^Subject: " nil t)
+         (end-of-line)
+         (insert (format " (%d/%d)" i parts)))
 
        (goto-char (point-max))
        (save-excursion
@@ -2030,10 +2003,9 @@ If no file has been included, the user will be asked for a file."
            (forward-line -4))
          (setq end (point)))
        (insert-buffer-substring uubuf beg end)
-       (insert beg-line)
-       (insert "\n")
+       (insert beg-line "\n")
        (setq beg end)
-       (setq i (1+ i))
+       (incf i)
        (goto-char (point-min))
        (re-search-forward
         (concat "^" (regexp-quote mail-header-separator) "$") nil t)
@@ -2047,12 +2019,14 @@ If no file has been included, the user will be asked for a file."
        (insert beg-line)
        (insert "\n")
        (let (message-sent-message-via)
-         (message-send))))
+         (save-excursion
+           (message-send))
+         (setq gnus-uu-post-message-id
+               (concat (message-fetch-field "references") " "
+                       (message-fetch-field "message-id"))))))
 
-    (when (setq buf (get-buffer send-buffer-name))
-      (kill-buffer buf))
-    (when (setq buf (get-buffer encoded-buffer-name))
-      (kill-buffer buf))
+    (gnus-kill-buffer send-buffer-name)
+    (gnus-kill-buffer encoded-buffer-name)
 
     (when (not gnus-uu-post-separate-description)
       (set-buffer-modified-p nil)
index ed3ff87..467b99a 100644 (file)
   :link '(custom-manual "(gnus)Various Summary Stuff")
   :group 'gnus-summary)
 
+(defgroup gnus-summary-pick nil
+  "Pick mode in the summary buffer."
+  :link '(custom-manual "(gnus)Pick and Read")
+  :prefix "gnus-pick-"
+  :group 'gnus-summary)
+
+(defgroup gnus-summary-tree nil
+  "Tree display of threads in the summary buffer."
+  :link '(custom-manual "(gnus)Tree Display")
+  :prefix "gnus-tree-"
+  :group 'gnus-summary)
+
 ;; Belongs to gnus-uu.el
 (defgroup gnus-extract-view nil
   "Viewing extracted files."
@@ -226,7 +238,7 @@ is restarted, and sometimes reloaded."
   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
-(defconst gnus-version-number "5.4.59"
+(defconst gnus-version-number "5.4.60"
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Gnus v%s" gnus-version-number)
index 87a1657..eb27e36 100644 (file)
@@ -2972,7 +2972,9 @@ Headers already prepared in the buffer are not modified."
                  (concat (file-name-as-directory message-autosave-directory)
                          "msg."
                          (nnheader-replace-chars-in-string
-                          (buffer-name) ?* ?.))))))
+                          (nnheader-replace-chars-in-string
+                           (buffer-name) ?* ?.)
+                          ?/ ?-))))))
       (setq buffer-auto-save-file-name
            (save-excursion
              (prog1
index 8c12e64..f46c134 100644 (file)
@@ -763,6 +763,7 @@ time saver for large mailboxes.")
   "Save the buffer."
   (when (buffer-modified-p)
     (run-hooks 'nnfolder-save-buffer-hook)
+    (gnus-make-directory (file-name-directory (buffer-file-name)))
     (save-buffer)))
 
 (provide 'nnfolder)
index 043912e..ea6f95d 100644 (file)
@@ -759,8 +759,7 @@ all.  This may very well take some time.")
             (search-forward "\n\n" nil t)
             (setq chars (- (point-max) (point)))
             (max 1 (1- (point)))))
-         (when (and (not (= 0 chars))  ; none of them empty files...
-                    (not (= (point-min) (point-max))))
+         (unless (zerop (buffer-size))
            (goto-char (point-min))
            (setq headers (nnml-parse-head chars (caar files)))
            (save-excursion
index 055e162..90b6c2a 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
-@settitle Gnus 5.4.59 Manual
+@settitle Gnus 5.4.60 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -309,7 +309,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Gnus 5.4.59 Manual
+@title Gnus 5.4.60 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -345,7 +345,7 @@ can be gotten by any nefarious means you can think of---@sc{nntp}, local
 spool or your mbox file.  All at the same time, if you want to push your
 luck.
 
-This manual corresponds to Gnus 5.4.59.
+This manual corresponds to Gnus 5.4.60.
 
 @end ifinfo
 
@@ -6754,6 +6754,25 @@ Here's the same thread displayed in a vertical tree buffer:
                         [Paa]
 @end example
 
+If you're using horizontal trees, it might be nice to display the trees
+side-by-side with the summary buffer.  You could add something like the
+following to your @file{.gnus.el} file:
+
+@lisp
+(setq gnus-use-trees t
+      gnus-generate-tree-function 'gnus-generate-horizontal-tree
+      gnus-tree-minimize-window nil)
+(gnus-add-configuration
+ '(article
+   (vertical 1.0
+             (horizontal 0.25
+                         (summary 0.75 point)
+                         (tree 1.0))
+             (article 1.0))))
+@end lisp
+
+@xref{Windows Configuration}.
+
 
 @node Mail Group Commands
 @section Mail Group Commands
@@ -12835,7 +12854,9 @@ frame will be created where picons will be shown.  As you can see,
 instead of the normal @code{1.0} top-level spec, each additional split
 should have a frame parameter alist as the size spec.
 @xref{Frame Parameters, , Frame Parameters, elisp, The GNU Emacs Lisp
-Reference Manual}.
+Reference Manual}.  Under XEmacs, a frame property list will be
+accepted, too---for instance, @code{(height 5 width 15 left -1 top 1)}
+is such a plist.
 
 Here's a list of all possible keys for
 @code{gnus-buffer-configuration}:
index 4e98066..5530719 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message
-@settitle Message 5.4.59 Manual
+@settitle Message 5.4.60 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -39,7 +39,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Message 5.4.59 Manual
+@title Message 5.4.60 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -79,7 +79,7 @@ buffers.
 * Key Index::         List of Message mode keys.
 @end menu
 
-This manual corresponds to Message 5.4.59.  Message is distributed with
+This manual corresponds to Message 5.4.60.  Message is distributed with
 the Gnus distribution bearing the same version number as this manual
 has.