+Sun Nov 23 16:21:41 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.14 is released.
+
+Sun Nov 23 14:04:07 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-start.el (gnus-read-descriptions-file): Make sure Mule is
+ bound. And gagged.
+
+ * message.el (message-send-mail-with-mh): Use
+ `mh-new-draft-name'.
+
+ * nnfolder.el (nnfolder-read-folder): Save new buffers.
+
+ * gnus-sum.el (gnus-summary-make-menu-bar): Removed "write to
+ file".
+
+ * gnus-util.el (gnus-byte-code): Use indirect-function.
+
+ * nntp.el (nntp-open-telnet): Also accept 201.
+
+ * gnus-sum.el (gnus-summary-reparent-thread): Update thread.
+
+ * gnus-score.el (gnus-all-score-files): Don't do anything unless
+ GROUP.
+
+ * nnmail.el (nnmail-split-it): Save-excursion.
+ (nnmail-group-pathname): Translate file chars.
+
+Sun Nov 23 13:41:10 1997 Gunnar Horrigmo <horrigmo@online.no>
+
+ * gnus-sum.el (gnus-summary-exit): Don't skip if group
+ disappeared.
+
+Sun Nov 23 13:32:55 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnfolder.el (nnfolder-normalize-buffer): New function.
+ (nnfolder-save-mail): Use it.
+ (nnfolder-request-replace-article): Ditto.
+
+1997-11-19 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * message.el (message-header-lines): New widget.
+ (message-default-headers): Use it.
+ (message-default-mail-headers): Use it.
+ (message-default-news-headers): Use it.
+
+Sun Nov 23 12:44:38 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-win.el (gnus-remove-some-windows): Also delete dead summary
+ windows.
+
+ * gnus-score.el (gnus-score-adaptive): Check whether functions are
+ bound.
+
+Sun Nov 23 12:15:00 1997 Hallvard B. Furuseth <h.b.furuseth@usit.uio.no>
+
+ * gnus-sum.el (gnus-summary-limit-include-thread): Interactive
+ fix.
+
+Sun Nov 23 07:06:58 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-summary-reparent-thread): Insert Message-ID in
+ proper place.
+
+Sat Nov 22 18:30:33 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-cus.el (gnus-group-parameters): Add visible.
+
+Sat Nov 22 18:19:39 1997 Kim-Minh Kaplan <kkaplan@lpthe.jussieu.fr>
+
+ * message.el (message-setup): Add a newline, if necessary.
+
+Sat Nov 22 18:04:34 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-mh.el (gnus-summary-save-in-folder): Fix for default.
+
+Sat Nov 22 18:01:26 1997 Didier Verna <verna@inf.enst.fr>
+
+ * gnus-sum.el (gnus-summary-remove-bookmark): Interactive spec.
+
+Mon Nov 17 23:50:51 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-art.el (article-display-x-face): Fold case.
+
+Thu Nov 13 22:57:23 1997 Kenichi Handa <handa@etl.go.jp>
+
+ * gnus/gnus-start.el (gnus-read-descriptions-file): Decode
+ description if necessary.
+
+ * gnus/nntp.el (nntp-coding-system-for-read): Set default value to
+ binary.
+ (nntp-coding-system-for-write): Likewise.
+
+Thu Nov 13 22:30:19 1997 seokchan lee <chan@xfer.kren.nm.kr>
+
+ * message.el (message-ignored-supersedes-headers): Ignore more
+ headers.
+
+Thu Nov 13 22:28:13 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * message.el (message-separator-face): Lightened up.
+ (message-header-other-face): Ditto.
+
+Thu Nov 13 22:22:11 1997 jari aalto <jari.aalto@poboxes.com>
+
+ * nnmail.el (nnmail-process-mmdf-mail-format): Pop to buffer.
+
+Thu Nov 13 22:09:39 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-start.el (gnus-start-draft-setup): Always create group.
+
+ * gnus-agent.el (gnus-agent-fetch-headers): Translate file chars.
+
Thu Nov 6 20:43:05 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Quassia Gnus v0.13 is released.
(if (not (re-search-forward "^Message-ID: *<\\([^>\n]+\\)>" nil t))
(setq id "No-Message-ID-in-article")
(setq id (buffer-substring (match-beginning 1) (match-end 1))))
- (write-region (point-min) (point-max)
- (concat dir (number-to-string (caar pos)))
- nil 'silent)
+ (let ((coding-system-for-write gnus-agent-article-file-coding-system))
+ (write-region (point-min) (point-max)
+ (concat dir (number-to-string (caar pos)))
+ nil 'silent))
(when (setq elem (assq (caar pos) gnus-agent-article-alist))
(setcdr elem t))
(gnus-agent-enter-history
(when (file-exists-p
(setq file (gnus-agent-article-name ".overview" group)))
(gnus-agent-braid-nov group articles file))
- (gnus-make-directory (file-name-directory file))
+ (gnus-make-directory (nnheader-translate-file-chars
+ (file-name-directory file)))
(write-region (point-min) (point-max) file nil 'silent)
(gnus-agent-save-alist group articles nil))
t))))
(when (process-status "article-x-face")
(delete-process "article-x-face"))
(let ((inhibit-point-motion-hooks t)
- (case-fold-search nil)
+ (case-fold-search t)
from)
(save-restriction
(nnheader-narrow-to-headers)
unread and ticked articles.")
(comment (string :tag "Comment") "\
-An arbitrary comment on the group."))
+An arbitrary comment on the group.")
+
+ (visible (const :tag "Permanently visible" t) "\
+Always display this group, even when there are no unread articles
+in it.."))
"Alist of valid group parameters.
Each entry has the form (NAME TYPE DOC), where NAME is the parameter
;; Thanks to yuki@flab.Fujitsu.JUNET and ohm@kaba.junet.
(mh-find-path)
(let ((folder
- (cond ((and (eq folder 'default)
- gnus-newsgroup-last-folder)
- gnus-newsgroup-last-folder)
- (folder folder)
- (t (mh-prompt-for-folder
- "Save article in"
- (funcall gnus-folder-save-name gnus-newsgroup-name
- gnus-current-headers gnus-newsgroup-last-folder)
- t))))
+ (gnus-read-save-file-name
+ "Save %s in file:" folder
+ gnus-folder-save-name gnus-newsgroup-name
+ gnus-current-headers 'gnus-newsgroup-last-folder))
(errbuf (get-buffer-create " *Gnus rcvstore*"))
;; Find the rcvstore program.
(exec-path (if mh-lib (cons mh-lib exec-path) exec-path)))
"gnus-art.el" "gnus-start.el" "gnus-async.el"
"gnus-msg.el" "gnus-score.el" "gnus-win.el" "gnus-topic.el"
"nnmail.el" "message.el"))
+ (point (point))
file expr olist sym)
(gnus-message 4 "Please wait while we snoop your variables...")
(sit-for 0)
(insert ";; (makeunbound '" (symbol-name (car olist)) ")\n"))
(setq olist (cdr olist)))
(insert "\n\n")
- ;; Remove any null chars - they seem to cause trouble for some
+ ;; Remove any control chars - they seem to cause trouble for some
;; mailers. (Byte-compiled output from the stuff above.)
- (goto-char (point-min))
- (while (re-search-forward "[\000\200]" nil t)
- (replace-match "" t t))))
+ (goto-char point)
+ (while (re-search-forward "[\000-\010\013-\037\200-\237]" nil t)
+ (replace-match (format "\\%03o" (string-to-char (match-string 0)))
+ t t))))
;;; Treatment of rejected articles.
;;; Bounced mail.
(alist malist)
(date (current-time-string))
(data gnus-newsgroup-data)
- elem headers match)
+ elem headers match func)
;; First we transform the adaptive rule alist into something
;; that's faster to process.
(while malist
(setcar elem (symbol-value (car elem))))
(setq elem (cdr elem))
(while elem
- (setcdr (car elem)
- (cons (if (eq (caar elem) 'followup)
- "references"
- (symbol-name (caar elem)))
- (cdar elem)))
- (setcar (car elem)
- `(lambda (h)
- (,(intern
+ (when (fboundp
+ (setq func
+ (intern
(concat "mail-header-"
(if (eq (caar elem) 'followup)
"message-id"
- (downcase (symbol-name (caar elem))))))
- h)))
+ (downcase (symbol-name (caar elem))))))))
+ (setcdr (car elem)
+ (cons (if (eq (caar elem) 'followup)
+ "references"
+ (symbol-name (caar elem)))
+ (cdar elem)))
+ (setcar (car elem)
+ `(lambda (h)
+ (,func h))))
(setq elem (cdr elem)))
(setq malist (cdr malist)))
;; Then we score away.
(let ((funcs gnus-score-find-score-files-function)
(group (or group gnus-newsgroup-name))
score-files)
- ;; Make sure funcs is a list.
- (and funcs
- (not (listp funcs))
- (setq funcs (list funcs)))
- ;; Get the initial score files for this group.
- (when funcs
- (setq score-files (nreverse (gnus-score-find-alist group))))
- ;; Add any home adapt files.
- (let ((home (gnus-home-score-file group t)))
- (when home
- (push home score-files)
- (setq gnus-newsgroup-adaptive-score-file home)))
- ;; Check whether there is a `adapt-file' group parameter.
- (let ((param-file (gnus-group-find-parameter group 'adapt-file)))
- (when param-file
- (push param-file score-files)
- (setq gnus-newsgroup-adaptive-score-file param-file)))
- ;; Go through all the functions for finding score files (or actual
- ;; scores) and add them to a list.
- (while funcs
- (when (gnus-functionp (car funcs))
- (setq score-files
- (nconc score-files (nreverse (funcall (car funcs) group)))))
- (setq funcs (cdr funcs)))
- ;; Add any home score files.
- (let ((home (gnus-home-score-file group)))
- (when home
- (push home score-files)))
- ;; Check whether there is a `score-file' group parameter.
- (let ((param-file (gnus-group-find-parameter group 'score-file)))
- (when param-file
- (push param-file score-files)))
- ;; Expand all files names.
- (let ((files score-files))
- (while files
- (when (stringp (car files))
- (setcar files (expand-file-name
- (car files) gnus-kill-files-directory)))
- (pop files)))
- (setq score-files (nreverse score-files))
- ;; Remove any duplicate score files.
- (while (and score-files
- (member (car score-files) (cdr score-files)))
- (pop score-files))
- (let ((files score-files))
- (while (cdr files)
- (if (member (cadr files) (cddr files))
- (setcdr files (cddr files))
- (pop files))))
- ;; Do the scoring if there are any score files for this group.
- score-files))
+ (when group
+ ;; Make sure funcs is a list.
+ (and funcs
+ (not (listp funcs))
+ (setq funcs (list funcs)))
+ ;; Get the initial score files for this group.
+ (when funcs
+ (setq score-files (nreverse (gnus-score-find-alist group))))
+ ;; Add any home adapt files.
+ (let ((home (gnus-home-score-file group t)))
+ (when home
+ (push home score-files)
+ (setq gnus-newsgroup-adaptive-score-file home)))
+ ;; Check whether there is a `adapt-file' group parameter.
+ (let ((param-file (gnus-group-find-parameter group 'adapt-file)))
+ (when param-file
+ (push param-file score-files)
+ (setq gnus-newsgroup-adaptive-score-file param-file)))
+ ;; Go through all the functions for finding score files (or actual
+ ;; scores) and add them to a list.
+ (while funcs
+ (when (gnus-functionp (car funcs))
+ (setq score-files
+ (nconc score-files (nreverse (funcall (car funcs) group)))))
+ (setq funcs (cdr funcs)))
+ ;; Add any home score files.
+ (let ((home (gnus-home-score-file group)))
+ (when home
+ (push home score-files)))
+ ;; Check whether there is a `score-file' group parameter.
+ (let ((param-file (gnus-group-find-parameter group 'score-file)))
+ (when param-file
+ (push param-file score-files)))
+ ;; Expand all files names.
+ (let ((files score-files))
+ (while files
+ (when (stringp (car files))
+ (setcar files (expand-file-name
+ (car files) gnus-kill-files-directory)))
+ (pop files)))
+ (setq score-files (nreverse score-files))
+ ;; Remove any duplicate score files.
+ (while (and score-files
+ (member (car score-files) (cdr score-files)))
+ (pop score-files))
+ (let ((files score-files))
+ (while (cdr files)
+ (if (member (cadr files) (cddr files))
+ (setcdr files (cddr files))
+ (pop files))))
+ ;; Do the scoring if there are any score files for this group.
+ score-files)))
(defun gnus-possibly-score-headers (&optional trace)
"Do scoring if scoring is required."
(defun gnus-start-draft-setup ()
"Make sure the draft group exists."
+ (gnus-request-create-group "drafts" '(nndraft ""))
(unless (gnus-gethash "nndraft:drafts" gnus-newsrc-hashtb)
- (gnus-request-create-group "drafts" '(nndraft ""))
(let ((gnus-level-default-subscribed 1))
(gnus-subscribe-group "nndraft:drafts" nil '(nndraft "")))
(gnus-group-set-parameter
hashtb))
(when new-newsgroups
(gnus-subscribe-hierarchical-interactive new-newsgroups)))
- ;; Suggested by Per Abrahamsen <amanda@iesd.auc.dk>.
(when (> groups 0)
(gnus-message 6 "%d new newsgroup%s arrived."
groups (if (> groups 1) "s have" " has")))
(skip-chars-forward " \t")
;; ... which leads to this line being effectively ignored.
(when (symbolp group)
- (set group (buffer-substring
- (point) (progn (end-of-line) (point)))))
+ (let ((str (buffer-substring
+ (point) (progn (end-of-line) (point))))
+ (coding
+ (and (boundp enable-multibyte-characters)
+ enable-multibyte-characters
+ (gnus-mule-get-coding-system (symbol-name group)))))
+ (if coding
+ (setq str (decode-coding-string str (car coding))))
+ (set group str)))
(forward-line 1))))
(gnus-message 5 "Reading descriptions file...done")
t))))
:type 'function)
(defcustom gnus-summary-expunge-below nil
- "All articles that have a score less than this variable will be expunged."
+ "All articles that have a score less than this variable will be expunged.
+This variable is local to the summary buffers."
:group 'gnus-score-default
:type '(choice (const :tag "off" nil)
integer))
(defcustom gnus-thread-expunge-below nil
"All threads that have a total score less than this variable will be expunged.
See `gnus-thread-score-function' for en explanation of what a
-\"thread score\" is."
+\"thread score\" is.
+
+This variable is local to the summary buffers."
:group 'gnus-treading
:group 'gnus-score-default
:type '(choice (const :tag "off" nil)
["Save in default format" gnus-summary-save-article t]
["Save in file" gnus-summary-save-article-file t]
["Save in Unix mail format" gnus-summary-save-article-mail t]
- ["Write to file" gnus-summary-write-article-mail t]
["Save in MH folder" gnus-summary-save-article-folder t]
["Save in VM folder" gnus-summary-save-article-vm t]
["Save in RMAIL mbox" gnus-summary-save-article-rmail t]
(and gnus-show-threads
gnus-thread-hide-subtree
(gnus-summary-hide-all-threads))
+ (when kill-buffer
+ (gnus-kill-or-deaden-summary kill-buffer))
;; Show first unread article if requested.
(if (and (not no-article)
(not no-display)
(goto-char (point-min))
(gnus-summary-position-point)
(gnus-set-mode-line 'summary)
- (gnus-configure-windows 'summary 'force))
- (when kill-buffer
- (gnus-kill-or-deaden-summary kill-buffer))
+ (gnus-configure-windows 'summary 'force))
(when (get-buffer-window gnus-group-buffer t)
;; Gotta use windows, because recenter does weird stuff if
;; the current buffer ain't the displayed window.
(unless quit-config
(gnus-group-jump-to-group group))
(run-hooks 'gnus-summary-exit-hook)
- (unless quit-config
+ (unless (or quit-config
+ ;; If this group has disappeared from the summary
+ ;; buffer, don't skip forwards.
+ (not (string= group (gnus-group-group-name))))
(gnus-group-next-unread-group 1))
(setq group-point (point))
(if temporary
(defun gnus-summary-limit-include-thread (id)
"Display all the hidden articles that in the current thread."
- (interactive (mail-header-id (gnus-summary-article-header)))
+ (interactive (list (mail-header-id (gnus-summary-article-header))))
(gnus-set-global-variables)
(let ((articles (gnus-articles-in-thread
(gnus-id-to-thread (gnus-root-id id)))))
(defun gnus-summary-set-bookmark (article)
"Set a bookmark in current article."
- (interactive (gnus-summary-article-number))
+ (interactive (list (gnus-summary-article-number)))
(gnus-set-global-variables)
(when (or (not (get-buffer gnus-article-buffer))
(not gnus-current-article)
(defun gnus-summary-remove-bookmark (article)
"Remove the bookmark from the current article."
- (interactive (gnus-summary-article-number))
+ (interactive (list (gnus-summary-article-number)))
(gnus-set-global-variables)
;; Remove old bookmark, if one exists.
(let ((old (assq article gnus-newsgroup-bookmarks)))
(nnheader-temp-write nil
(insert buf)
(goto-char (point-min))
- (if (search-forward-regexp "^References: " nil t)
- (insert message-id " " )
+ (if (re-search-forward "^References: " nil t)
+ (progn
+ (re-search-forward "^[^ \t]" nil t)
+ (forward-line -1)
+ (end-of-line)
+ (insert " " message-id))
(insert "References: " message-id "\n"))
(unless (gnus-request-replace-article
current-article (car gnus-article-current)
(error "Couldn't replace article"))))
(set-buffer gnus-summary-buffer)
(gnus-summary-unmark-all-processable)
+ (gnus-summary-update-article current-article)
(gnus-summary-rethread-current)
(gnus-message 3 "Article %d is now the child of article %d"
current-article parent-article)))))
(defun gnus-summary-edit-global-kill (article)
"Edit the \"global\" kill file."
- (interactive (gnus-summary-article-number))
+ (interactive (list (gnus-summary-article-number)))
(gnus-set-global-variables)
(gnus-group-edit-global-kill article))
(indentation (make-string (* gnus-topic-indent-level level) ? ))
(total-number-of-articles unread)
(number-of-groups (length entries))
- (active-topic (eq gnus-topic-alist gnus-topic-active-alist)))
+ (active-topic (eq gnus-topic-alist gnus-topic-active-alist))
+ gnus-tmp-header)
(beginning-of-line)
;; Insert the text.
(gnus-add-text-properties
(defun gnus-byte-code (func)
"Return a form that can be `eval'ed based on FUNC."
- (let ((fval (symbol-function func)))
+ (let ((fval (indirect-function func)))
(if (byte-code-function-p fval)
(let ((flist (append fval nil)))
(setcar flist 'byte-code)
(walk-windows
(lambda (win)
(let ((buf (window-buffer win)))
- (when (string-match "^\\*Summary" (buffer-name buf))
+ (when (string-match "^\\*\\(Dead \\)?Summary" (buffer-name buf))
(push buf bufs)
(pop-to-buffer buf)
(when (or (not lowest)
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "0.13"
+(defconst gnus-version-number "0.14"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Quassia Gnus v%s" gnus-version-number)
set-face-stipple mail-abbrevs-setup char-int
make-char-table set-char-table-range font-create-object
x-color-values widget-make-intangible error-message-string
- w3-form-encode-xwfu md5))
+ w3-form-encode-xwfu md5 gnus-mule-get-coding-system
+ decode-coding-string))
(maybe-bind '(global-face-data
mark-active transient-mark-mode mouse-selection-click-count
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)))
+ mail-mode-hook enable-multibyte-characters)))
(defvar browse-url-browser-function nil)
(maybe-fbind '(color-instance-rgb-components
make-color-instance color-instance-name specifier-instance
:group 'message-headers
:type 'regexp)
-(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|Return-Path:\\|^Supersedes:"
+(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\||X-Trace:\\|X-Complaints-To:\\|Return-Path:\\|^Supersedes:"
"*Header lines matching this regexp will be deleted before posting.
It's best to delete old Path and Date headers before posting to avoid
any confusion."
(defvar message-postpone-actions nil
"A list of actions to be performed after postponing a message.")
+(define-widget 'message-header-lines 'text
+ "All header lines must be LFD terminated."
+ :valid-regexp "^\\'"
+ :error "All header lines must be newline terminated")
+
(defcustom message-default-headers ""
"*A string containing header lines to be inserted in outgoing messages.
It is inserted before you edit the message, so you can edit or delete
these lines."
:group 'message-headers
- :type 'string)
+ :type 'message-header-lines)
(defcustom message-default-mail-headers ""
"*A string of header lines to be inserted in outgoing mails."
:group 'message-headers
:group 'message-mail
- :type 'string)
+ :type 'message-header-lines)
(defcustom message-default-news-headers ""
"*A string of header lines to be inserted in outgoing news
articles."
:group 'message-headers
:group 'message-news
- :type 'string)
+ :type 'message-header-lines)
;; Note: could use /usr/ucb/mail instead of sendmail;
;; options -t, and -v if not interactive.
(defface message-header-other-face
'((((class color)
(background dark))
- (:foreground "red4"))
+ (:foreground "#b00000"))
(((class color)
(background light))
(:foreground "steel blue"))
(defface message-separator-face
'((((class color)
(background dark))
- (:foreground "blue4"))
+ (:foreground "blue3"))
(((class color)
(background light))
(:foreground "brown"))
(eval-and-compile
(autoload 'message-setup-toolbar "messagexmas")
+ (autoload 'mh-new-draft-name "mh-comp")
(autoload 'mh-send-letter "mh-comp")
(autoload 'gnus-point-at-eol "gnus-util")
(autoload 'gnus-point-at-bol "gnus-util")
(defun message-caesar-buffer-body (&optional rotnum)
"Caesar rotates all letters in the current buffer by 13 places.
-Used to encode/decode possibly offensive messages (commonly in net.jokes).
+Used to encode/decode possiblyun offensive messages (commonly in net.jokes).
With prefix arg, specifies the number of places to rotate each letter forward.
Mail and USENET news headers are not rotated."
(interactive (if current-prefix-arg
(defun message-send-mail-with-mh ()
"Send the prepared message buffer with mh."
(let ((mh-previous-window-config nil)
- (name (make-temp-name
- (concat (file-name-as-directory
- (expand-file-name message-autosave-directory))
- "msg."))))
+ (name (mh-new-draft-name)))
(setq buffer-file-name name)
;; MH wants to generate these headers itself.
(when message-mh-deletable-headers
headers)
(delete-region (point) (progn (forward-line -1) (point)))
(when message-default-headers
- (insert message-default-headers))
+ (insert message-default-headers)
+ (or (bolp) (insert ?\n)))
(put-text-property
(point)
(progn
(forward-line -1)
(when (message-news-p)
(when message-default-news-headers
- (insert message-default-news-headers))
+ (insert message-default-news-headers)
+ (or (bolp) (insert ?\n)))
(when message-generate-headers-first
(message-generate-headers
(delq 'Lines
(copy-sequence message-required-news-headers))))))
(when (message-mail-p)
(when message-default-mail-headers
- (insert message-default-mail-headers))
+ (insert message-default-mail-headers)
+ (or (bolp) (insert ?\n)))
(when message-generate-headers-first
(message-generate-headers
(delq 'Lines
(deffoo nnfolder-request-replace-article (article group buffer)
(nnfolder-possibly-change-group group)
(save-excursion
+ (set-buffer buffer)
+ (nnfolder-normalize-buffer)
(set-buffer nnfolder-current-buffer)
(goto-char (point-min))
(if (not (search-forward (nnfolder-article-string article) nil t))
(obuf (current-buffer)))
(nnfolder-possibly-change-folder (car group-art))
(let ((buffer-read-only nil))
- (goto-char (point-max))
- (unless (eolp)
- (insert "\n"))
- (unless (bobp)
- (insert "\n"))
+ (nnfolder-normalize-buffer)
(insert-buffer-substring obuf beg end)))))
;; Did we save it anywhere?
save-list))
+(defun nnfolder-normalize-buffer ()
+ "Make sure there are two newlines at the end of the buffer."
+ (goto-char (point-max))
+ (skip-chars-backward "\n")
+ (delete-region (point) (point-max))
+ (insert "\n\n"))
+
(defun nnfolder-insert-newsgroup-line (group-art)
(save-excursion
(goto-char (point-min))
(if (equal (cadr (assoc group nnfolder-scantime-alist))
(nth 5 (file-attributes file)))
;; This looks up-to-date, so we don't do any scanning.
- buffer
+ (if (file-exists-p file)
+ buffer
+ (push (list group buffer) nnfolder-buffer-alist)
+ (set-buffer-modified-p t)
+ (save-buffer))
;; Parse the damn thing.
(save-excursion
(nnmail-activate 'nnfolder)
"Make pathname for GROUP."
(concat
(let ((dir (file-name-as-directory (expand-file-name dir))))
+ (setq group (nnheader-translate-file-chars group))
;; If this directory exists, we use it directly.
(if (or nnmail-use-long-file-names
(file-directory-p (concat dir group)))
(if (not (and (re-search-forward "^From " nil t)
(goto-char (match-beginning 0))))
;; Possibly wrong format?
- (error "Error, unknown mail format! (Possibly corrupted.)")
+ (progn
+ (pop-to-buffer (current-buffer))
+ (error "Error, unknown mail format! (Possibly corrupted.)"))
;; Carry on until the bitter end.
(while (not (eobp))
(setq start (point)
(if (not (and (re-search-forward delim nil t)
(forward-line 1)))
;; Possibly wrong format?
- (error "Error, unknown mail format! (Possibly corrupted.)")
+ (progn
+ (pop-to-buffer (current-buffer))
+ (error "Error, unknown mail format! (Possibly corrupted.)"))
;; Carry on until the bitter end.
(while (not (eobp))
(setq start (point))
;; Builtin : operation.
((eq (car split) ':)
- (nnmail-split-it (eval (cdr split))))
+ (nnmail-split-it (save-excursion (eval (cdr split)))))
;; Check the cache for the regexp for this split.
;; FIX FIX FIX could avoid calling assq twice here
(let ((file nil)
(number (length sequence))
(count 0)
- ;; 1997/8/12 by MORIOKA Tomohiko
- ;; for XEmacs/mule.
(pathname-coding-system 'binary)
beg article)
(if (stringp (car sequence))
(if (not group)
t
(let ((pathname (nnmail-group-pathname group nnml-directory))
- ;; 1997/8/14 by MORIOKA Tomohiko
- ;; for XEmacs/mule.
(pathname-coding-system 'binary))
(when (not (equal pathname nnml-current-directory))
(setq nnml-current-directory pathname
(defvoo nntp-warn-about-losing-connection t
"*If non-nil, beep when a server closes connection.")
-(defvoo nntp-coding-system-for-read nil
- "*coding-system for read from NNTP.")
+(defvoo nntp-coding-system-for-read 'binary
+ "*Coding system to read from NNTP.")
+
+(defvoo nntp-coding-system-for-write 'binary
+ "*Coding system to write to NNTP.")
\f
(nntp-wait-for-string "bash\\|\$ *\r?$\\|> *\r?")
(process-send-string
proc (concat (mapconcat 'identity nntp-telnet-parameters " ") "\n"))
- (nntp-wait-for-string "^\r*200")
+ (nntp-wait-for-string "^\r*20[01]")
(beginning-of-line)
(delete-region (point-min) (point))
(process-send-string proc "\^]")
(mapconcat 'identity
nntp-rlogin-parameters " ")))))
(set-buffer buffer)
- (nntp-wait-for-string "^\r*200")
+ (nntp-wait-for-string "^\r*20[01]")
(beginning-of-line)
(delete-region (point-min) (point))
proc))
"Timestamp returned when initially connected to the POP server.
Used for APOP authentication.")
+(defvar pop3-movemail-file-coding-system nil
+ "Crashbox made by pop3-movemail with this coding system.")
+
(defvar pop3-read-point nil)
(defvar pop3-debug nil)
(pop3-retr process n crashbuf)
(save-excursion
(set-buffer crashbuf)
- (append-to-file (point-min) (point-max) crashbox)
+ (let ((coding-system-for-write pop3-movemail-file-coding-system))
+ (append-to-file (point-min) (point-max) crashbox))
(set-buffer (process-buffer process))
(while (> (buffer-size) 5000)
(goto-char (point-min))
refcard.dvi: refcard.tex gnuslogo.refcard gnusref.tex
$(LATEX) refcard.tex
-sclean:
+clean:
rm -f gnus.*.bak *.ky *.cp *.fn *.cps *.kys *.log *.aux *.dvi *.vr \
- *.tp *.toc \
- *.pg gnus.latexi *.aux *.[cgk]idx \
+ *.tp *.toc *.pg gnus.latexi *.aux *.[cgk]idx \
gnus.ilg gnus.ind gnus.[cgk]ind gnus.idx \
- gnus.tmptexi gnus.tmplatexi gnus.tmplatexi1 texput.log *.orig *.rej \
- gnus.latexi*~*
-
-clean:
- make sclean
- rm -f *.latexi
- rm ps/new-herd-[0-9]*.ps
+ gnus.tmptexi *.tmplatexi gnus.tmplatexi1 texput.log *.orig *.rej \
+ gnus.latexi*~* tmp/*.ps xface.tex picons.tex smiley.tex *.latexi
makeinfo:
makeinfo -o gnus gnus.texi
makeinfo -o message message.texi
texi2latex.elc: texi2latex.el
- $(EMACS) -batch -l bytecomp -f batch-byte-recompile-directory
+ $(EMACS) -batch -l bytecomp --eval '(byte-compile-file "texi2latex.el")'
-latex: gnus.texi
+latex: gnus.texi texi2latex.elc
$(EMACS) -batch -q -no-site-file gnus.texi -l ./texi2latex.elc -f latexi-translate
latexps:
make texi2latex.elc
+ rm -f gnus.aux
egrep -v "label.*Index|chapter.*Index" gnus.latexi > gnus.tmplatexi1
$(LATEX) gnus.tmplatexi1
- splitindex
+ ./splitindex
makeindex -o gnus.kind gnus.kidx
makeindex -o gnus.cind gnus.cidx
makeindex -o gnus.gind gnus.gidx
cat postamble.tex >> gnus.tmplatexi
$(LATEX) gnus.tmplatexi
$(LATEX) gnus.tmplatexi
- $(DVIPS) -f gnus.dvi > /local/tmp/larsi/gnus.ps
-
-herds:
- cd ps ; for i in new-herd-[0-9]*.gif; do echo $$i; giftoppm $$i | pnmscale 2 | pnmsmooth -size 5 5 | ppmtopgm | pgmtops > `basename $$i .gif`.ps; done
+ $(DVIPS) -f gnus.dvi > gnus.ps
pss:
make latex
make latexboth
make out
-screenp:
- cd screen; for i in *.gif; do echo $$i; giftopnm $$i | ppmtopgm | pnmtops -scale 1 -noturn -nocenter > `basename $$i .gif`.ps; done
-
latexboth:
rm -f gnus-manual-a4.ps.gz gnus-manual-standard.ps.gz
make latexps
cp gnus gnus-[0-9] gnus-[0-9][0-9] $(INFODIR)
cp message $(INFODIR)
+
+tmps:
+ if [ ! -e tmp ]; then mkdir tmp; fi
+ make screens
+ make herdss
+ make etcs
+ make piconss
+ make xfaces
+ make smiley
+ make miscs
+
+herdss:
+ cd herds ; for i in new-herd-[0-9]*.gif; do echo $$i; giftopnm $$i | pnmcrop -white | pnmmargin -white 9 | pnmscale 2 | pnmconvol convol5.pnm | ppmtopgm | pnmdepth 255 | pnmtops -width 100 -height 100 -noturn > ../tmp/`basename $$i .gif`.ps; done
+ cd herds ; giftopnm new-herd-section.gif | pnmscale 4 | pnmconvol convol11.pnm | ppmtopgm | pnmdepth 255 | pnmtops -noturn -width 100 -height 100 > ../tmp/new-herd-section.ps
+
+
+screens:
+ cd screen ; for i in *.gif; do echo $$i; giftopnm $$i | pnmmargin -black 1 | ppmtopgm | pnmtops -width 100 -height 100 -noturn > ../tmp/`basename $$i .gif`.ps; done
+
+miscs:
+ giftopnm misc/larsi.gif | ppmtopgm | pnmtops -noturn > tmp/larsi.ps
+ tifftopnm misc/eseptember.tif | pnmscale 4 | ppmtopgm | pnmtops -noturn -width 100 -height 100 > tmp/september.ps
+ tifftopnm misc/fseptember.tif | pnmscale 2 | ppmtopgm | pnmtops -noturn -width 100 -height 100 > tmp/fseptember.ps
+ tifftopnm misc/fred.tif | pnmscale 2 | ppmtopgm | pnmtops -noturn -width 100 -height 100 > tmp/fred.ps
+ tifftopnm misc/ered.tif | pnmscale 2 | ppmtopgm | pnmtops -noturn -width 100 -height 100 > tmp/red.ps
+
+etcs:
+ cd etc; for i in gnus-*.xpm; do echo $$i; xpmtoppm $$i | ppmtopgm | pnmdepth 255 | pnmtops -noturn > ../tmp/`basename $$i .xpm`.ps; done
+
+piconss:
+ cd picons; for i in *.xbm; do echo $$i; xbmtopbm $$i | pnmtops -noturn > ../tmp/picons-`basename $$i .xbm`.ps; done
+ cd picons; for i in *.gif; do echo $$i; giftopnm $$i | ppmtopgm | pnmtops -noturn > ../tmp/picons-`basename $$i .gif`.ps; done
+ for i in tmp/picons-*.ps; do echo "\\gnuspicon{$$i}"; done > picons.tex
+
+xfaces:
+ cd xface; for i in *.gif; do echo $$i; giftopnm $$i | ppmtopgm | pnmtops -noturn > ../tmp/xface-`basename $$i .gif`.ps; done
+ for i in tmp/xface-*.ps; do \
+ if [ -n "$$a" ]; then a=""; echo "{$$i}"; else \
+ a="h"; echo -n "\\gnusxface{$$i}"; fi done > xface.tex; \
+ if [ -n "$$a" ]; then echo "{$$i}" >> xface.tex; fi
+
+smiley:
+ cd smilies; tifftopnm BigFace.tif | ppmtopgm | pnmtops > ../tmp/BigFace.ps
+ cd smilies; for i in *.xpm; do echo $$i; sed "s/none/#FFFFFF/" $$i | xpmtoppm | ppmtopgm | pnmdepth 255 | pnmtops > ../tmp/smiley-`basename $$i .xpm`.ps; done
+ for i in tmp/smiley-*.ps; do \
+ if [ -n "$$a" ]; then a=""; echo "{$$i}"; else \
+ a="h"; echo -n "\\gnussmiley{$$i}"; fi done > smiley.tex; \
+ if [ -n "$$a" ]; then echo "{$$i}" >> smiley.tex; fi
+
+pspackage:
+ tar czvf pspackage.tar.gz gnus-faq.texi gnus.texi herds misc pagestyle.sty picons pixidx.sty postamble.tex ps screen smilies splitindex texi2latex.el xface Makefile README etc
+
+complete:
+ make texi2latex.elc
+ make tmps
+ make pss
* Gnus: (gnus). The news reader Gnus.
* Message: (message). The Message sending thingamabob.
-* Widget: (widget). The Widget library.
-* Custom: (custom). The Custom library.
\usepackage{pagestyle}
\usepackage{epsfig}
\usepackage{bembo}
+\usepackage{pixidx}
\makeindex
\begin{document}
\newcommand{\gnustt}[1]{{\fontfamily{pfu}\fontsize{10pt}{10}\selectfont #1}}
\newcommand{\gnuscode}[1]{\gnustt{#1}}
-\newcommand{\gnussamp}[1]{``{\fontencoding{OT1}\fontfamily{pcr}\fontsize{10pt}{10}\selectfont #1}''}
+\newcommand{\gnussamp}[1]{``{\fontencoding{OT1}\fontfamily{pfu}\fontsize{10pt}{10}\selectfont #1}''}
\newcommand{\gnuslisp}[1]{\gnustt{#1}}
\newcommand{\gnuskbd}[1]{`\gnustt{#1}'}
\newcommand{\gnusfile}[1]{`\gnustt{#1}'}
\newcommand{\gnusless}{{$<$}}
\newcommand{\gnusgreater}{{$>$}}
-\newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=gnus-head.eps,height=1cm}}}
+\newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=ps/gnus-head.eps,height=1cm}}}
\newcommand{\gnusinteresting}{
\marginpar[\mbox{}\hfill\gnushead]{\gnushead}
}
}
\newcommand{\gnuspicon}[1]{
-\marginpar[\mbox{}\hfill\epsfig{figure=#1,height=1.5cm}]{\epsfig{figure=#1,height=1.5cm}}
+\margindex{\epsfig{figure=#1,width=2cm}}
}
-\newcommand{\gnusxface}[1]{
-\marginpar[\mbox{}\hfill\epsfig{figure=#1,height=1cm}]{\epsfig{figure=#1,height=1cm}}
+\newcommand{\gnusxface}[2]{
+\margindex{\epsfig{figure=#1,width=1cm}\epsfig{figure=#2,width=1cm}}
}
+\newcommand{\gnussmiley}[2]{
+\margindex{\makebox[2cm]{\hfill\epsfig{figure=#1,width=0.5cm}\hfill\epsfig{figure=#2,width=0.5cm}\hfill}}
+}
\newcommand{\gnusitemx}[1]{\mbox{}\vspace*{-\itemsep}\vspace*{-\parsep}\item#1}
{
\ifodd\count0
\mbox{} \hfill
-\raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
\else
-\raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
\hfill \mbox{}
\fi
}
{
\ifodd\count0
\mbox{} \hfill
-\raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
\else
-\raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
\hfill \mbox{}
\fi
}
{
\ifodd\count0
\mbox{} \hfill
-\raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
\else
-\raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
\hfill \mbox{}
\fi
}
\gnustitle{\gnustitlename}\\
\rule{15cm}{1mm}\\
\vfill
-\hspace*{0cm}\epsfig{figure=gnus-big-logo.eps,height=15cm}
+\hspace*{0cm}\epsfig{figure=ps/gnus-big-logo.eps,height=15cm}
\vfill
\rule{15cm}{1mm}\\
\gnusauthor{by Lars Magne Ingebrigtsen}
\thispagestyle{empty}
-Copyright \copyright{} 1995,96 Free Software Foundation, Inc.
+Copyright \copyright{} 1995,96,97 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@vindex gnus-article-x-face-too-ugly
@iftex
@iflatex
-\gnusxface{tmp/xface-karlheg.ps}
-\gnusxface{tmp/xface-kyle.ps}
-\gnusxface{tmp/xface-smb.ps}
+\include{xface}
@end iflatex
@end iftex
Look for and display any X-Face headers
@vindex gnus-summary-expunge-below
Don't display the summary lines of articles that have scores lower than
this variable. This is @code{nil} by default, which means that no
-articles will be hidden.
+articles will be hidden. This variable is local to the summary buffers,
+and has to be set from @code{gnus-summary-mode-hook}.
@item gnus-score-over-mark
@vindex gnus-score-over-mark
@iftex
@iflatex
-\gnuspicon{tmp/picons-att.ps}
-\gnuspicon{tmp/picons-berkeley.ps}
-\gnuspicon{tmp/picons-caltech.ps}
-\gnuspicon{tmp/picons-canada.ps}
-\gnuspicon{tmp/picons-cr.ps}
-\gnuspicon{tmp/picons-cygnus.ps}
-\gnuspicon{tmp/picons-gov.ps}
-\gnuspicon{tmp/picons-mit.ps}
-\gnuspicon{tmp/picons-nasa.ps}
-\gnuspicon{tmp/picons-qmw.ps}
-\gnuspicon{tmp/picons-rms.ps}
-\gnuspicon{tmp/picons-ruu.ps}
+\include{picons}
@end iflatex
@end iftex
What are Picons? To quote directly from the Picons Web site:
+@iftex
+@iflatex
+\margindex{}
+@end iflatex
+@end iftex
+
@quotation
@dfn{Picons} is short for ``personal icons''. They're small,
constrained images used to represent users and domains on the net,
@node Hard Picons
@subsubsection Hard Picons
+@iftex
+@iflatex
+\margindex{}
+@end iflatex
+@end iftex
+
Gnus can display picons for you as you enter and leave groups and
articles. It knows how to interact with three sections of the picons
database. Namely, it can display the picons newsgroup pictures,
@end table
-@iftex
-@iflatex
-\gnuspicon{tmp/picons-seuu.ps}
-\gnuspicon{tmp/picons-stanford.ps}
-\gnuspicon{tmp/picons-sun.ps}
-\gnuspicon{tmp/picons-ubc.ps}
-\gnuspicon{tmp/picons-ufl.ps}
-\gnuspicon{tmp/picons-uio.ps}
-\gnuspicon{tmp/picons-unit.ps}
-\gnuspicon{tmp/picons-upenn.ps}
-\gnuspicon{tmp/picons-wesleyan.ps}
-@end iflatex
-@end iftex
-
Note: If you set @code{gnus-use-picons} to @code{t}, it will set up your
window configuration for you to include the @code{picons} buffer.
@node Picon Configuration
@subsubsection Picon Configuration
+@iftex
+@iflatex
+\margindex{}
+@end iflatex
+@end iftex
+
The following variables offer further control over how things are
done, where things are located, and other useless stuff you really
don't need to worry about.
Names a temporary file to store the @code{X-Face} bitmap in. Defaults
to @code{(format "/tmp/picon-xface.%s.xbm" (user-login-name))}.
+@iftex
+@iflatex
+\margindex{}
+@end iflatex
+@end iftex
+
@item gnus-picons-buffer
@vindex gnus-picons-buffer
The name of the buffer that @code{picons} points to. Defaults to
@subsection Smileys
@cindex smileys
+@iftex
+@iflatex
+\gnusfig{-3cm}{0.5cm}{\epsfig{figure=tmp/BigFace.ps,height=20cm}}
+\input{smiley}
+@end iflatex
+@end iftex
+
@dfn{Smiley} is a package separate from Gnus, but since Gnus is
currently the only package that uses Smiley, it is documented here.
The alist used is specified by the @code{smiley-regexp-alist} variable,
which defaults to the value of @code{smiley-deformed-regexp-alist}.
-Here's the default value of @code{smiley-smiley-regexp-alist}:
-
-@lisp
-(setq smiley-nosey-regexp-alist
- '(("\\(:-+[<«]+\\)\\W" 1 "FaceAngry.xpm")
- ("\\(:-+\\]+\\)\\W" 1 "FaceGoofy.xpm")
- ("\\(:-+D\\)\\W" 1 "FaceGrinning.xpm")
- ("\\(:-+[@}»]+\\)\\W" 1 "FaceHappy.xpm")
- ("\\(:-*)+\\)\\W" 1 "FaceHappy.xpm")
- ("\\(:-+[/\\\"]+\\)\\W" 1 "FaceIronic.xpm")
- ("\\([8|]-+[|Oo%]\\)\\W" 1 "FaceKOed.xpm")
- ("\\([:|]-+#+\\)\\W" 1 "FaceNyah.xpm")
- ("\\(:-+[(@{]+\\)\\W" 1 "FaceSad.xpm")
- ("\\(:-+[Oo\*]\\)\\W" 1 "FaceStartled.xpm")
- ("\\(:-+|\\)\\W" 1 "FaceStraight.xpm")
- ("\\(:-+p\\)\\W" 1 "FaceTalking.xpm")
- ("\\(:-+d\\)\\W" 1 "FaceTasty.xpm")
- ("\\(;-+[>)@}»]+\\)\\W" 1 "FaceWinking.xpm")
- ("\\(:-+[Vvµ]\\)\\W" 1 "FaceWry.xpm")
- ("\\(][:8B]-[)>]\\)\\W" 1 "FaceDevilish.xpm")
- ("\\([:|]-+P\\)\\W" 1 "FaceYukky.xpm")))
-@end lisp
-
The first item in each element is the regexp to be matched; the second
element is the regexp match group that is to be replaced by the picture;
and the third element is the name of the file to be displayed.
@table @code
+@iftex
+@iflatex
+\margindex{}
+@end iflatex
+@end iftex
+
@item gnus-use-toolbar
@vindex gnus-use-toolbar
If @code{nil}, don't display toolbars. If non-@code{nil}, it should be
A glyph displayed in all Gnus mode lines. It is a tiny gnu head by
default.
+@iftex
+@iflatex
+\margindex{}
+@end iflatex
+@end iftex
+
@end table
Also thanks to the following for patches and stuff:
+Jari Aalto,
Adrian Aichner,
Peter Arius,
Matt Armstrong,
Michelangelo Grigni,
D. Hall,
Magnus Hammerin,
+Kenichi Handa, @c ?
Raja R. Harinath,
Hisashige Kenji, @c Hisashige
Marc Horowitz,
Shuhei Kobayashi, @c Kobayashi
Thor Kristoffersen,
Jens Lautenbacher,
+Seokchan Lee, @c ?
Carsten Leonhardt,
James LewisMoss,
Christian Limpach,
Ulrich Pfeifer,
John McClary Prevost,
Colin Rafferty,
+Lars Balker Rasmussen,
Bart Robinson,
Jason Rumney,
Jay Sachs,
James Troup,
Enami Tsugutomo, @c ?
Aaron M. Ucko,
+Didier Verna,
Jan Vroonhof,
+Stefan Waldherr,
Barry A. Warsaw,
Christoph Wedler,
Joe Wells,
@node September Gnus
@subsubsection September Gnus
+@iftex
+@iflatex
+\gnusfig{-28cm}{0cm}{\epsfig{figure=tmp/september.ps,height=20cm}}
+@end iflatex
+@end iftex
+
New features in Gnus 5.2/5.3:
@itemize @bullet
@item
Mail can be re-scanned by a daemonic process (@pxref{Daemons}).
+@iftex
+@iflatex
+\marginpar[\mbox{}\hfill\epsfig{figure=tmp/fseptember.ps,height=5cm}]{\epsfig{figure=tmp/fseptember.ps,height=5cm}}
+@end iflatex
+@end iftex
@item
Gnus can make use of NoCeM files to weed out spam (@pxref{NoCeM}).
New features in Gnus 5.4/5.5:
+@iftex
+@iflatex
+\gnusfig{-5.5cm}{-4cm}{\epsfig{figure=tmp/red.ps,height=20cm}}
+@end iflatex
+@end iftex
+
@itemize @bullet
@item
@item
Cached articles can be pulled into the groups (@pxref{Summary Generation
Commands}).
-
+@iftex
+@iflatex
+\marginpar[\mbox{}\hfill\epsfig{figure=tmp/fred.ps,width=3cm}]{\epsfig{figure=tmp/fred.ps,width=3cm}}
+@end iflatex
+@end iftex
+
@item
Score files are now applied in a more reliable order (@pxref{Score
Variables}).
reading while bopping his head gently to some obscure music. He does
not have a cat.
-Graphics by Luis Fernandes. Set in Bembo and Futura.
+\marginpar[\vspace*{-2.5cm}\epsfig{figure=tmp/larsi.ps,height=2cm}]{\vspace*{-2.2cm}\epsfig{figure=tmp/larsi.ps,height=2.5cm}}
+
+Graphics by Luis Fernandes. Set in Adobe Bembo, Adobe Futura and
+Bitstream Courier.
\clearpage
\mbox{}
\thispagestyle{empty}
\begin{picture}(500,500)(0,0)
-\put(-35,325){\makebox(480,350)[tr]{\epsfig{figure=ps/new-herd-section.ps}}}
+\put(-35,325){\makebox(480,350)[tr]{\epsfig{figure=tmp/new-herd-section.ps}}}
\end{picture}
\end{document}
* command to open a digest group, and copy all the articles there to the
current group.
+
+* a variable to disable article body highlights if there's more than
+X characters in the body.
+
+* handle 480/381 authinfo requests separately.
+
+* when sending authinfo automatically, things hang.
+
+* include the texi/dir file in the distribution.
+
+* format spec to "tab" to a position.