*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Sat, 7 Mar 1998 16:19:30 +0000 (16:19 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Sat, 7 Mar 1998 16:19:30 +0000 (16:19 +0000)
16 files changed:
lisp/ChangeLog
lisp/gnus-agent.el
lisp/gnus-art.el
lisp/gnus-group.el
lisp/gnus-int.el
lisp/gnus-picon.el
lisp/gnus-sum.el
lisp/gnus-win.el
lisp/gnus.el
lisp/nndoc.el
lisp/nnheader.el
lisp/nnml.el
lisp/nntp.el
texi/ChangeLog
texi/gnus.texi
texi/message.texi

index 9bafbe5..13c3a6a 100644 (file)
@@ -1,3 +1,97 @@
+Sat Mar  7 17:19:04 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Quassia Gnus v0.35 is released.
+
+Sat Mar  7 15:01:57 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-picon.el (gnus-picons-x-face-sentinel): Check whether
+       gnus-picons-x-face-file-name exists.
+
+       * gnus-art.el (gnus-article-read-summary-keys): Move window point
+       in the summary buffer.
+
+       * nndoc.el (nndoc-type-alist): Allow spaces around separator.
+
+       * gnus-sum.el (gnus-summary-edit-parameters): Interactive.
+
+Sat Mar  7 15:00:05 1998  Wes Hardaker  <wjhardaker@ucdavis.edu>
+
+       * gnus-art.el (gnus-article-prepare): Mark articles as
+       downloadable. 
+
+Wed Mar  4 22:33:27 1998  Ken Raeburn  <raeburn@cygnus.com>
+
+       * gnus-int.el (gnus-get-function): New version, caches symbol
+       names.
+
+Fri Mar  6 01:10:22 1998  Ken Raeburn  <raeburn@cygnus.com>
+
+       * nnml.el (nnml-article-to-file): Build pathname using
+       expand-file-name.  (Thanks, Colin Rafferty, for catching
+       this.)
+
+Sat Feb 28 23:33:40 1998  Ken Raeburn  <raeburn@cygnus.com>
+
+       * nnml.el (nnml-article-to-file): Don't add extra "/" when
+       building pathname.
+
+       * nnheader.el (nnheader-file-to-number): Check value of
+       nnheader-numerical-short-files instead of checking if jka-compr is
+       loaded.
+
+1998-03-03  Dave Love  <d.love@dl.ac.uk>
+
+       * nnheader.el (nnheader-parse-head): Fix in-reply-to code. Return
+       nil consistently if not found.
+
+Sat Mar  7 13:50:44 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nntp.el: Check whether the connection died.
+
+1998-03-01  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
+
+       * gnus.texi (Easy Picons): Removed references to
+       `gnus-group-display-picons'.
+       (Hard Picons): Ditto.
+
+Mon Mar  2 16:17:36 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-summary-exit-no-update): Run
+       gnus-summary-prepare-exit-hook here as well.
+
+Sat Feb 28 13:35:26 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nntp.el (nntp-authinforc-file): Changed default.
+       (nntp-authinfo-file): Changed name.
+       (nntp-record-commands): New variable.
+       (nntp-record-command): New function.
+
+       * gnus-agent.el (gnus-agent-group-path): Use real name of group. 
+
+       * gnus-sum.el (gnus-summary-insert-subject): Don't allow nil
+       articles. 
+       (gnus-summary-read-group): Respect backward movement.
+
+1998-03-01  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
+
+       * gnus-win.el (gnus-window-to-buffer): change "*Picons*" to
+       `gnus-picons-buffer'.
+       (gnus-window-to-buffer-helper): Support dynamic picon buffer
+       name (i.e a symbol that names a function to be called).
+       (gnus-configure-frame): Use it.
+       (gnus-delete-windows-in-gnusey-frames): Use it.
+       (gnus-all-windows-visible-p): Use it.
+       (gnus-remove-some-windows): Use it.
+
+       * gnus-picon.el (gnus-get-buffer-name): Use it.
+       (gnus-picons-kill-buffer): New function.
+       (gnus-picons-setup-buffer): New function.
+       (gnus-picons-set-buffer): Use them.
+       (gnus-picons-display-x-face): Put back the `buf' binding: it is
+       needed when `gnus-picons-display-where' is not set to article.
+       Also move the X-Face to the left, near the address.  It seems more
+       logical.
+
 Sat Feb 28 08:27:20 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Quassia Gnus v0.34 is released.
 Sat Feb 28 08:27:20 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Quassia Gnus v0.34 is released.
index f8f353d..b1bc701 100644 (file)
@@ -488,9 +488,9 @@ the actual number of articles toggled is returned."
 (defun gnus-agent-group-path (group)
   "Translate GROUP into a path."
   (if nnmail-use-long-file-names
 (defun gnus-agent-group-path (group)
   "Translate GROUP into a path."
   (if nnmail-use-long-file-names
-      group
+      (gnus-group-real-name group)
     (nnheader-replace-chars-in-string
     (nnheader-replace-chars-in-string
-     (nnheader-translate-file-chars group)
+     (nnheader-translate-file-chars (gnus-group-real-name group))
      ?. ?/)))
 
 \f
      ?. ?/)))
 
 \f
index 215423d..a249eb9 100644 (file)
@@ -2060,10 +2060,14 @@ If ALL-HEADERS is non-nil, no headers are hidden."
                      (cons gnus-newsgroup-name article))
                (set-buffer gnus-summary-buffer)
                (setq gnus-current-article article)
                      (cons gnus-newsgroup-name article))
                (set-buffer gnus-summary-buffer)
                (setq gnus-current-article article)
-               (gnus-summary-mark-article article gnus-canceled-mark))
-             (unless (memq article gnus-newsgroup-sparse)
-               (gnus-error
-                1 "No such article (may have expired or been canceled)")))
+               (if (eq (gnus-article-mark article) gnus-undownloaded-mark)
+                   (progn
+                     (gnus-summary-set-agent-mark article)
+                     (message "Message marked for downloading"))
+                 (gnus-summary-mark-article article gnus-canceled-mark)
+                 (unless (memq article gnus-newsgroup-sparse)
+                   (gnus-error 1 
+                    "No such article (may have expired or been canceled)")))))
          (if (or (eq result 'pseudo) (eq result 'nneething))
              (progn
                (save-excursion
          (if (or (eq result 'pseudo) (eq result 'nneething))
              (progn
                (save-excursion
@@ -2340,7 +2344,7 @@ Argument LINES specifies lines to be scrolled down."
         '("\C-d"))
         (up-to-top
          '("n" "Gn" "p" "Gp"))
         '("\C-d"))
         (up-to-top
          '("n" "Gn" "p" "Gp"))
-       keys)
+       keys new-sum-point)
     (save-excursion
       (set-buffer gnus-article-current-summary)
       (let (gnus-pick-mode)
     (save-excursion
       (set-buffer gnus-article-current-summary)
       (let (gnus-pick-mode)
@@ -2361,22 +2365,26 @@ Argument LINES specifies lines to be scrolled down."
              (ding)
            (unless (member keys nosave-in-article)
              (set-buffer gnus-article-current-summary))
              (ding)
            (unless (member keys nosave-in-article)
              (set-buffer gnus-article-current-summary))
-           (call-interactively func))
+           (call-interactively func)
+           (setq new-sum-point (point)))
          (when (member keys nosave-but-article)
            (pop-to-buffer gnus-article-buffer 'norecord)))
       ;; These commands should restore window configuration.
       (let ((obuf (current-buffer))
            (owin (current-window-configuration))
            (opoint (point))
          (when (member keys nosave-but-article)
            (pop-to-buffer gnus-article-buffer 'norecord)))
       ;; These commands should restore window configuration.
       (let ((obuf (current-buffer))
            (owin (current-window-configuration))
            (opoint (point))
+           (summary gnus-article-current-summary)
            func in-buffer)
        (if not-restore-window
            func in-buffer)
        (if not-restore-window
-           (pop-to-buffer gnus-article-current-summary 'norecord)
-         (switch-to-buffer gnus-article-current-summary 'norecord))
+           (pop-to-buffer summary 'norecord)
+         (switch-to-buffer summary 'norecord))
        (setq in-buffer (current-buffer))
        ;; We disable the pick minor mode commands.
        (if (setq func (let (gnus-pick-mode)
                         (lookup-key (current-local-map) keys)))
        (setq in-buffer (current-buffer))
        ;; We disable the pick minor mode commands.
        (if (setq func (let (gnus-pick-mode)
                         (lookup-key (current-local-map) keys)))
-           (call-interactively func)
+           (progn
+             (call-interactively func)
+             (setq new-sum-point (point)))
          (ding))
        (when (eq in-buffer (current-buffer))
          (set-buffer obuf)
          (ding))
        (when (eq in-buffer (current-buffer))
          (set-buffer obuf)
@@ -2384,7 +2392,10 @@ Argument LINES specifies lines to be scrolled down."
            (set-window-configuration owin))
           (unless (member keys up-to-top)
             (set-window-point (get-buffer-window (current-buffer))
            (set-window-configuration owin))
           (unless (member keys up-to-top)
             (set-window-point (get-buffer-window (current-buffer))
-                              opoint)))))))
+                              opoint))
+         (let ((win (get-buffer-window gnus-article-current-summary)))
+           (when win
+             (set-window-point win new-sum-point))))))))
 
 (defun gnus-article-hide (&optional arg force)
   "Hide all the gruft in the current article.
 
 (defun gnus-article-hide (&optional arg force)
   "Hide all the gruft in the current article.
index d85c820..49a6cd2 100644 (file)
@@ -776,7 +776,7 @@ The following commands are available:
 
 (defun gnus-update-group-mark-positions ()
   (save-excursion
 
 (defun gnus-update-group-mark-positions ()
   (save-excursion
-    (let ((gnus-process-mark 128)
+    (let ((gnus-process-mark ?\200)
          (gnus-group-marked '("dummy.group"))
          (gnus-active-hashtb (make-vector 10 0))
          (topic ""))
          (gnus-group-marked '("dummy.group"))
          (gnus-active-hashtb (make-vector 10 0))
          (topic ""))
index 58f93a7..78a943a 100644 (file)
@@ -134,17 +134,24 @@ If it is down, start it up (again)."
     (error "Attempted use of a nil select method"))
   (when (stringp method)
     (setq method (gnus-server-to-method method)))
     (error "Attempted use of a nil select method"))
   (when (stringp method)
     (setq method (gnus-server-to-method method)))
-  (let ((func (intern (format "%s-%s" (if gnus-agent
-                                         (gnus-agent-get-function method)
-                                       (car method))
-                             function))))
-    ;; If the functions isn't bound, we require the backend in
-    ;; question.
+  ;; Check cache of constructed names.
+  (let* ((method-sym (if gnus-agent
+                        (gnus-agent-get-function method)
+                      (car method)))
+        (method-fns (get method-sym 'gnus-method-functions))
+        (func (let ((method-fnlist-elt (assq function method-fns)))
+                (unless method-fnlist-elt
+                  (setq method-fnlist-elt
+                        (cons function
+                              (intern (format "%s-%s" method-sym function))))
+                  (put method-sym 'gnus-method-functions
+                       (cons method-fnlist-elt method-fns)))
+                (cdr method-fnlist-elt))))
+    ;; Maybe complain if there is no function.
     (unless (fboundp func)
       (require (car method))
       (when (and (not (fboundp func))
                 (not noerror))
     (unless (fboundp func)
       (require (car method))
       (when (and (not (fboundp func))
                 (not noerror))
-       ;; This backend doesn't implement this function.
        (error "No such function: %s" func)))
     func))
 
        (error "No such function: %s" func)))
     func))
 
index 7f04650..02a5ad0 100644 (file)
@@ -184,17 +184,38 @@ arguments necessary for the job.")
 
 (defun gnus-get-buffer-name (variable)
   "Returns the buffer name associated with the contents of a variable."
 
 (defun gnus-get-buffer-name (variable)
   "Returns the buffer name associated with the contents of a variable."
-  (cond ((symbolp variable) (let ((newvar (cdr (assq variable
-                                                    gnus-window-to-buffer))))
-                             (cond ((symbolp newvar)
-                                    (symbol-value newvar))
-                                   ((stringp newvar) newvar))))
-        ((stringp variable) variable)))
+  (buffer-name (get-buffer (gnus-window-to-buffer-helper variable))))
+
+(defun gnus-picons-buffer-name ()
+  (cond ((or (stringp gnus-picons-display-where)
+            (bufferp gnus-picons-display-where))
+        gnus-picons-display-where)
+       ((eq gnus-picons-display-where 'picons)
+        (if gnus-single-article-buffer
+            "*Picons*"
+          (concat "*Picons " gnus-newsgroup-name "*")))
+       (t
+        (gnus-get-buffer-name gnus-picons-display-where))))
+
+(defun gnus-picons-kill-buffer ()
+  (let ((buf (get-buffer (gnus-picons-buffer-name))))
+    (if (buffer-live-p buf)
+       (kill-buffer buf))))
+
+(defun gnus-picons-setup-buffer ()
+  (let ((name (gnus-picons-buffer-name)))
+    (save-excursion
+      (if (get-buffer name)
+         (set-buffer name)
+       (set-buffer (get-buffer-create name))
+       (buffer-disable-undo)
+       (setq buffer-read-only t)
+       (gnus-add-current-to-buffer-list)
+       (add-hook 'gnus-summary-prepare-exit-hook 'gnus-picons-kill-buffer))
+      (current-buffer))))
 
 (defun gnus-picons-set-buffer ()
 
 (defun gnus-picons-set-buffer ()
-  (set-buffer
-   (get-buffer-create (gnus-get-buffer-name gnus-picons-display-where)))
-  (gnus-add-current-to-buffer-list)
+  (set-buffer (gnus-picons-setup-buffer))
   (goto-char (point-min))
   (if (and (eq gnus-picons-display-where 'article)
           gnus-picons-display-article-move-p)
   (goto-char (point-min))
   (if (and (eq gnus-picons-display-where 'article)
           gnus-picons-display-article-move-p)
@@ -233,7 +254,8 @@ arguments necessary for the job.")
     (gnus-picons-set-buffer)
     (gnus-picons-make-annotation (make-glyph gnus-picons-x-face-file-name)
                                 nil 'text)
     (gnus-picons-set-buffer)
     (gnus-picons-make-annotation (make-glyph gnus-picons-x-face-file-name)
                                 nil 'text)
-    (delete-file gnus-picons-x-face-file-name)))
+    (when (file-exists-p gnus-picons-x-face-file-name)
+      (delete-file gnus-picons-x-face-file-name))))
 
 (defun gnus-picons-display-x-face (beg end)
   "Function to display the x-face header in the picons window.
 
 (defun gnus-picons-display-x-face (beg end)
   "Function to display the x-face header in the picons window.
@@ -242,11 +264,16 @@ To use:  (setq gnus-article-x-face-command 'gnus-picons-display-x-face)"
   (if (featurep 'xface)
       ;; Use builtin support
       (save-excursion
   (if (featurep 'xface)
       ;; Use builtin support
       (save-excursion
-       (gnus-picons-set-buffer)
-       (gnus-picons-make-annotation
-        (vector 'xface
-                :data (concat "X-Face: " (buffer-substring beg end)))
-        nil 'text))
+       ;; Don't remove this binding, it is really needed: when
+       ;; `gnus-picons-set-buffer' changes buffer (like when it is
+       ;; set to display picons outside of the article buffer), BEG
+       ;; and END still refer the buffer current now !
+       (let ((buf (current-buffer)))
+         (gnus-picons-set-buffer)
+         (gnus-picons-make-annotation
+          (vector 'xface
+                  :data (concat "X-Face: " (buffer-substring beg end buf)))
+          nil 'text nil nil nil t)))
     ;; convert the x-face header to a .xbm file
     (let* ((process-connection-type nil)
           (process (start-process-shell-command "gnus-x-face" nil 
     ;; convert the x-face header to a .xbm file
     (let* ((process-connection-type nil)
           (process (start-process-shell-command "gnus-x-face" nil 
index 22c941d..6264cd9 100644 (file)
@@ -2601,7 +2601,7 @@ the thread are to be displayed."
             (set (car elem) (eval (nth 1 elem))))))))
 
 (defun gnus-summary-read-group (group &optional show-all no-article
             (set (car elem) (eval (nth 1 elem))))))))
 
 (defun gnus-summary-read-group (group &optional show-all no-article
-                                     kill-buffer no-display)
+                                     kill-buffer no-display backward)
   "Start reading news in newsgroup GROUP.
 If SHOW-ALL is non-nil, already read articles are also listed.
 If NO-ARTICLE is non-nil, no article is selected initially.
   "Start reading news in newsgroup GROUP.
 If SHOW-ALL is non-nil, already read articles are also listed.
 If NO-ARTICLE is non-nil, no article is selected initially.
@@ -2616,6 +2616,11 @@ If NO-DISPLAY, don't generate a summary buffer."
                                  (setq show-all nil)))))
                (eq gnus-auto-select-next 'quietly))
       (set-buffer gnus-group-buffer)
                                  (setq show-all nil)))))
                (eq gnus-auto-select-next 'quietly))
       (set-buffer gnus-group-buffer)
+      ;; The entry function called above goes to the next
+      ;; group automatically, so we go two groups back
+      ;; if we are searching for the previous group.
+      (when backward
+       (gnus-group-prev-unread-group 2))
       (if (not (equal group (gnus-group-group-name)))
          (setq group (gnus-group-group-name))
        (setq group nil)))
       (if (not (equal group (gnus-group-group-name)))
          (setq group (gnus-group-group-name))
        (setq group nil)))
@@ -4653,7 +4658,8 @@ This is meant to be called in `gnus-article-internal-prepare-hook'."
       ;; article we have fetched.
       (when (and (not gnus-show-threads)
                 old-header)
       ;; article we have fetched.
       (when (and (not gnus-show-threads)
                 old-header)
-       (when (setq d (gnus-data-find (mail-header-number old-header)))
+       (when (and number
+                  (setq d (gnus-data-find (mail-header-number old-header))))
          (goto-char (gnus-data-pos d))
          (gnus-data-remove
           number
          (goto-char (gnus-data-pos d))
          (gnus-data-remove
           number
@@ -5169,6 +5175,7 @@ gnus-exit-group-hook is called with no arguments if that value is non-nil."
              gnus-expert-user
              (gnus-y-or-n-p "Discard changes to this group and exit? "))
       (gnus-async-halt-prefetch)
              gnus-expert-user
              (gnus-y-or-n-p "Discard changes to this group and exit? "))
       (gnus-async-halt-prefetch)
+      (gnus-run-hooks 'gnus-summary-prepare-exit-hook)
       ;; If we have several article buffers, we kill them at exit.
       (unless gnus-single-article-buffer
        (gnus-kill-buffer gnus-article-buffer)
       ;; If we have several article buffers, we kill them at exit.
       (unless gnus-single-article-buffer
        (gnus-kill-buffer gnus-article-buffer)
@@ -5386,7 +5393,8 @@ previous group instead."
                       (and unreads (not (zerop unreads))))
                   (gnus-summary-read-group
                    target-group nil no-article
                       (and unreads (not (zerop unreads))))
                   (gnus-summary-read-group
                    target-group nil no-article
-                   (and (buffer-name current-buffer) current-buffer)))
+                   (and (buffer-name current-buffer) current-buffer)
+                   nil backward))
              (setq entered t)
            (setq current-group target-group
                  target-group nil)))))))
              (setq entered t)
            (setq current-group target-group
                  target-group nil)))))))
@@ -6461,6 +6469,7 @@ or `gnus-select-method', no matter what backend the article comes from."
 
 (defun gnus-summary-edit-parameters ()
   "Edit the group parameters of the current group."
 
 (defun gnus-summary-edit-parameters ()
   "Edit the group parameters of the current group."
+  (interactive)
   (gnus-group-edit-group gnus-newsgroup-name 'params))
 
 (defun gnus-summary-enter-digest-group (&optional force)
   (gnus-group-edit-group gnus-newsgroup-name 'params))
 
 (defun gnus-summary-enter-digest-group (&optional force)
index e6a2037..6c29c5b 100644 (file)
@@ -182,7 +182,7 @@ See the Gnus manual for an explanation of the syntax used.")
     (mail . gnus-message-buffer)
     (post-news . gnus-message-buffer)
     (faq . gnus-faq-buffer)
     (mail . gnus-message-buffer)
     (post-news . gnus-message-buffer)
     (faq . gnus-faq-buffer)
-    (picons . "*Picons*")
+    (picons . gnus-picons-buffer-name)
     (tree . gnus-tree-buffer)
     (score-trace . "*Score Trace*")
     (info . gnus-info-buffer)
     (tree . gnus-tree-buffer)
     (score-trace . "*Score Trace*")
     (info . gnus-info-buffer)
@@ -267,6 +267,13 @@ See the Gnus manual for an explanation of the syntax used.")
 
 (defvar gnus-frame-list nil)
 
 
 (defvar gnus-frame-list nil)
 
+(defun gnus-window-to-buffer-helper (obj)
+  (if (symbolp obj)
+      (if (boundp obj)
+         (symbol-value obj)
+       (funcall obj))
+    obj))
+
 (defun gnus-configure-frame (split &optional window)
   "Split WINDOW according to SPLIT."
   (unless window
 (defun gnus-configure-frame (split &optional window)
   "Split WINDOW according to SPLIT."
   (unless window
@@ -300,15 +307,11 @@ See the Gnus manual for an explanation of the syntax used.")
      ;; This is a buffer to be selected.
      ((not (memq type '(frame horizontal vertical)))
       (let ((buffer (cond ((stringp type) type)
      ;; This is a buffer to be selected.
      ((not (memq type '(frame horizontal vertical)))
       (let ((buffer (cond ((stringp type) type)
-                         (t (cdr (assq type gnus-window-to-buffer)))))
-           buf)
+                         (t (cdr (assq type gnus-window-to-buffer))))))
        (unless buffer
          (error "Illegal buffer type: %s" type))
        (unless buffer
          (error "Illegal buffer type: %s" type))
-       (unless (setq buf (get-buffer (if (symbolp buffer)
-                                         (symbol-value buffer) buffer)))
-         (setq buf (get-buffer-create (if (symbolp buffer)
-                                          (symbol-value buffer) buffer))))
-       (switch-to-buffer buf)
+       (switch-to-buffer (get-buffer-create
+                          (gnus-window-to-buffer-helper buffer)))
        ;; We return the window if it has the `point' spec.
        (and (memq 'point split) window)))
      ;; This is a frame split.
        ;; We return the window if it has the `point' spec.
        (and (memq 'point split) window)))
      ;; This is a frame split.
@@ -439,12 +442,7 @@ See the Gnus manual for an explanation of the syntax used.")
   (let ((buffers
         (mapcar
          (lambda (elem)
   (let ((buffers
         (mapcar
          (lambda (elem)
-           (if (symbolp (cdr elem))
-               (when (and (boundp (cdr elem))
-                          (symbol-value (cdr elem)))
-                 (get-buffer (symbol-value (cdr elem))))
-             (when (cdr elem)
-               (get-buffer (cdr elem)))))
+           (get-buffer (gnus-window-to-buffer-helper (cdr elem))))
          gnus-window-to-buffer)))
     (mapcar
      (lambda (frame)
          gnus-window-to-buffer)))
     (mapcar
      (lambda (frame)
@@ -493,12 +491,9 @@ should have point."
                           (t (cdr (assq type gnus-window-to-buffer)))))
        (unless buffer
          (error "Illegal buffer type: %s" type))
                           (t (cdr (assq type gnus-window-to-buffer)))))
        (unless buffer
          (error "Illegal buffer type: %s" type))
-       (when (setq buf (get-buffer (if (symbolp buffer)
-                                       (symbol-value buffer)
-                                     buffer)))
-         (setq win (get-buffer-window buf t)))
-       (if win
-           (when (memq 'point split)
+       (if (and (setq buf (get-buffer (gnus-window-to-buffer-helper buffer)))
+                (setq win (get-buffer-window buf t)))
+           (if (memq 'point split)
              (setq all-visible win))
          (setq all-visible nil)))
        (t
              (setq all-visible win))
          (setq all-visible nil)))
        (t
@@ -517,10 +512,7 @@ should have point."
     (save-excursion
       ;; Remove windows on all known Gnus buffers.
       (while buffers
     (save-excursion
       ;; Remove windows on all known Gnus buffers.
       (while buffers
-       (setq buf (cdar buffers))
-       (when (symbolp buf)
-         (setq buf (and (boundp buf) (symbol-value buf))))
-       (and buf
+       (and (setq buf (gnus-window-to-buffer-helper (cdar buffers)))
             (get-buffer-window buf)
             (progn
               (push buf bufs)
             (get-buffer-window buf)
             (progn
               (push buf bufs)
index f201216..bdc3b73 100644 (file)
@@ -246,7 +246,7 @@ is restarted, and sometimes reloaded."
   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
-(defconst gnus-version-number "0.34"
+(defconst gnus-version-number "0.35"
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Quassia Gnus v%s" gnus-version-number)
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Quassia Gnus v%s" gnus-version-number)
@@ -1674,7 +1674,8 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
       gnus-async-halt-prefetch)
      ("gnus-agent" gnus-open-agent gnus-agent-get-function
       gnus-agent-save-groups gnus-agent-save-active gnus-agent-method-p
       gnus-async-halt-prefetch)
      ("gnus-agent" gnus-open-agent gnus-agent-get-function
       gnus-agent-save-groups gnus-agent-save-active gnus-agent-method-p
-      gnus-agent-get-undownloaded-list gnus-agent-fetch-session)
+      gnus-agent-get-undownloaded-list gnus-agent-fetch-session
+      gnus-summary-set-agent-mark)
      ("gnus-agent" :interactive t
       gnus-unplugged gnus-agentize gnus-agent-batch)
      ("gnus-vm" :interactive t gnus-summary-save-in-vm
      ("gnus-agent" :interactive t
       gnus-unplugged gnus-agentize gnus-agent-batch)
      ("gnus-vm" :interactive t gnus-summary-save-in-vm
index 067b2a8..9c4b235 100644 (file)
@@ -87,8 +87,8 @@ from the document.")
      (file-end . "")
      (subtype digest guess))
     (standard-digest
      (file-end . "")
      (subtype digest guess))
     (standard-digest
-     (first-article . ,(concat "^" (make-string 70 ?-) "\n\n+"))
-     (article-begin . ,(concat "^\n" (make-string 30 ?-) "\n\n+"))
+     (first-article . ,(concat "^" (make-string 70 ?-) "\n *\n+"))
+     (article-begin . ,(concat "^\n" (make-string 30 ?-) "\n *\n+"))
      (prepare-body-function . nndoc-unquote-dashes)
      (body-end-function . nndoc-digest-body-end)
      (head-end . "^ *$")
      (prepare-body-function . nndoc-unquote-dashes)
      (body-end-function . nndoc-digest-body-end)
      (head-end . "^ *$")
index 5751973..b37b539 100644 (file)
@@ -241,8 +241,9 @@ on your system, you could say something like:
                       (setq ref2 (substring in-reply-to (match-beginning 0)
                                             (match-end 0)))
                       (when (> (length ref2) (length ref))
                       (setq ref2 (substring in-reply-to (match-beginning 0)
                                             (match-end 0)))
                       (when (> (length ref2) (length ref))
-                        (setq ref ref2))))
-                "")))
+                        (setq ref ref2)))
+                     ref)
+                nil)))
           ;; Chars.
           0
           ;; Lines.
           ;; Chars.
           0
           ;; Lines.
@@ -562,7 +563,7 @@ If FILE is t, return the buffer contents as a string."
 
 (defsubst nnheader-file-to-number (file)
   "Take a file name and return the article number."
 
 (defsubst nnheader-file-to-number (file)
   "Take a file name and return the article number."
-  (if (not (boundp 'jka-compr-compression-info-list))
+  (if (string= nnheader-numerical-short-files "^[0-9]+$")
       (string-to-int file)
     (string-match nnheader-numerical-short-files file)
     (string-to-int (match-string 0 file))))
       (string-to-int file)
     (string-match nnheader-numerical-short-files file)
     (string-to-int (match-string 0 file))))
index 68dcc5f..c037c73 100644 (file)
@@ -480,8 +480,8 @@ all.  This may very well take some time.")
       ;; Just to make sure nothing went wrong when reading over NFS --
       ;; check once more.
       (when (file-exists-p
       ;; Just to make sure nothing went wrong when reading over NFS --
       ;; check once more.
       (when (file-exists-p
-            (setq file (concat nnml-current-directory "/"
-                               (number-to-string article))))
+            (setq file (expand-file-name (number-to-string article)
+                                         nnml-current-directory)))
        (nnml-update-file-alist t)
        file))))
 
        (nnml-update-file-alist t)
        file))))
 
index 560dae1..8394547 100644 (file)
@@ -166,7 +166,7 @@ server there that you can connect to.  See also
 (defvoo nntp-coding-system-for-write 'binary
   "*Coding system to write to NNTP.")
 
 (defvoo nntp-coding-system-for-write 'binary
   "*Coding system to write to NNTP.")
 
-(defcustom nntp-authinforc-file "~/.authinforc"
+(defcustom nntp-authinfo-file "~/.authinfo"
   "Docstring."
   :type
   '(choice file
   "Docstring."
   :type
   '(choice file
@@ -187,6 +187,9 @@ server there that you can connect to.  See also
 
 ;;; Internal variables.
 
 
 ;;; Internal variables.
 
+(defvar nntp-record-commands nil
+  "*If non-nil, nntp will record all commands in the \"*nntp-log*\" buffer.")
+
 (defvar nntp-have-messaged nil)
 
 (defvar nntp-process-wait-for nil)
 (defvar nntp-have-messaged nil)
 
 (defvar nntp-process-wait-for nil)
@@ -220,10 +223,22 @@ server there that you can connect to.  See also
 
 (defsubst nntp-send-string (process string)
   "Send STRING to PROCESS."
 
 (defsubst nntp-send-string (process string)
   "Send STRING to PROCESS."
+  ;; We need to store the time to provide timeouts, and
+  ;; to store the command so the we can replay the command
+  ;; if the server gives us an AUTHINFO challenge.
   (setq nntp-last-command-time (current-time)
        nntp-last-command string)
   (setq nntp-last-command-time (current-time)
        nntp-last-command string)
+  (when nntp-record-commands
+    (nntp-record-command string))
   (process-send-string process (concat string nntp-end-of-line)))
 
   (process-send-string process (concat string nntp-end-of-line)))
 
+(defun nntp-record-command (string)
+  "Record the command STRING."
+  (save-excursion
+    (set-buffer (get-buffer-create "*nntp-log*"))
+    (insert (format-time-string "%Y%m%dT%H%M%S" (current-time))
+           " " nntp-address " " string "\n")))
+
 (defsubst nntp-wait-for (process wait-for buffer &optional decode discard)
   "Wait for WAIT-FOR to arrive from PROCESS."
   (save-excursion
 (defsubst nntp-wait-for (process wait-for buffer &optional decode discard)
   "Wait for WAIT-FOR to arrive from PROCESS."
   (save-excursion
@@ -236,10 +251,14 @@ server there that you can connect to.  See also
       (nntp-accept-process-output process)
       (goto-char (point-min)))
     (prog1
       (nntp-accept-process-output process)
       (goto-char (point-min)))
     (prog1
-       (if (looking-at "[45]")
-           (progn
-             (nntp-snarf-error-message)
-             nil)
+       (cond
+        ((looking-at "[45]")
+         (progn
+           (nntp-snarf-error-message)
+           nil))
+        ((memq (process-status process) '(open run))
+         (nnheader-report 'nntp "Server closed connection"))
+        (t
          (goto-char (point-max))
          (let ((limit (point-min)))
            (while (not (re-search-backward wait-for limit t))
          (goto-char (point-max))
          (let ((limit (point-min)))
            (while (not (re-search-backward wait-for limit t))
@@ -258,7 +277,7 @@ server there that you can connect to.  See also
              (when nntp-have-messaged
                (setq nntp-have-messaged nil)
                (message ""))
              (when nntp-have-messaged
                (setq nntp-have-messaged nil)
                (message ""))
-             t)))
+             t))))
       (unless discard
        (erase-buffer)))))
 
       (unless discard
        (erase-buffer)))))
 
@@ -658,7 +677,6 @@ server there that you can connect to.  See also
   (let (process)
     (while (setq process (car (pop nntp-connection-alist)))
       (when (memq (process-status process) '(open run))
   (let (process)
     (while (setq process (car (pop nntp-connection-alist)))
       (when (memq (process-status process) '(open run))
-       (set-process-sentinel process nil)
        (ignore-errors
          (nntp-send-string process "QUIT")
          (unless (eq nntp-open-connection-function 'nntp-open-network-stream)
        (ignore-errors
          (nntp-send-string process "QUIT")
          (unless (eq nntp-open-connection-function 'nntp-open-network-stream)
@@ -671,7 +689,6 @@ server there that you can connect to.  See also
   (let (process)
     (while (setq process (pop nntp-connection-list))
       (when (memq (process-status process) '(open run))
   (let (process)
     (while (setq process (pop nntp-connection-list))
       (when (memq (process-status process) '(open run))
-       (set-process-sentinel process nil)
        (ignore-errors
          (nntp-send-string process "QUIT")
          (unless (eq nntp-open-connection-function 'nntp-open-network-stream)
        (ignore-errors
          (nntp-send-string process "QUIT")
          (unless (eq nntp-open-connection-function 'nntp-open-network-stream)
@@ -729,10 +746,10 @@ reading."
 (defun nntp-send-authinfo ()
   "Send the AUTHINFO to the nntp server.
 This function is supposed to be called from `nntp-server-opened-hook'.
 (defun nntp-send-authinfo ()
   "Send the AUTHINFO to the nntp server.
 This function is supposed to be called from `nntp-server-opened-hook'.
-It will look in the \"~/.authinforc\" file for matching entries.  If
+It will look in the \"~/.authinfo\" file for matching entries.  If
 nothing suitable is found there, it will prompt for a user name
 and a password."
 nothing suitable is found there, it will prompt for a user name
 and a password."
-  (let* ((list (gnus-parse-netrc nntp-authinforc-file))
+  (let* ((list (gnus-parse-netrc nntp-authinfo-file))
         (alist (gnus-netrc-machine list nntp-address))
         (user (gnus-netrc-get alist "login"))
         (passwd (gnus-netrc-get alist "password")))
         (alist (gnus-netrc-machine list nntp-address))
         (user (gnus-netrc-get alist "login"))
         (passwd (gnus-netrc-get alist "password")))
index a3b0c50..a492ff1 100644 (file)
@@ -1,3 +1,28 @@
+Sat Mar  7 17:09:49 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi: Took direntries out again, since makeinfo doesn't
+       understand them.
+
+Sat Mar  7 16:14:10 1998  Dan Christensen  <jdc@chow.mat.jhu.edu>
+
+       * gnus.texi (Group Parameters): Mention add-to-list.
+
+Sat Feb 28 14:21:12 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (NNTP): Addition.
+
+1998-03-01  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
+
+       * gnus.texi (Easy Picons): Removed references to
+       `gnus-group-display-picons'.
+       (Hard Picons): Ditto.
+
+1998-03-01  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
+
+       * gnus.texi (Easy Picons): Removed references to
+       `gnus-group-display-picons'.
+       (Hard Picons): Ditto.
+
 Mon Feb 23 18:05:09 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
        * gnus.texi: Direntry not handled by Emacs 19.34.
 Mon Feb 23 18:05:09 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
        * gnus.texi: Direntry not handled by Emacs 19.34.
index 3d28d62..e3b9575 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
-@settitle Quassia Gnus 0.34 Manual
+@settitle Quassia Gnus 0.35 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -316,7 +316,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
 @tex
 
 @titlepage
-@title Quassia Gnus 0.34 Manual
+@title Quassia Gnus 0.35 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -352,7 +352,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.
 
 spool or your mbox file.  All at the same time, if you want to push your
 luck.
 
-This manual corresponds to Quassia Gnus 0.34.
+This manual corresponds to Quassia Gnus 0.35.
 
 @end ifinfo
 
 
 @end ifinfo
 
@@ -1981,6 +1981,12 @@ doing a @kbd{a} in that group.  It is totally ignored when doing a
 followup---except that if it is present in a news group, you'll get mail
 group semantics when doing @kbd{f}.
 
 followup---except that if it is present in a news group, you'll get mail
 group semantics when doing @kbd{f}.
 
+If you do an @kbd{a} command in a mail group and you have neither a
+@code{to-list} group parameter nor a @code{to-address} group paramater,
+then a @code{to-list} group parameter will be added automatically upon
+sending the message if @code{gnus-add-to-list} is set to @code{t}.
+@vindex gnus-add-to-list
+
 If you do an @kbd{a} command in a mail group and you don't have a
 @code{to-list} group parameter, one will be added automatically upon
 sending the message.
 If you do an @kbd{a} command in a mail group and you don't have a
 @code{to-list} group parameter, one will be added automatically upon
 sending the message.
@@ -2096,15 +2102,15 @@ group.  @code{dummy-variable} will be set to the result of the
 
 @end table
 
 
 @end table
 
-Use the @kbd{G p} command to edit group parameters of a group.
-
-@pxref{Topic Parameters}.
+Use the @kbd{G p} command to edit group parameters of a group.  You
+might also be interested in reading about topic parameters (@pxref{Topic
+Parameters}).
 
 Here's an example group parameter list:
 
 @example
 ((to-address . "ding@@gnus.org")
 
 Here's an example group parameter list:
 
 @example
 ((to-address . "ding@@gnus.org")
- (auto-expiry . t))
+ (auto-expire . t))
 @end example
 
 
 @end example
 
 
@@ -8860,13 +8866,13 @@ present in this hook.
 @item nntp-authinfo-function 
 @vindex nntp-authinfo-function 
 @findex nntp-send-authinfo
 @item nntp-authinfo-function 
 @vindex nntp-authinfo-function 
 @findex nntp-send-authinfo
-@vindex nntp-authinforc-file
+@vindex nntp-authinfo-file
 This function will be used to send @samp{AUTHINFO} to the @sc{nntp}
 server.  The default function is @code{nntp-send-authinfo}, which looks
 This function will be used to send @samp{AUTHINFO} to the @sc{nntp}
 server.  The default function is @code{nntp-send-authinfo}, which looks
-through your @file{~/.authinforc} (or whatever you've set the
-@code{nntp-authinforc-file} variable to) for applicable entries.  If
+through your @file{~/.authinfo} (or whatever you've set the
+@code{nntp-authinfo-file} variable to) for applicable entries.  If
 none are found, it will prompt you for a login name and a password.  The
 none are found, it will prompt you for a login name and a password.  The
-format of the @file{~/.authinforc} file is the same as the @code{ftp}
+format of the @file{~/.authinfo} file is the same as the @code{ftp}
 @file{~/.netrc} file, which is defined in the @code{ftp} manual page,
 but here are the salient facts:
 
 @file{~/.netrc} file, which is defined in the @code{ftp} manual page,
 but here are the salient facts:
 
@@ -8894,7 +8900,7 @@ In this example, both login name and password have been supplied for the
 former server, while the latter has only the login name listed, and the
 user will be prompted for the password.
 
 former server, while the latter has only the login name listed, and the
 user will be prompted for the password.
 
-Remember to not leave the @file{~/.authinforc} file world-readable.
+Remember to not leave the @file{~/.authinfo} file world-readable.
 
 @item nntp-server-action-alist 
 @vindex nntp-server-action-alist 
 
 @item nntp-server-action-alist 
 @vindex nntp-server-action-alist 
@@ -9094,6 +9100,13 @@ A hook run before attempting to connect to an @sc{nntp} server.
 If this variable is non-@code{nil}, some noise will be made when a
 server closes connection.
 
 If this variable is non-@code{nil}, some noise will be made when a
 server closes connection.
 
+@item nntp-record-commands
+@vindex nntp-record-commands
+If non-@code{nil}, @code{nntp} will log all commands it sends to the
+@sc{nntp} server (along with a timestep) in the @samp{*nntp-log*}
+buffer.  This is useful if you are debugging a Gnus/@sc{nntp} connection
+that doesn't seem to work.
+
 @end table
 
 
 @end table
 
 
@@ -14554,7 +14567,6 @@ To enable displaying picons, simply put the following line in your
 @lisp
 (setq gnus-use-picons t)
 (add-hook 'gnus-article-display-hook 'gnus-article-display-picons t)
 @lisp
 (setq gnus-use-picons t)
 (add-hook 'gnus-article-display-hook 'gnus-article-display-picons t)
-(add-hook 'gnus-summary-prepare-hook 'gnus-group-display-picons t)
 (add-hook 'gnus-article-display-hook 'gnus-picons-article-display-x-face)
 @end lisp
 
 (add-hook 'gnus-article-display-hook 'gnus-picons-article-display-x-face)
 @end lisp
 
@@ -14634,13 +14646,6 @@ Looks up and displays the picons for the author and the author's domain
 in the @code{gnus-picons-display-where} buffer.  Should be added to the
 @code{gnus-article-display-hook}.
 
 in the @code{gnus-picons-display-where} buffer.  Should be added to the
 @code{gnus-article-display-hook}.
 
-@item gnus-group-display-picons
-@findex gnus-article-display-picons
-Displays picons representing the current group.  This function should
-be added to the @code{gnus-summary-prepare-hook} or to the
-@code{gnus-article-display-hook} if @code{gnus-picons-display-where}
-is set to @code{article}.
-
 @item gnus-picons-article-display-x-face
 @findex gnus-article-display-picons
 Decodes and displays the X-Face header if present.  This function
 @item gnus-picons-article-display-x-face
 @findex gnus-article-display-picons
 Decodes and displays the X-Face header if present.  This function
@@ -18866,7 +18871,7 @@ second is a more complex one:
 ("nnml:my.mail" 3 ((1 . 5) 9 (20 . 55))
                 ((tick (15 . 19)) (replied 3 6 (19 . 3)))
                 (nnml "")
 ("nnml:my.mail" 3 ((1 . 5) 9 (20 . 55))
                 ((tick (15 . 19)) (replied 3 6 (19 . 3)))
                 (nnml "")
-                (auto-expire (to-address "ding@@gnus.org")))
+                ((auto-expire . t) (to-address "ding@@gnus.org")))
 @end example
 
 The first element is the @dfn{group name}---as Gnus knows the group,
 @end example
 
 The first element is the @dfn{group name}---as Gnus knows the group,
index f9142e4..be4b42f 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message
-@settitle Message 0.34 Manual
+@settitle Message 0.35 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -42,7 +42,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
 @tex
 
 @titlepage
-@title Message 0.34 Manual
+@title Message 0.35 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -83,7 +83,7 @@ Message mode buffers.
 * Key Index::         List of Message mode keys.
 @end menu
 
 * Key Index::         List of Message mode keys.
 @end menu
 
-This manual corresponds to Message 0.34.  Message is distributed with
+This manual corresponds to Message 0.35.  Message is distributed with
 the Gnus distribution bearing the same version number as this manual
 has. 
 
 the Gnus distribution bearing the same version number as this manual
 has.