+Sat Mar 1 03:51:18 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.4.16 is released.
+
+Sat Mar 1 00:04:09 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-set-mode-line): Possibly take into account the
+ buffer name.
+
+ * gnus-srvr.el (gnus-server-prepare): Try to make sure we only
+ insert servers once.
+
+ * gnus-sum.el (gnus-summary-walk-group-buffer): Don't move point
+ much.
+
+ * gnus-group.el (gnus-group-update-group): Don't move point.
+
+ * gnus-xmas.el (gnus-xmas-force-redisplay): Changed default to
+ nil.
+ (gnus-xmas-switch-horizontal-scrollbar-off): New function.
+ (gnus-xmas-redefine): Use it.
+
+ * nnfolder.el (nnfolder-active-number): Don't save active here.
+
+ * gnus-sum.el (gnus-summary-reparent-thread): Use the original
+ article.
+
+Fri Feb 28 01:01:33 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-start.el (gnus-1): Pass ARG on to listing.
+ (gnus-started-hook): New.
+ (gnus-1): Use it.
+
+ * gnus-group.el (gnus-group-get-new-news): List using ARG if ARG
+ is higher than current listing.
+
+Tue Feb 25 23:28:47 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nntp.el (nntp-retrieve-headers): Go to the next-to-last line.
+
+Fri Feb 21 00:28:37 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-group.el (gnus-group-rename-group): Rename to right name.
+
+ * nnmail.el (nnmail-process-babyl-mail-format): Allow continuation
+ Message-IDs.
+ (nnmail-process-unix-mail-format): Ditto.
+ (nnmail-process-mmdf-mail-format): Ditto.
+
+ * nnml.el (nnml-update-file-alist): New function.
+ (nnml-retrieve-headers): Use it.
+ (nnml-request-move-article): Delete zipped files.
+ (nnml-request-replace-article): Write to gzipped, if wanted.
+
+Thu Feb 20 18:36:22 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-picon.el (gnus-picons-display-where): Doc fix.
+
+ * gnus-start.el (gnus-read-newsrc-el-file): Offer to break.
+
+ * nnmail.el (nnmail-search-unix-mail-delim): Exclude newlines from
+ matches.
+
Thu Feb 20 04:16:50 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Gnus v5.4.15 is released.
echo "(provide 'gnus-load)" >> gnus-load.el
echo >> gnus-load.el
echo ";;; gnus-load.el ends here" >> gnus-load.el
+
+distclean:
+ rm -f *.orig *.rej *.elc *~
+
"Update all lines where GROUP appear.
If VISIBLE-ONLY is non-nil, the group won't be displayed if it isn't
already."
- (save-excursion
+ ;; Can't use `save-excursion' here, so we do it manually.
+ (let ((buf (current-buffer))
+ mark)
(set-buffer gnus-group-buffer)
+ (setq mark (point-marker))
;; The buffer may be narrowed.
(save-restriction
(widen)
(run-hooks 'gnus-group-update-group-hook))))
(when gnus-group-update-group-function
(funcall gnus-group-update-group-function group))
- (gnus-group-set-mode-line)))))
+ (gnus-group-set-mode-line)))
+ (goto-char mark)
+ (set-marker mark nil)
+ (set-buffer buf)))
(defun gnus-group-set-mode-line ()
"Update the mode line in the group buffer."
;; We find the proper prefixed name.
(setq new-name
- (if (equal (gnus-group-real-name new-name) new-name)
+ (if (gnus-group-native-p group)
;; Native group.
new-name
;; Foreign group.
(let ((gnus-read-active-file (if arg nil gnus-read-active-file)))
(gnus-get-unread-articles arg)))
(run-hooks 'gnus-after-getting-new-news-hook)
- (gnus-group-list-groups))
+ (gnus-group-list-groups (and (numberp arg)
+ (max (car gnus-group-list-mode) arg))))
(defun gnus-group-get-new-news-this-group (&optional n)
"Check for newly arrived news in the current group (and the N-1 next groups).
:group 'picons)
(defcustom gnus-picons-display-where 'picons
- "Where to display the group and article icons."
+ "Where to display the group and article icons.
+Legal values are `article' and `picons'."
:type '(choice symbol string)
:group 'picons)
(setq gnus-inserted-opened-servers nil)
;; First we do the real list of servers.
(while alist
- (push (caar alist) done)
- (cdr (setq server (pop alist)))
- (when (and server (car server) (cdr server))
- (gnus-server-insert-server-line (car server) (cdr server))))
+ (unless (member (caar alist) done)
+ (push (caar alist) done)
+ (cdr (setq server (pop alist)))
+ (when (and server (car server) (cdr server))
+ (gnus-server-insert-server-line (car server) (cdr server)))))
;; Then we insert the list of servers that have been opened in
;; this session.
(while opened
:group 'gnus-start
:type 'hook)
+(defcustom gnus-started-hook nil
+ "A hook called as the last thing after startup."
+ :group 'gnus-start
+ :type 'hook)
+
(defcustom gnus-get-new-news-hook nil
"A hook run just before Gnus checks for new news."
:group 'gnus-group-new
(eq major-mode 'gnus-group-mode)))
(progn
(switch-to-buffer gnus-group-buffer)
- (gnus-group-get-new-news))
+ (gnus-group-get-new-news
+ (and (numberp arg)
+ (> arg 0)
+ (max (car gnus-group-list-mode) arg))))
(gnus-splash)
(gnus-clear-system)
(gnus-group-list-groups level)
(gnus-group-first-unread-group)
(gnus-configure-windows 'group)
- (gnus-group-set-mode-line))))))
+ (gnus-group-set-mode-line)
+ (run-hooks 'gnus-started-hook))))))
;;;###autoload
(defun gnus-unload ()
(condition-case nil
(load ding-file t t t)
(error
- (gnus-error 1 "Error in %s" ding-file)))
+ (ding)
+ (unless (gnus-yes-or-no-p
+ (format "Error in %s; continue? " ding-file))
+ (error "Error in %s" ding-file))))
(when gnus-newsrc-assoc
(setq gnus-newsrc-alist gnus-newsrc-assoc)))
(gnus-make-hashtable-from-newsrc-alist)
(setq mode-string (eval mformat))
(setq max-len (max 4 (if gnus-mode-non-string-length
(- (window-width)
- gnus-mode-non-string-length)
+ gnus-mode-non-string-length
+ (if (string-match "%%b" mode-string)
+ (length (buffer-name))
+ 0))
(length mode-string))))
;; We might have to chop a bit of the string off...
(when (> (length mode-string) max-len)
;; headers using HEAD.
(if (or (not also-fetch-heads)
(not sequence))
+ ;; We (probably) got all the headers.
(nreverse headers)
- (let ((gnus-nov-is-evil t)
- (nntp-nov-is-evil t))
+ (let ((gnus-nov-is-evil t))
(nconc
(nreverse headers)
(when (gnus-retrieve-headers sequence group)
(unless (gnus-ephemeral-group-p gnus-newsgroup-name)
(gnus-summary-jump-to-group gnus-newsgroup-name))
(let ((cmd last-command-char)
+ (point
+ (save-excursion
+ (set-buffer gnus-group-buffer)
+ (point)))
(group
(if (eq gnus-keep-same-level 'best)
(gnus-summary-best-group gnus-newsgroup-name)
(t
(when (gnus-key-press-event-p last-input-event)
(gnus-summary-walk-group-buffer
- gnus-newsgroup-name cmd unread backward))))))))
+ gnus-newsgroup-name cmd unread backward point))))))))
-(defun gnus-summary-walk-group-buffer (from-group cmd unread backward)
+(defun gnus-summary-walk-group-buffer (from-group cmd unread backward start)
(let ((keystrokes '((?\C-n (gnus-group-next-unread-group 1))
(?\C-p (gnus-group-prev-unread-group 1))))
(cursor-in-echo-area t)
keve key group ended)
(save-excursion
(set-buffer gnus-group-buffer)
- (gnus-summary-jump-to-group from-group)
+ (goto-char start)
(setq group
(if (eq gnus-keep-same-level 'best)
(gnus-summary-best-group gnus-newsgroup-name)
(gnus-summary-goto-subject article)))
(defun gnus-summary-reparent-thread ()
- "Make current article child of the marked (or previous) article.
+ "Make the current article child of the marked (or previous) article.
Note that the re-threading will only work if `gnus-thread-ignore-subject'
is non-nil or the Subject: of both articles are the same."
(save-window-excursion
(let ((gnus-article-buffer " *reparent*")
(current-article (gnus-summary-article-number))
- ; first grab the marked article, otherwise one line up.
+ ;; First grab the marked article, otherwise one line up.
(parent-article (if (not (null gnus-newsgroup-processable))
(car gnus-newsgroup-processable)
(save-excursion
(unless (and message-id (not (equal message-id "")))
(error "No message-id in desired parent."))
(gnus-summary-select-article t t nil current-article)
- (set-buffer gnus-article-buffer)
- (setq buffer-read-only nil)
+ (set-buffer gnus-original-article-buffer)
(let ((buf (format "%s" (buffer-string))))
- (erase-buffer)
- (insert buf))
- (goto-char (point-min))
- (if (search-forward-regexp "^References: " nil t)
- (insert message-id " " )
- (insert "References: " message-id "\n"))
- (unless (gnus-request-replace-article current-article
- (car gnus-article-current)
- gnus-article-buffer)
- (error "Couldn't replace article."))
+ (nnheader-temp-write nil
+ (insert buf)
+ (goto-char (point-min))
+ (if (search-forward-regexp "^References: " nil t)
+ (insert message-id " " )
+ (insert "References: " message-id "\n"))
+ (unless (gnus-request-replace-article
+ current-article (car gnus-article-current)
+ (current-buffer))
+ (error "Couldn't replace article."))))
(set-buffer gnus-summary-buffer)
(gnus-summary-unmark-all-processable)
(gnus-summary-rethread-current)
(set-extent-face gnus-newsgroup-selected-overlay
gnus-summary-selected-face)))
-(defvar gnus-xmas-force-redisplay t
+(defvar gnus-xmas-force-redisplay nil
"If non-nil, force a redisplay before recentering the summary buffer.
This is ugly, but it works around a bug in `window-displayed-height'.")
+(defun gnus-xmas-switch-horizontal-scrollbar-off ()
+ (set-specifier scrollbar-height (cons (current-buffer) 0)))
+
(defun gnus-xmas-summary-recenter ()
"\"Center\" point in the summary window.
If `gnus-auto-center-summary' is nil, or the article buffer isn't
(add-hook 'gnus-group-mode-hook 'gnus-xmas-setup-group-toolbar)
(add-hook 'gnus-summary-mode-hook 'gnus-xmas-setup-summary-toolbar)
+ (add-hook 'gnus-summary-mode-hook 'gnus-xmas-switch-horizontal-scrollbar-off)
+
(when (and (<= emacs-major-version 19)
(<= emacs-minor-version 13))
(setq gnus-article-x-face-too-ugly (when (eq (device-type) 'tty)
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "5.4.15"
+(defconst gnus-version-number "5.4.16"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Gnus v%s" gnus-version-number)
(push (list group (setq active (cons 1 1)))
nnfolder-group-alist))
(cdr active))
- (nnmail-save-active nnfolder-group-alist nnfolder-active-file)
(nnfolder-possibly-activate-groups group)))))
(goto-char (point-max))
;; Find the Message-ID header.
(save-excursion
- (if (re-search-backward "^Message-ID:[ \t]*\\(<[^>]*>\\)" nil t)
+ (if (re-search-backward
+ "^Message-ID[ \t]*:[ \n\t]*\\(<[^>]*>\\)" nil t)
(setq message-id (buffer-substring (match-beginning 1)
(match-end 1)))
;; There is no Message-ID here, so we create one.
(save-excursion
- (when (re-search-backward "^Message-ID:" nil t)
+ (when (re-search-backward "^Message-ID[ \t]*:" nil t)
(beginning-of-line)
(insert "Original-")))
(forward-line -1)
(forward-line 1)
(while (looking-at ">From ")
(forward-line 1))
- (looking-at "[^ \t:]+[ \t]*:")))
+ (looking-at "[^ \n\t:]+[ \n\t]*:")))
(setq found 'yes)))))
(beginning-of-line)
(eq found 'yes)))
(forward-line 1)
(while (looking-at ">From ")
(forward-line 1))
- (looking-at "[^ \t:]+[ \t]*:")))
+ (looking-at "[^ \n\t:]+[ \n\t]*:")))
(setq found 'yes)))))
(beginning-of-line)
(eq found 'yes)))
(point))))
;; Find the Message-ID header.
(goto-char (point-min))
- (if (re-search-forward "^Message-ID:[ \t]*\\(<[^>]+>\\)" nil t)
+ (if (re-search-forward "^Message-ID[ \t]*:[ \n\t]*\\(<[^>]+>\\)" nil t)
(setq message-id (match-string 1))
(save-excursion
- (when (re-search-forward "^Message-ID:" nil t)
+ (when (re-search-forward "^Message-ID[ \t]*:" nil t)
(beginning-of-line)
(insert "Original-")))
;; There is no Message-ID here, so we create one.
(point))))
;; Find the Message-ID header.
(goto-char (point-min))
- (if (re-search-forward "^Message-ID:[ \t]*\\(<[^>]+>\\)" nil t)
+ (if (re-search-forward "^Message-ID[ \t]*:[ \n\t]*\\(<[^>]+>\\)" nil t)
(setq message-id (match-string 1))
;; There is no Message-ID here, so we create one.
(save-excursion
- (when (re-search-backward "^Message-ID:" nil t)
+ (when (re-search-backward "^Message-ID[ \t]*:" nil t)
(beginning-of-line)
(insert "Original-")))
(forward-line 1)
(let ((case-fold-search t)
(newid (nnmail-message-id)))
(goto-char (point-min))
- (when (re-search-forward "^message-id:" nil t)
+ (when (re-search-forward "^message-id[ \t]*:" nil t)
(beginning-of-line)
(insert "Original-"))
(beginning-of-line)
(save-restriction
(message-narrow-to-head)
(let ((case-fold-search t))
- (unless (re-search-forward "^Message-ID:" nil t)
+ (unless (re-search-forward "^Message-ID[ \t]*:" nil t)
(insert "Message-ID: " (nnmail-message-id) "\n")))))
(defun nnmail-write-region (start end filename &optional append visit lockname)
(nnmh-request-article article group server)
(save-excursion
(set-buffer buf)
+ (erase-buffer)
(insert-buffer-substring nntp-server-buffer)
(setq result (eval accept-form))
(kill-buffer (current-buffer))
beg article)
(if (stringp (car sequence))
'headers
- (unless nnml-article-file-alist
- (setq nnml-article-file-alist
- (nnheader-article-to-file-alist nnml-current-directory)))
(if (nnml-retrieve-headers-with-nov sequence fetch-old)
'nov
(while sequence
(setq article (car sequence))
- (setq file
- (concat nnml-current-directory
- (or (cdr (assq article nnml-article-file-alist))
- "")))
+ (setq file (nnml-article-to-file article))
(when (and (file-exists-p file)
(not (file-directory-p file)))
(insert (format "221 %d Article retrieved.\n" article))
article rest mod-time number)
(nnmail-activate 'nnml)
- (unless nnml-article-file-alist
- (setq nnml-article-file-alist
- (nnheader-article-to-file-alist nnml-current-directory)))
-
(while (and articles is-old)
- (when (setq article
- (assq (setq number (pop articles))
- nnml-article-file-alist))
- (setq article (concat nnml-current-directory (cdr article)))
+ (when (setq article (nnml-article-to-file (setq number (pop articles))))
(when (setq mod-time (nth 5 (file-attributes article)))
(if (and (nnml-deletable-article-p group number)
(setq is-old
(let ((buf (get-buffer-create " *nnml move*"))
result)
(nnml-possibly-change-directory group server)
- (unless nnml-article-file-alist
- (setq nnml-article-file-alist
- (nnheader-article-to-file-alist nnml-current-directory)))
+ (nnml-update-file-alist)
(and
(nnml-deletable-article-p group article)
(nnml-request-article article group server)
(nnml-possibly-change-directory group server)
(condition-case ()
(funcall nnmail-delete-file-function
- (concat nnml-current-directory
- (int-to-string article)))
+ (nnml-article-to-file article))
(file-error nil))
(nnml-nov-delete-article group article)
(when last
(progn
(nnmail-write-region
(point-min) (point-max)
- (concat nnml-current-directory
- (int-to-string article))
+ (or (nnml-article-to-file article)
+ (concat nnml-current-directory
+ (int-to-string article)))
nil (if (nnheader-be-verbose 5) nil 'nomesg))
t)
(error nil))
;;; Internal functions.
(defun nnml-article-to-file (article)
- (unless nnml-article-file-alist
- (setq nnml-article-file-alist
- (nnheader-article-to-file-alist nnml-current-directory)))
+ (nnml-update-file-alist)
(let (file)
(when (setq file (cdr (assq article nnml-article-file-alist)))
(concat nnml-current-directory file))))
(defun nnml-deletable-article-p (group article)
"Say whether ARTICLE in GROUP can be deleted."
- (let (file path)
- (when (setq file (cdr (assq article nnml-article-file-alist)))
- (setq path (concat nnml-current-directory file))
+ (let (path)
+ (when (setq path (nnml-article-to-file article))
(when (file-writable-p path)
(or (not nnmail-keep-last-article)
(not (eq (cdr (nth 1 (assoc group nnml-group-alist)))
(setf (car active) num)))))))
t))
+(defun nnml-update-file-alist ()
+ (unless nnml-article-file-alist
+ (setq nnml-article-file-alist
+ (nnheader-article-to-file-alist nnml-current-directory))))
+
(provide 'nnml)
;;; nnml.el ends here
(re-search-backward "^[0-9]" nil t)
(when (looking-at "^[23]")
(while (progn
- (goto-char (- (point-max) 3))
+ (goto-char (point-max))
+ (forward-line -1)
(not (looking-at "^\\.\r?\n")))
(nntp-accept-response)))
(and (numberp nntp-large-newsgroup)
(nntp-wait-for-string "^\r*200")
(beginning-of-line)
(delete-region (point-min) (point))
- proc)
- )
+ proc))
(defun nntp-find-group-and-number ()
(save-excursion
+Fri Feb 28 23:23:31 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Archived Messages): Clarify.
+ (Fuzzy Matching): New.
+
+Mon Feb 24 23:41:57 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * message.texi (Compatibility): New.
+
Thu Feb 20 03:29:17 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
* gnus.texi (Foreign Groups): Addition.
veryclean:
make clean
rm -f gnus.dvi gnus.ps
+
+distclean:
+ make clean
+ rm -f *.orig *.rej *.elc *~ gnus gnus-[0-9] gnus-[0-9][0-9]
+ rm -f message message-[0-9] widget custom
@vindex gnus-startup-hook
A hook that is run after starting up Gnus successfully.
+@item gnus-started-hook
+@vindex gnus-started-hook
+A hook that is run as the very last thing after starting up Gnus
+successfully.
+
@item gnus-check-bogus-newsgroups
@vindex gnus-check-bogus-newsgroups
If non-@code{nil}, Gnus will check for and delete all bogus groups at
@cindex fuzzy article gathering
If you set this variable to the special value @code{fuzzy}, Gnus will
-use a fuzzy string comparison algorithm on the subjects.
+use a fuzzy string comparison algorithm on the subjects (@pxref{Fuzzy
+Matching}).
@item gnus-simplify-subject-fuzzy-regexp
@vindex gnus-simplify-subject-fuzzy-regexp
when doing thread commands. If this variable is @code{nil}, articles in
the same thread with different subjects will not be included in the
operation in question. If this variable is @code{fuzzy}, only articles
-that have subjects that are fuzzily equal will be included.
+that have subjects that are fuzzily equal will be included (@pxref{Fuzzy
+Matching}).
@node Sorting
@cindex archived messages
@cindex sent messages
-Gnus provides a few different methods for storing the mail you send.
-The default method is to use the @dfn{archive virtual server} to store
-the mail. If you want to disable this completely, the
+Gnus provides a few different methods for storing the mail and news you
+send. The default method is to use the @dfn{archive virtual server} to
+store the messages. If you want to disable this completely, the
@code{gnus-message-archive-group} variable should be @code{nil}, which
is the default.
nice---@samp{misc-mail-september-1995}, or whatever. New messages will
continue to be stored in the old (now empty) group.
-That's the default method of archiving sent mail. Gnus also a different
-way for the people who don't like the default method. In that case you
-should set @code{gnus-message-archive-group} to @code{nil}; this will
-disable archiving.
+That's the default method of archiving sent messages. Gnus also a
+different way for the people who don't like the default method. In that
+case you should set @code{gnus-message-archive-group} to @code{nil};
+this will disable archiving.
XEmacs 19.13 doesn't have @code{format-time-string}, so you'll have to
use a different value for @code{gnus-message-archive-group} there.
message in, you can set this variable to a function that checks the
current newsgroup name and then returns a suitable group name (or list
of names).
+
+This variable can be used instead of @code{gnus-message-archive-group},
+but the latter is the preferred method.
@end table
Substring matching.
@item f
-Fuzzy matching.
+Fuzzy matching (@pxref{Fuzzy Matching}).
@item r
Regexp matching
@lisp
("references"
- ("<x6[0-9a-z]+\\.fsf@.*eyesore.no>" 1000 nil r))
+ ("<x6[0-9a-z]+\\.fsf@@.*eyesore.no>" 1000 nil r))
@end lisp
Whether it's the first two or first three characters that are ``yours''
* Undo:: Some actions can be undone.
* Moderation:: What to do if you're a moderator.
* XEmacs Enhancements:: There are more pictures and stuff under XEmacs.
+* Fuzzy Matching:: What's the big fuzz?
* Various Various:: Things that are really various.
@end menu
@end table
+@node Fuzzy Matching
+@section Fuzzy Matching
+@cindex fuzzy matching
+
+Gnus provides @dfn{fuzzy matching} of @code{Subject} lines when doing
+things like scoring, thread gathering and thread comparison.
+
+As opposed to regular expression matching, fuzzy matching is very fuzzy.
+It's so fuzzy that there's not even a definition of what @dfn{fuzziness}
+means, and the implementation has changed over time.
+
+Basically, it tries to remove all noise from lines before comparing.
+@samp{Re: }, parenthetical remarks, white space, and so on, are filtered
+out of the strings before comparing the results. This often leads to
+adequate results---even when faced with strings generated by text
+manglers masquerading as newsreaders.
+
+
@node Various Various
@section Various Various
@cindex mode lines
A Gnus group info (@pxref{Group Info}) is handed to the backend for
alterations. This comes in handy if the backend really carries all the
-information (as is the case with virtual an imap groups). This function
-should destructively alter the info to suit its needs, and should return
-the (altered) group info.
+information (as is the case with virtual and imap groups). This
+function should destructively alter the info to suit its needs, and
+should return the (altered) group info.
There should be no result data from this function.
* Interface:: Setting up message buffers.
* Commands:: Commands you can execute in message mode buffers.
* Variables:: Customizing the message buffers.
+* Compatibility:: Making Message backwards compatible.
* Index:: Variable, function and concept index.
* Key Index:: List of Message mode keys.
@end menu
@lisp
(defun my-message-header-setup-hook ()
- (when (or (message-fetch-field "newsgroups")
- (gnus-group-find-parameter
- gnus-newsgroup-name 'to-address)
- (gnus-group-find-parameter
- gnus-newsgroup-name 'to-list))
- (insert "Mail-Copies-To: never\n")))
+ (let ((group (or gnus-newsgroup-name "")))
+ (when (or (message-fetch-field "newsgroups")
+ (gnus-group-find-parameter group 'to-address)
+ (gnus-group-find-parameter group 'to-list))
+ (insert "Mail-Copies-To: never\n"))))
(add-hook 'message-header-setup-hook 'my-message-header-setup-hook)
@end lisp
@code{car} is a function and the @code{cdr} is the list of arguments, or
a form to be @code{eval}ed.
+
+@node Compatibility
+@chapter Compatibility
+@cindex compatibility
+
+Message uses virtually only its own variables---older @code{mail-}
+variables aren't consulted. To force Message to take those variables
+into account, you can put the following in your @code{.emacs} file:
+
+@lisp
+(require 'messcompat)
+@end lisp
+
+This will initialize many Message variables from the values in the
+corresponding mail variables.
+
+
+
@node Index
@chapter Index
@printindex cp