+Mon Apr 27 00:26:01 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.6 is released.
+
+Mon Apr 27 00:07:11 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-art.el (gnus-request-article-this-buffer): Viewing pseudos
+ in nneething groups bugged.
+
+ * gnus-sum.el (gnus-summary-prepare-threads): Dummy roots and
+ dormants and stuff.
+
+Sun Apr 26 23:34:40 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-cache.el (gnus-cache-file-name): Use FULL.
+
+ * nnheader.el (nnheader-translate-file-chars): Allow FULL
+ parameter.
+
+ * gnus-cache.el (gnus-cache-file-name): Translate all colons.
+
+Sun Apr 26 19:27:56 1998 Justin Sheehy <justin@linus.mitre.org>
+
+ * nntp.el (nntp-rlogin-parameters): Doc fix.
+
+Sun Apr 26 19:21:12 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-art.el (gnus-summary-save-in-mail): Not a command.
+
+Sun Apr 26 19:16:03 1998 James Troup <J.J.Troup@scm.brad.ac.uk>
+
+ * gnus-sum.el (gnus-summary-expire-articles-now): Work.
+
+Sun Apr 26 14:34:06 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-build-sparse-threads): Break loops.
+ (gnus-summary-print-article): Save excursion to try to preserve
+ local/bound variable messup.
+
+ * gnus-salt.el (gnus-tree-read-summary-keys): Put point in article
+ buffer.
+
+ * gnus-undo.el (gnus-undo): New group.
+ (gnus-undo-limit): New variable.
+ (gnus-undo-register-1): Use it.
+
+ * gnus-sum.el (gnus-summary-update-info): Don't nix out scores.
+
+ * gnus-start.el (gnus-active-to-gnus-format): Removed "." from
+ quoting.
+
+ * gnus.el (gnus-cache-directory): Moved here.
+ (gnus-predefined-server-alist): Use.
+
+ * message.el (message-autosave-directory): Put back in.
+ (message-set-auto-save-file-name): Use if Gnus isn't running.
+
+ * gnus-util.el (gnus-alive-p): Moved here.
+
+ * message.el (message-autosave-directory): Removed.
+ (message-set-auto-save-file-name): Don't use it.
+
+ * gnus.el: Use gnus-buffer-exists-p throughout.
+
+ * gnus-uu.el (gnus-uu-save-article): Use gnus-kill-buffer.
+
+ * message.el (message-make-in-reply-to): Check more for strange
+ From lines.
+
+ * gnus-art.el (gnus-article-mode): Don't nix out vars.
+
+Sun Apr 26 14:05:40 1998 Frank Bennett <bennett@rumple.soas.ac.uk>
+
+ * nnmail.el (nnmail-move-inbox): Push error'ed mailboxes onto the
+ list.
+
+Sun Apr 26 13:01:53 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-score.el (gnus-score-save): Use it.
+
+ * score-mode.el (score-mode-syntax-table): New table.
+
+ * nnmbox.el: Commentary fix.
+
+Sun Apr 26 12:59:00 1998 Richard Stallman <rms@santafe.edu>
+
+ * message.el (message-mode): New adaptive fill defaults.
+
+Sun Apr 26 12:50:38 1998 Jim Radford <radford@robby.caltech.edu>
+
+ * gnus-start.el (gnus-active-to-gnus-format): Groups that start
+ with dots.
+
+1998-04-11 Richard Stallman <rms@sucrose.gnu.org>
+
+ * gnus/gnus-art.el (gnus-emphasis-alist): Use nth, not caddr.
+
+Sat Apr 25 15:33:57 1998 Kim-Minh Kaplan <KimMinh.Kaplan@utopia.eunet.fr>
+
+ * gnus-sum.el (gnus-build-sparse-threads): Handle loops.
+
+Sat Apr 25 15:09:54 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.el (gnus-valid-select-methods): nngateway is post-mail.
+
Fri Apr 24 21:32:14 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Gnus v5.6.5 is released.
(lambda (spec)
(list
(format format (car spec) (cadr spec))
- 2 3 (intern (format "gnus-emphasis-%s" (caddr spec)))))
+ 2 3 (intern (format "gnus-emphasis-%s" (nth 2 spec)))))
types)))
"*Alist that says how to fontify certain phrases.
Each item looks like this:
"Append this article to Rmail file.
Optional argument FILENAME specifies file name.
Directory to save to is default to `gnus-article-save-directory'."
- (interactive)
(setq filename (gnus-read-save-file-name
"Save %s in rmail file:" filename
gnus-rmail-save-name gnus-newsgroup-name
"Append this article to Unix mail file.
Optional argument FILENAME specifies file name.
Directory to save to is default to `gnus-article-save-directory'."
- (interactive)
(setq filename (gnus-read-save-file-name
"Save %s in Unix mail file:" filename
gnus-mail-save-name gnus-newsgroup-name
"Append this article to file.
Optional argument FILENAME specifies file name.
Directory to save to is default to `gnus-article-save-directory'."
- (interactive)
(setq filename (gnus-read-save-file-name
"Save %s in file:" filename
gnus-file-save-name gnus-newsgroup-name
"Write this article to a file.
Optional argument FILENAME specifies file name.
The directory to save in defaults to `gnus-article-save-directory'."
- (interactive)
(gnus-summary-save-in-file nil t))
(defun gnus-summary-save-body-in-file (&optional filename)
"Append this article body to a file.
Optional argument FILENAME specifies file name.
The directory to save in defaults to `gnus-article-save-directory'."
- (interactive)
(setq filename (gnus-read-save-file-name
"Save %s body in file:" filename
gnus-file-save-name gnus-newsgroup-name
(defun gnus-summary-save-in-pipe (&optional command)
"Pipe this article to subprocess."
- (interactive)
(setq command
(cond ((eq command 'default)
gnus-last-shell-command)
(use-local-map gnus-article-mode-map)
(gnus-update-format-specifications nil 'article-mode)
(set (make-local-variable 'page-delimiter) gnus-page-delimiter)
- (set (make-local-variable 'gnus-page-broken) nil)
- (set (make-local-variable 'gnus-button-marker-list) nil)
- (set (make-local-variable 'gnus-article-current-summary) nil)
+ (make-local-variable 'gnus-page-broken)
+ (make-local-variable 'gnus-button-marker-list)
+ (make-local-variable 'gnus-article-current-summary)
(gnus-set-default-directory)
(buffer-disable-undo (current-buffer))
(setq buffer-read-only t)
(when (and (numberp article)
gnus-summary-buffer
(get-buffer gnus-summary-buffer)
- (buffer-name (get-buffer gnus-summary-buffer)))
+ (gnus-buffer-exists-p gnus-summary-buffer))
(save-excursion
(set-buffer gnus-summary-buffer)
(let ((header (gnus-summary-article-header article)))
(let ((method (gnus-find-method-for-group
gnus-newsgroup-name)))
- (if (not (eq (car method) 'nneething))
- ()
+ (when (and (eq (car method) 'nneething)
+ (vectorp header))
(let ((dir (concat (file-name-as-directory (nth 1 method))
(mail-header-subject header))))
(when (file-directory-p dir)
((and (numberp article)
gnus-summary-buffer
(get-buffer gnus-summary-buffer)
- (buffer-name (get-buffer gnus-summary-buffer))
+ (gnus-buffer-exists-p gnus-summary-buffer)
(eq (cdr (save-excursion
(set-buffer gnus-summary-buffer)
(assq article gnus-newsgroup-reads)))
(buffer-name (get-buffer gnus-article-buffer))))
(save-excursion
(if (get-buffer gnus-original-article-buffer)
- (set-buffer (get-buffer gnus-original-article-buffer))
+ (set-buffer gnus-original-article-buffer)
(set-buffer (get-buffer-create gnus-original-article-buffer))
(buffer-disable-undo (current-buffer))
(setq major-mode 'gnus-original-article-mode)
(eval-when-compile
(require 'gnus-sum))
-(defgroup gnus-cache nil
- "Cache interface."
- :group 'gnus)
-
-(defcustom gnus-cache-directory
- (nnheader-concat gnus-directory "cache/")
- "*The directory where cached articles will be stored."
- :group 'gnus-cache
- :type 'directory)
-
(defcustom gnus-cache-active-file
(concat (file-name-as-directory gnus-cache-directory) "active")
"*The cache active file."
;; Translate the first colon into a slash.
(when (string-match ":" group)
(aset group (match-beginning 0) ?/))
- (nnheader-replace-chars-in-string group ?. ?/)))))
+ (nnheader-replace-chars-in-string group ?. ?/)))
+ t))
(if (stringp article) article (int-to-string article))))
(defun gnus-cache-update-article (group article)
(gnus-draft-setup article gnus-newsgroup-name)
(push
`((lambda ()
- (when (buffer-name (get-buffer ,gnus-summary-buffer))
+ (when (gnus-buffer-exists-p ,gnus-summary-buffer)
(save-excursion
- (set-buffer (get-buffer ,gnus-summary-buffer))
+ (set-buffer ,gnus-summary-buffer)
(gnus-cache-possibly-remove-article ,article nil nil nil t)))))
message-send-actions)))
(message-add-action
`(set-window-configuration ,winconf) 'exit 'postpone 'kill)
(message-add-action
- `(when (buffer-name (get-buffer ,buffer))
+ `(when (gnus-buffer-exists-p ,buffer)
(save-excursion
- (set-buffer (get-buffer ,buffer))
+ (set-buffer ,buffer)
,(when article
`(gnus-summary-mark-article-as-replied ,article))))
'send))
(message-supersede)
(push
`((lambda ()
- (when (buffer-name (get-buffer ,gnus-summary-buffer))
+ (when (gnus-buffer-exists-p ,gnus-summary-buffer)
(save-excursion
- (set-buffer (get-buffer ,gnus-summary-buffer))
+ (set-buffer ,gnus-summary-buffer)
(gnus-cache-possibly-remove-article ,article nil nil nil t)
(gnus-summary-mark-as-read ,article gnus-canceled-mark)))))
message-send-actions))))
(let ((article-buffer (or article-buffer gnus-article-buffer))
end beg contents)
(if (not (and (get-buffer article-buffer)
- (buffer-name (get-buffer article-buffer))))
+ (gnus-buffer-exists-p article-buffer)))
(error "Can't find any article buffer")
(save-excursion
(set-buffer article-buffer)
(defun gnus-update-summary-mark-positions ()
"Compute where the summary marks are to go."
(save-excursion
- (when (and gnus-summary-buffer
- (get-buffer gnus-summary-buffer)
- (buffer-name (get-buffer gnus-summary-buffer)))
+ (when (gnus-buffer-exists-p gnus-summary-buffer)
(set-buffer gnus-summary-buffer))
(let ((gnus-replied-mark 129)
(gnus-score-below-mark 130)
(let ((headers gnus-newsgroup-headers)
(deps gnus-newsgroup-dependencies)
header references generation relations
- cthread subject child end pthread relation new-child)
+ cthread subject child end pthread relation new-child children)
;; First we create an alist of generations/relations, where
;; generations is how much we trust the relation, and the relation
;; is parent/child.
(while (search-backward ">" nil t)
(setq end (1+ (point)))
(when (search-backward "<" nil t)
- (unless (string= (setq new-child (buffer-substring (point) end))
- child)
+ ;; This is a rather weak for of loop-checking, but if
+ ;; an article contains the same Message-ID twice in
+ ;; the References header, this will catch it. I haven't
+ ;; considered other forms of thread loop preventions,
+ ;; though -- I think one should probably go through
+ ;; the entire thread after building it and break
+ ;; any loops that are found.
+ (unless (member (setq new-child (buffer-substring (point) end))
+ children)
(push (list (incf generation)
child (setq child new-child)
subject)
- relations))))
+ relations)
+ (push child children))))
(push (list (1+ generation) child nil subject) relations)
(erase-buffer)))
(kill-buffer (current-buffer)))
(while (or threads stack gnus-tmp-new-adopts new-roots)
(if (and (= gnus-tmp-level 0)
- (not (setq gnus-tmp-dummy-line nil))
(or (not stack)
(= (caar stack) 0))
(not gnus-tmp-false-parent)
(save-excursion
(gnus-group-best-unread-group exclude-group))))
-(defun gnus-summary-find-next (&optional unread article backward)
+(defun gnus-summary-find-next (&optional unread article backward undownloaded)
(if backward (gnus-summary-find-prev)
(let* ((dummy (gnus-summary-article-intangible-p))
(article (or article (gnus-summary-article-number)))
(if unread
(progn
(while arts
- (when (gnus-data-unread-p (car arts))
+ (when (or (and undownloaded
+ (eq gnus-undownloaded-mark
+ (gnus-data-mark (car arts))))
+ (gnus-data-unread-p (car arts)))
(setq result (car arts)
arts nil))
(setq arts (cdr arts)))
t)))
(unless (listp (cdr gnus-newsgroup-killed))
(setq gnus-newsgroup-killed (list gnus-newsgroup-killed)))
- (let ((headers gnus-newsgroup-headers))
- (when (and (not gnus-save-score)
- (not non-destructive))
- (setq gnus-newsgroup-scored nil))
+ (let ((headers gnus-newsgroup-headers)
+ (gnus-newsgroup-scored
+ (if (and (not gnus-save-score)
+ (not non-destructive))
+ nil
+ gnus-newsgroup-scored)))
;; Set the new ranges of read articles.
(save-excursion
(set-buffer gnus-group-buffer)
(gnus-kill-buffer gnus-original-article-buffer)))
(cond (gnus-kill-summary-on-exit
(when (and gnus-use-trees
- (and (get-buffer buffer)
- (buffer-name (get-buffer buffer))))
+ (gnus-buffer-exists-p buffer))
(save-excursion
- (set-buffer (get-buffer buffer))
+ (set-buffer buffer)
(gnus-tree-close gnus-newsgroup-name)))
(gnus-kill-buffer buffer))
- ((and (get-buffer buffer)
- (buffer-name (get-buffer buffer)))
+ ((gnus-buffer-exists-p buffer)
(save-excursion
(set-buffer buffer)
(gnus-deaden-summary))))))
;; Walking around summary lines.
-(defun gnus-summary-first-subject (&optional unread)
+(defun gnus-summary-first-subject (&optional unread undownloaded)
"Go to the first unread subject.
If UNREAD is non-nil, go to the first unread article.
Returns the article selected or nil if there are no unread articles."
(t
(let ((data gnus-newsgroup-data))
(while (and data
- (not (gnus-data-unread-p (car data))))
+ (and (not (and undownloaded
+ (eq gnus-undownloaded-mark
+ (gnus-data-mark (car data)))))
+ (not (gnus-data-unread-p (car data)))))
(setq data (cdr data)))
(when data
(goto-char (gnus-data-pos (car data)))
(let ((article (gnus-summary-article-number))
(article-window (get-buffer-window gnus-article-buffer t))
endp)
+ ;; If the buffer is empty, we have no article.
+ (unless article
+ (error "No article to select"))
(gnus-configure-windows 'article)
(if (eq (cdr (assq article gnus-newsgroup-reads)) gnus-canceled-mark)
(if (and (eq gnus-summary-goto-unread 'never)
(concat "("
(mail-header-date gnus-current-headers) ")"))))
(gnus-run-hooks 'gnus-ps-print-hook)
- (ps-print-buffer-with-faces filename)))
+ (save-excursion
+ (ps-print-buffer-with-faces filename))))
(kill-buffer buffer))))))
(defun gnus-summary-show-article (&optional arg)
This means that *all* articles that are marked as expirable will be
deleted forever, right now."
(interactive)
- (unless gnus-expert-user
- (gnus-yes-or-no-p
- "Are you really, really, really sure you want to delete all these messages? ")
- (error "Phew!"))
+ (or gnus-expert-user
+ (gnus-yes-or-no-p
+ "Are you really, really, really sure you want to delete all these messages? ")
+ (error "Phew!"))
(gnus-summary-expire-articles t))
;; Suggested by Jack Vinson <vinson@unagi.cis.upenn.edu>.
;; We actually mark all articles as canceled, which we
;; have to do when using auto-expiry or adaptive scoring.
(gnus-summary-show-all-threads)
- (when (gnus-summary-first-subject (not all))
+ (when (gnus-summary-first-subject (not all) t)
(while (and
(if to-here (< (point) to-here) t)
(gnus-summary-mark-article-as-read gnus-catchup-mark)
- (gnus-summary-find-next (not all)))))
+ (gnus-summary-find-next (not all) nil nil t))))
(gnus-set-mode-line 'summary))
t))
(gnus-summary-position-point)))
mouse-selection-click-count-buffer buffer-display-table
font-lock-defaults user-full-name user-login-name
gnus-newsgroup-name gnus-article-x-face-too-ugly
- mail-mode-hook enable-multibyte-characters)))
+ mail-mode-hook enable-multibyte-characters
+ adaptive-fill-first-line-regexp adaptive-fill-regexp)))
(maybe-bind '(mail-mode-hook
- enable-multibyte-characters browse-url-browser-function))
+ enable-multibyte-characters browse-url-browser-function
+ adaptive-fill-first-line-regexp adaptive-fill-regexp))
(maybe-fbind '(color-instance-rgb-components
make-color-instance color-instance-name specifier-instance
device-type device-class get-popup-menu-response event-object
:type 'file
:group 'message-headers)
-(defcustom message-autosave-directory
- (nnheader-concat message-directory "drafts/")
- "*Directory where Message autosaves buffers.
-If nil, Message won't autosave."
- :group 'message-buffers
- :type 'directory)
-
(defcustom message-forward-start-separator
(concat (mime-make-tag "message" "rfc822") "\n")
"*Delimiter inserted before forwarded messages."
The default is `abbrev', which uses mailabbrev. nil switches
mail aliases off.")
+(defcustom message-autosave-directory
+ (nnheader-concat message-directory "drafts/")
+ "*Directory where Message autosaves buffers if Gnus isn't running.
+If nil, Message won't autosave."
+ :group 'message-buffers
+ :type 'directory)
+
;;; Internal variables.
;;; Well, not really internal.
(autoload 'nndraft-request-expire-articles "nndraft")
(autoload 'gnus-open-server "gnus-int")
(autoload 'gnus-request-post "gnus-int")
+ (autoload 'gnus-alive-p "gnus-util")
(autoload 'rmail-output "rmail"))
\f
(concat (regexp-quote mail-header-separator)
"$\\|[ \t]*[-_][-_][-_]+$\\|"
"-- $\\|"
- ;;!!! Uhm... shurely this can't be right.
+ ;;!!! Uhm... shurely this can't be right?
"[> " (regexp-quote message-yank-prefix) "]+$\\|"
paragraph-start))
(setq paragraph-separate
(unless (string-match "XEmacs" emacs-version)
(set (make-local-variable 'font-lock-defaults)
'(message-font-lock-keywords t)))
+ (make-local-variable 'adaptive-fill-regexp)
+ (setq adaptive-fill-regexp
+ (concat "[ \t]*[-a-z0-9A-Z]*>+[ \t]*\\|" adaptive-fill-regexp))
+ (unless (boundp 'adaptive-fill-first-line-regexp)
+ (setq adaptive-fill-first-line-regexp nil))
+ (make-local-variable 'adaptive-fill-first-line-regexp)
+ (setq adaptive-fill-first-line-regexp
+ (concat "[ \t]*[-a-z0-9A-Z]*>+[ \t]*\\|"
+ adaptive-fill-first-line-regexp))
(run-hooks 'text-mode-hook 'message-mode-hook))
\f
(name-default (concat "*message* " mail-trimmed-to))
(name (if enter-string
(read-string "New buffer name: " name-default)
- name-default))
- (default-directory
- (if message-autosave-directory
- (file-name-as-directory message-autosave-directory)
- default-directory)))
+ name-default)))
(rename-buffer name t)))))
(defun message-fill-yanked-message (&optional justifyp)
(when from
(let ((stop-pos
(string-match " *at \\| *@ \\| *(\\| *<" from)))
- (concat (if stop-pos (substring from 0 stop-pos) from)
+ (concat (if (and stop-pos
+ (not (zerop stop-pos)))
+ (substring from 0 stop-pos) from)
"'s message of \""
(if (or (not date) (string= date ""))
"(unknown date)" date)
(defun message-set-auto-save-file-name ()
"Associate the message buffer with a file in the drafts directory."
(when message-autosave-directory
- (setq message-draft-article (nndraft-request-associate-buffer "drafts"))
+ (if (gnus-alive-p)
+ (setq message-draft-article
+ (nndraft-request-associate-buffer "drafts"))
+ (setq buffer-file-name (expand-file-name "*message*"
+ message-autosave-directory))
+ (setq buffer-auto-save-file-name (make-auto-save-file-name)))
(clear-visited-file-modtime)))
(defun message-disassociate-draft ()
"Fold continuation lines in the current buffer."
(nnheader-replace-regexp "\\(\r?\n[ \t]+\\)+" " "))
-(defun nnheader-translate-file-chars (file)
+(defun nnheader-translate-file-chars (file &optional full)
+ "Translate FILE into something that can be a file name.
+If FULL, translate everything."
(if (null nnheader-file-name-translation-alist)
;; No translation is necessary.
file
- ;; We translate -- but only the file name. We leave the directory
- ;; alone.
(let* ((i 0)
trans leaf path len)
- (if (string-match "/[^/]+\\'" file)
- ;; This is needed on NT's and stuff.
- (setq leaf (substring file (1+ (match-beginning 0)))
- path (substring file 0 (1+ (match-beginning 0))))
- ;; Fall back on this.
- (setq leaf (file-name-nondirectory file)
- path (file-name-directory file)))
+ (if full
+ ;; Do complete translation.
+ (setq leaf file
+ path "")
+ ;; We translate -- but only the file name. We leave the directory
+ ;; alone.
+ (if (string-match "/[^/]+\\'" file)
+ ;; This is needed on NT's and stuff.
+ (setq leaf (substring file (1+ (match-beginning 0)))
+ path (substring file 0 (1+ (match-beginning 0))))
+ ;; Fall back on this.
+ (setq leaf (file-name-nondirectory file)
+ path (file-name-directory file))))
(setq len (length leaf))
(while (< i len)
(when (setq trans (cdr (assq (aref leaf i)
"Incoming mail can be split according to this fancy variable.
To enable this, set `nnmail-split-methods' to `nnmail-split-fancy'.
-The format is this variable is SPLIT, where SPLIT can be one of
+The format of this variable is SPLIT, where SPLIT can be one of
the following:
GROUP: Mail will be stored in GROUP (a string).
nil errors nil inbox tofile)
(when nnmail-internal-password
(list nnmail-internal-password)))))))
+ (push inbox nnmail-moved-inboxes)
(if (and (not (buffer-modified-p errors))
(zerop result))
;; No output => movemail won
(progn
(unless popmail
(when (file-exists-p tofile)
- (set-file-modes tofile nnmail-default-file-modes)))
- (push inbox nnmail-moved-inboxes))
+ (set-file-modes tofile nnmail-default-file-modes))))
(set-buffer errors)
;; There may be a warning about older revisions. We
;; ignore those.
(progn
(unless popmail
(when (file-exists-p tofile)
- (set-file-modes tofile nnmail-default-file-modes)))
- (push inbox nnmail-moved-inboxes))
+ (set-file-modes
+ tofile nnmail-default-file-modes))))
;; Probably a real error.
(subst-char-in-region (point-min) (point-max) ?\n ?\ )
(goto-char (point-max))
makeinfo -o $* $<; \
fi
-dvi: gnus.dvi message.dvi
+dvi: gnus.dvi message.dvi refcard.dvi
.texi.dvi :
$(PERL) -n -e 'print unless (/\@iflatex/ .. /\@end iflatex/)' $< > gnustmp.texi
@end table
+Also @pxref{(message)Header Commands} for more information.
+
@node Summary Post Commands
@subsection Summary Post Commands
(@code{gnus-uu-post-news}). (@pxref{Uuencoding and Posting}).
@end table
+Also @pxref{(message)Header Commands} for more information.
+
@node Canceling and Superseding
@section Canceling Articles
* ding Gnus:: New things in Gnus 5.0/5.1, the first new Gnus.
* September Gnus:: The Thing Formally Known As Gnus 5.3/5.3.
* Red Gnus:: Third time best---Gnus 5.4/5.5.
-* Quassia Gnus:: Two times two is four, or Gnus 5.6.5.
+* Quassia Gnus:: Two times two is four, or Gnus 5.6.6.
@end menu
These lists are, of course, just @emph{short} overviews of the
@node Quassia Gnus
@subsubsection Quassia Gnus
-New features in Gnus 5.6.5:
+New features in Gnus 5.6.6:
@itemize @bullet