2002-01-07 Katsumi Yamaoka <yamaoka@jpl.org>
+ * lisp/gnus-vers.el: T-gnus 6.15.5 revision 00.
+
+2002-01-02 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * etc/gnus/describe-group.xpm: Set pixels of first line to
+ background color. A bug in Emacs?
+
+2002-01-07 Katsumi Yamaoka <yamaoka@jpl.org>
+
* lisp/gnus-vers.el (gnus-revision-number): Increment to 10.
* lisp/gnus-picon.el: Require `mail-parse'.
\f
* Changes in Oort Gnus
+** Gnus supports the generation of RFC 2298 Disposition Notification requests.
+
+This is invoked with the C-c M-n key binding from message mode.
+
+** Gnus supports Maildir groups.
+
+Gnus includes a new backend nnmaildir.el, by Paul Jarc.
+
+** Printing capabilities are enhanced.
+
+Gnus supports Muttprint natively with O P from the Summary and Article
+buffers. Also, each individual MIME part can be printed using p on
+the MIME button.
+
** Message supports the Importance: header.
-In the message buffer, C-c C-p cycles through the valid values.
+In the message buffer, C-c C-f C-i or C-c C-u cycles through the valid
+values.
** Gnus supports Cancel Locks in News.
+2002-01-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-mdrtn.el (gnus-moderation-cancel-article): Insert an extra
+ newline.
+
2001-12-26 Florian Weimer <fw@deneb.enyo.de>
* gpg.el (gpg-command-default-alist): Using gpg-2comp is no longer
"o c #FFFFF5F5ACAC",
"+ c #E1E1E0E0E0E0",
"@ c #C7C7C6C6C6C6",
-" .. .. .. .. .. .. .. ..",
+"........................",
"........................",
".................oooo...",
" .. .. .. .. .. oo oo o.",
+2002-01-08 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-group.el (gnus-group-read-ephemeral-group): Restore the old
+ behavior of quit-config.
+
+ * message.el (message-make-from): Don't quote fullname.
+ From: Bj\e,Ax\e(Brn Mork <bmork@dod.no>
+
+ * gnus-group.el (gnus-group-suspend): Don't kill message buffers.
+ From: <andre@slamdunknetworks.com>
+
+2002-01-07 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-group.el (gnus-group-mark-article-read): Typo. Increase n.
+
+ * gnus-art.el (gnus-header-button-alist): Handle mailto.
+
+ * mml.el (mml-preview): Bind gnus-original-article-buffer because
+ article-decode-group-name uses it. Bind gnus-article-prepare-hook
+ because bbdb may use it.
+
+2002-01-07 TSUCHIYA Masatoshi <tsuchiya@namazu.org>
+
+ * nneething.el (nneething-request-article): When a non-text file
+ is converted to an article, its data is encoded in base64. Call
+ `nneething-make-head' with options to specify MIME types.
+ (nneething-make-head): Add optional arguments to specify MIME
+ types.
+
+2002-01-06 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-fun.el (gnus-display-x-face-in-from): Fake a "From: "
+ header if there is not.
+
+ * gnus-xmas.el (gnus-xmas-put-image): Insert " " if bobp.
+
+ * gnus-msg.el (gnus-gcc-mark-as-read): New variable.
+ (gnus-inews-mark-gcc-as-read): Obsolete variable.
+ (gnus-inews-do-gcc): Use them.
+
+ * gnus-group.el (gnus-group-mark-article-read): Put holes into
+ gnus-newsgroup-unselected.
+
+2002-01-06 Simon Josefsson <jas@extundo.com>
+
+ * imap.el (imap-ssl-open, imap-ssl-open, imap-parse-fetch): Use
+ condition-case, not ignore-errors.
+
+2002-01-06 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-sum.el (gnus-summary-insert-old-articles): Bind
+ gnus-fetch-old-headers.
+
+ * gnus-art.el (article-display-x-face): Use the current buffer
+ unless `W f'. Otherwise, X-Face may be shown in the header of a
+ forwarded part.
+ (gnus-treatment-function-alist): Treat xface before hiding
+ headers.
+
+2002-01-06 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-group.el (gnus-group-read-ephemeral-group): Fix
+ parameters.
+
+2002-01-06 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * mm-util.el (mm-multibyte-p): Define conditionally when load.
+ (mm-guess-charset): New function.
+ (mm-charset-after): Use it.
+ (mm-detect-coding-region): New function.
+ (mm-detect-mime-charset-region): New function.
+
+ * gnus-sum.el (gnus-summary-show-article): Use
+ mm-detect-coding-region.
+
+2002-01-06 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-make-fqdn): Be less violent.
+
+ * gnus.el (gnus-logo-color-style): Compute custom form
+ automatically.
+
+ * gnus-sum.el (gnus-summary-enter-digest-group): Feed the adaptive
+ score file of the parent to the document group.
+
+ * gnus-group.el (gnus-group-read-ephemeral-group): Add an optional
+ parameters parameter.
+
+ * gnus-score.el (gnus-score-load-file): Clean up.
+
+2002-01-06 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-sum.el (gnus-thread-sort-by-most-recent-number): Fix typo.
+ From: Damien Wyart <damien.wyart@free.fr>
+
+ * gnus-util.el (gnus-local-map-property): In Emacs 21, use keymap.
+
+2002-01-05 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-sum.el (gnus-select-group-hook): Typo.
+
+ * rfc2047.el (rfc2047-decode-string): Return immediately if there
+ is no quoted-printable-encoded STRING.
+ From: Jesper Harder <harder@ifa.au.dk>
+
+ (rfc2047-decode-string): Decode it.
+
+2002-01-05 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.el (gnus-logo-color-alist): Added more colors from Luis.
+
+2002-01-05 Keiichi Suzuki <keiichi@nanap.org>
+
+ * nntp.el (nntp-possibly-change-group): Erase contents of nntp
+ buffer to get rid of junk line.
+
+2002-01-05 Simon Josefsson <jas@extundo.com>
+
+ * message.el (message-mode-map): Bind message-goto-from to C-c C-f
+ C-o.
+ (message-mode-map): Bind message-insert-or-toggle-importance to
+ C-c C-u.
+ (message-mode-map): Bind message-disposition-notification-to to
+ C-c M-n.
+ (message-mode-menu): Add m-d-n-t.
+ (message-mode-field-menu): Add m-goto-from.
+ (message-mode): Doc fix.
+ (message-goto-from): New function.
+ (message-insert-disposition-notification-to): New function.
+ (message-tool-bar-map): Add receipt button.
+
+2002-01-05 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-sum.el (gnus-thread-latest-date): New function.
+ (gnus-thread-sort-by-most-recent-number): Renamed.
+ (gnus-thread-sort-functions): Doc fix.
+ (gnus-select-group-hook): Don't use setq on a hook.
+ (gnus-thread-latest-date): Use date, not number
+
+ * gnus-agent.el (gnus-agent-expire-days): Doc fix.
+ (gnus-agent-expire): Allow regexp of expire-days.
+
+ * gnus-art.el (gnus-article-reply-with-original): Deactivate
+ region.
+ (gnus-article-followup-with-original): Ditto.
+
+ * gnus-sum.el (gnus-thread-highest-number): Doc fix.
+
+ * gnus-art.el (gnus-mime-display-alternative): Use
+ gnus-local-map-property.
+ (gnus-mime-display-alternative): Ditto.
+ (gnus-insert-mime-security-button): Ditto.
+ (gnus-insert-next-page-button): Ditto.
+ (gnus-button-prev-page): Take optional args.
+ (gnus-insert-prev-page-button): widget-convert.
+
+ * gnus-util.el (gnus-local-map-property): New function.
+
+ * gnus-art.el (gnus-prev-page-map): Use parent map.
+ (gnus-next-page-map): Ditto.
+
+ * gnus-spec.el (gnus-parse-format): Clean up.
+ (gnus-parse-format): Do complex formatting for %=.
+
+ * gnus-fun.el (gnus-display-x-face-in-from): Add the string
+ "X-Face: " to the data in the built-in scenario.
+
+ * gnus-spec.el (gnus-parse-simple-format): Use gnus-pad-form.
+ (gnus-correct-pad-form): Renamed.
+ (gnus-tilde-max-form): Clean up.
+ (gnus-pad-form): Use gnus-use-correct-string-widths.
+
+ * gnus-fun.el (gnus-display-x-face-in-from): Use native xface
+ support if that is available.
+
+ * gnus-sum.el (gnus-thread-highest-number): New function.
+ (gnus-thread-sort-by-most-recent-thread): New function.
+ (gnus-thread-sort-functions): Doc fix.
+
+2002-01-04 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-sum.el (gnus-summary-select-article): Disable multibyte in
+ all cases.
+ (gnus-summary-mode): Enable it in all cases.
+ (gnus-summary-display-article): Ditto.
+ (gnus-summary-edit-article): Ditto.
+
+ * gnus-ems.el (gnus-put-image): Really return glyph.
+
+ * gnus-art.el (gnus-article-x-face-command): Fix :type.
+ (gnus-treat-smiley): Don't take "P" in the interactive form.
+
2002-01-04 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * compface.el (uncompface): XEmacs and Emacs have differing
+ capabilities.
+
+ * gnus-fun.el (gnus-display-x-face-in-from): Use face.
+
+ * gnus-ems.el (gnus-article-xface-ring-internal): Removed.
+ (gnus-article-xface-ring-size): Removed.
+ (gnus-article-display-xface): Removed.
+ (gnus-remove-image): Cleaned up.
+
* gnus-xmas.el (gnus-xmas-create-image): Convert pbm to xbm.
(gnus-xmas-create-image): Take pbm files.
+ (gnus-x-face): Removed.
+ (gnus-xmas-article-display-xface): Removed.
+
+ * gnus-fun.el (gnus-display-x-face-in-from): Bind
+ default-enable-multibyte-characters.
+
+ * compface.el (uncompface): Doc fix.
+
+ * gnus-art.el (gnus-article-x-face-command): Use
+ gnus-display-x-face-in-from.
+
+ * gnus-xmas.el (gnus-xmas-put-image): Return the image.
+
+ * gnus-ems.el (gnus-put-image): Return the image.
+
+ * gnus-fun.el (gnus-display-x-face-in-from): New function.
+ (gnus-x-face): Moved here.
+
+2002-01-04 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-xmas.el (gnus-xmas-put-image): Don't insert SPC or make
+ invisible if string is nil.
+ (gnus-xmas-article-display-xface): Use it.
+
+ * gnus-ems.el (gnus-put-image): Explicitly use SPC, and add text
+ property when string is nil.
+ (gnus-article-display-xface): Use it.
+
+2002-01-04 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-art.el (article-display-x-face): Check whether valid grey
+ face was returned.
+ (article-display-x-face): Place image in the right spot.
+
+ * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Get rid of
+ stderr.
+ (gnus-convert-gray-x-face-to-xpm): Check whether output is valid.
2002-01-03 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus-xmas.el (gnus-xmas-create-image): Take optional
- parameters.
+ parameters.
(gnus-xmas-put-image): Allow non-strings to be passed.
- * gnus-ems.el (gnus-create-image): Take optional parameters.
+ * gnus-art.el (article-display-x-face): Use optional parameters.
+
+ * gnus-ems.el (gnus-create-image): Take optional parameters.
+
+ * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Use uncompface.
+
+ * compface.el (compface-xbm-p): Removed.
+
+ * gnus-ems.el (gnus-article-compface-xbm): Removed.
+ (gnus-article-display-xface): Use compface.
+
+ * compface.el: New file.
+
+ * gnus-fun.el (gnus-convert-pbm-to-x-face-command): Remove quotes.
+ (gnus-convert-image-to-x-face-command): Ditto.
+ (gnus-random-x-face): Quote argument.
+ (gnus-x-face-from-file): Ditto.
+
+2002-01-03 Paul Jarc <prj@po.cwru.edu>
+
+ * nnmaildir.el (nnmaildir-request-expire-articles): evaluate
+ the expire-group parameter once per article rather than once
+ per group; bind `nnmaildir-article-file-name' and `article'
+ for convenience. Leave article alone when expire-group
+ specifies the current group.
+ (nnmaildir--update-nov): be more concurrency-friendly with
+ temp file names.
+
+2002-01-03 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-start.el (gnus-read-init-file): Cleaned up.
+
+2002-01-03 Dave Love <d.love@dl.ac.uk>
+
+ * gnus-start.el (gnus-startup-file-coding-system): Removed.
+ (gnus-read-init-file): Don't use it.
+
+2002-01-03 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-agent.el (gnus-agent-fetch-session): Run hook.
+
+2002-01-03 Kai Gro\e,A_\e(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+ * gnus-start.el (gnus-read-init-file): Don't force coding system
+ for ~/.gnus. From Dave Love <fx@gnu.org>.
+
+2002-01-03 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * nntp.el (nntp-send-buffer): Use mm-with-unibyte-current-buffer.
+ * nnspool.el (nnspool-request-post): Ditto.
+
+ * mm-util.el (mm-use-find-coding-systems-region): New variable.
+ (mm-find-mime-charset-region): Use it.
+
+2002-01-03 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * gnus.el (gnus-summary-line-format): Added :link.
+ * gnus-topic.el (gnus-topic-line-format): Ditto.
+ * gnus-sum.el (gnus-summary-dummy-line-format): Ditto.
+ * gnus-srvr.el (gnus-server-line-format): Ditto.
+ * gnus-group.el (gnus-group-line-format): Ditto.
+
+ * gnus-sum.el (gnus-summary-make-menu-bar): Use correct syntax for
+ :keys, it works on both Emacsen.
+
+2002-01-03 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * mm-util.el (mm-charset-to-coding-system): Don't setq charset.
+
+2002-01-03 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-msg.el (gnus-summary-send-map): Fix binding for very-wide.
+
+2002-01-03 Reiner Steib <reiner.steib@gmx.de>
+
+ * gnus-sum.el (gnus-summary-make-menu-bar): Menu bar entries for
+ very wide reply.
+
+2002-01-03 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-picon.el (gnus-picon-transform-address): Cache stuff.
+ (gnus-picon-cache): New variable.
+ (gnus-picon-transform-newsgroups): Cache stuff.
+
+ * gnus-art.el (gnus-article-reply-with-original): New command.
+ (gnus-article-followup-with-original): New command.
+
+ * gnus-msg.el (gnus-copy-article-buffer): Take optional BEG and
+ END parameters.
+ (gnus-summary-followup): Take a list of list of articles.
+ (gnus-inews-yank-articles): Allow lists of article/regions.
+
+ * gnus-art.el (gnus-article-read-summary-keys): `R' and `F' are no
+ longer the usual commands.
+
+ * gnus-fun.el (gnus-convert-image-to-gray-x-face): Use pnmnoraw.
+ (gnus-convert-gray-x-face-to-xpm): Don't use six parameters to
+ shell-command-on-region.
+
+2002-01-02 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-picon.el (gnus-picon-transform-newsgroups): Fix for the case
+ "Newsgroups: rec.music.beatles.moderated, rec.music.beatles".
+
+2002-01-03 Steve Youngs <youngs@xemacs.org>
+
+ * gnus-sum.el (gnus-summary-make-menu-bar): XEmacs doesn't
+ understand ':keys', wrap it in an featurep 'xemacs.
+
+2002-01-02 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-ems.el (gnus-article-display-xface): Show xface in the
+ order of headers (Actually, it is called in a reversed order). Add
+ 'gnus-image-text-deletable property.
+ (gnus-remove-image): Remove text with such a property.
+
+ * gnus-xmas.el (gnus-xmas-article-display-xface): Don't use
+ gnus-put-image.
+
+ * gnus-art.el (gnus-article-treat-fold-newsgroups): Replace ", *"
+ with ", "
+
+2002-01-02 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Renamed.
+
+ * gnus-art.el (gnus-ignored-headers): Hide all X-Faces.
+ (article-display-x-face): Display grey X-Faces.
+
+ * gnus-fun.el (gnus-convert-gray-x-face-region): New function.
+ (gnus-convert-gray-x-face-to-ppm): Ditto.
+ (gnus-convert-image-to-gray-x-face): Ditto.
+
+ * gnus-sum.el (gnus-summary-make-menu-bar): Add a :keys to
+ gnus-summary0show-raw-article.
2002-01-02 ShengHuo ZHU <zsh@cs.rochester.edu>
(gnus-xmas-put-image): Use end-glyph. Make text invisible.
(gnus-xmas-remove-image): Make text visible, remove glyph.
+ * gnus-picon.el (gnus-picon-transform-newsgroups)
+ (gnus-picon-transform-address): Insert spec backward, due to the
+ incompatibility of gnus-xmas-put-image.
+
+2002-01-02 Pavel Jan\e,Bm\e(Bk <Pavel@Janik.cz>
+
+ * gnus-fun.el (gnus-convert-pbm-to-x-face-command): Doc fix.
+
+2002-01-02 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.el: Doc fix.
+
+ * gnus-art.el: Doc fix.
+
+ * gnus-agent.el: Doc fix.
+
+2002-01-01 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-diary.el, gnus-delay.el: Fix copyright lines.
+
+2002-01-01 Paul Jarc <prj@po.cwru.edu>
+
+ * nnmaildir.el (nnmaildir--update-nov): automatically parse
+ NOV data out of the message again if nnmail-extra-headers has
+ changed.
+
+2002-01-02 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-fun.el: New file.
+ (gnus-convert-image-to-x-face-command): New variable.
+ (gnus-insert-x-face): New function.
+ (gnus-random-x-face): Renamed.
+ (gnus-x-face-from-file): Renamed.
+
+ * gnus-art.el (gnus-body-boundary-delimiter): Changed default to
+ "_".
+ (gnus-body-boundary-delimiter): Typo fix.
+
+2002-01-02 Simon Josefsson <jas@extundo.com>
+
+ * gnus-art.el (gnus-article-treat-body-boundary): Handle nil.
+ (gnus-body-boundary-delimiter): Fix type.
+
+2002-01-01 Simon Josefsson <jas@extundo.com>
+
+ * gnus-art.el (gnus-treat-buttonize, gnus-treat-buttonize-head)
+ (gnus-treat-emphasize, gnus-treat-strip-cr)
+ (gnus-treat-leading-whitespace, gnus-treat-hide-headers)
+ (gnus-treat-hide-boring-headers, gnus-treat-hide-signature)
+ (gnus-treat-fill-article, gnus-treat-hide-citation)
+ (gnus-treat-hide-citation-maybe)
+ (gnus-treat-strip-list-identifiers, gnus-treat-strip-pgp)
+ (gnus-treat-strip-pem, gnus-treat-strip-banner)
+ (gnus-treat-highlight-headers, gnus-treat-highlight-citation)
+ (gnus-treat-date-ut, gnus-treat-date-local)
+ (gnus-treat-date-english, gnus-treat-date-lapsed)
+ (gnus-treat-date-original, gnus-treat-date-iso8601)
+ (gnus-treat-date-user-defined, gnus-treat-strip-headers-in-body)
+ (gnus-treat-strip-trailing-blank-lines)
+ (gnus-treat-strip-leading-blank-lines)
+ (gnus-treat-strip-multiple-blank-lines)
+ (gnus-treat-unfold-headers, gnus-treat-fold-headers)
+ (gnus-treat-fold-newsgroups, gnus-treat-overstrike)
+ (gnus-treat-display-xface, gnus-treat-display-smileys)
+ (gnus-treat-from-picon, gnus-treat-mail-picon)
+ (gnus-treat-newsgroups-picon, gnus-treat-body-boundary)
+ (gnus-treat-capitalize-sentences, gnus-treat-fill-long-lines)
+ (gnus-treat-play-sounds, gnus-treat-translate)
+ (gnus-treat-x-pgp-sig): Doc fix, add link to manual.
+
+ * gnus-art.el (gnus-body-boundary-delimiter): New variable.
+ (gnus-article-treat-body-boundary): Use it.
+
+ * message.el (message-mode): Fix doc.
+ (message-mode-menu): Fix names.
+
+2002-01-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-sum.el (gnus-summary-first-subject): Really go to unseen
+ articles.
+
+ * gnus-picon.el (gnus-picon-find-face): Search MISC for all types.
+ (gnus-picon-transform-address): Search for unknown faces as well.
+ (gnus-picon-find-face): Don't search "news" for MISC.
+ (gnus-picon-user-directories): Changed default back to exclude
+ "unknown".
+
+ * gnus-sum.el (gnus-summary-hide-all-threads): Reversed logic.
+
+ * gnus-picon.el (gnus-picon-find-face): Search through all
+ databases.
+ (gnus-picon-find-face): New implementation.
+
+ * gnus-topic.el (gnus-topic-goto-previous-topic): New command and
+ keystroke.
+ (gnus-topic-goto-next-topic): Ditto.
+
+ * gnus.el (gnus-summary-line-format): Changed default.
+
+ * nnmail.el (nnmail-extra-headers): Change default.
+
+ * gnus-sum.el (gnus-extra-headers): Change default.
+
+ * message.el (message-news-other-window): Changed "news" to
+ "posting".
+ (message-news-other-frame): Ditto.
+ (message-do-send-housekeeping): Ditto.
+
+ * gnus-sum.el (gnus-summary-maybe-hide-threads): Use predicate
+ function.
+ (gnus-article-unread-p): New function.
+ (gnus-article-unseen-p): New function.
+ (gnus-dead-summary-mode-map): Typo.
+
+ * gnus-util.el (gnus-make-predicate): New function.
+ (gnus-make-predicate-1): New function.
+
+ * gnus-sum.el: New function.
+ (gnus-map-articles): New function.
+
+ * gnus-art.el (gnus-treat-fold-headers): New variable.
+ (gnus-article-treat-fold-headers): New command and keystroke.
+
+ * gnus-sum.el (gnus-dead-summary-mode-map): Clean up.
+ (gnus-dead-summary-mode-map): Bind q to bury-buffer.
+
+2002-01-01 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * message.el (message-fcc-externalize-attachments): New variable.
+ (message-do-fcc): Use it.
+
+ * gnus-msg.el (gnus-gcc-externalize-attachments): New variable.
+ (gnus-inews-do-gcc): Use it.
+
+ * mml.el (mml-tweak-sexp-alist): New variable.
+ (mml-externalize-attachments): New variable.
+ (mml-tweak-part): Use mml-tweak-sexp-alist.
+ (mml-tweak-externalize-attachments): New function.
+
+2002-01-01 Steve Youngs <youngs@xemacs.org>
+
+ * gnus-xmas.el (gnus-xmas-article-display-xface): Uncomment
+ 'set-glyph-face' so x-face back/foreground can be set.
+
+2001-12-31 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * message.el (message-fix-before-sending): Fix a typo.
+
+2002-01-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-art.el (gnus-treat-smiley): Renamed command.
+ (gnus-article-remove-images): New command and keystroke.
+
+ * gnus-sum.el (gnus-summary-toggle-smiley): Removed.
+
+ * smiley-ems.el (gnus-smiley-display): Removed.
+
+ * gnus.el (gnus-version-number): Update version.
+
+ * message.el (message-text-with-property): Renamed and moved
+ here.
+ (message-fix-before-sending): Highlight invisible text and place
+ point there.
+
2002-01-01 02:32:53 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
- * gnus.el: Oort Gnus v0.04 is released.
+ * gnus.el: Oort Gnus v0.04 is released.
2002-01-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
2001-12-19 17:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * nnmaildir.el: New.
+ * nnmaildir.el: New file.
From Paul Jarc <prj@po.cwru.edu>.
2001-12-19 16:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
2001-12-19 01:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * gnus-win.el (gnus-frames-on-display-list): New.
+ * gnus-win.el (gnus-frames-on-display-list): New function.
(gnus-get-buffer-window): Use it.
2001-12-19 00:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
2001-12-13 20:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * uudecode.el (uudecode-use-external): New.
+ * uudecode.el (uudecode-use-external): New variable.
(uudecode-decode-region): Automatically detect external program.
- * binhex.el (binhex-use-external): New.
- (binhex-decode-region-internal): New.
+ * binhex.el (binhex-use-external): New variable.
+ (binhex-decode-region-internal): New function.
(binhex-decode-region): Automatically detect external program.
- * mm-uu.el (mm-uu-decode-function):
- (mm-uu-binhex-decode-function): Use them.
+ * mm-uu.el (mm-uu-decode-function,mm-uu-binhex-decode-function):
+ Use them.
2001-12-12 Simon Josefsson <jas@extundo.com>
2001-12-07 01:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * gnus-sum.el (gnus-summary-print-truncate-and-quote): New.
+ * gnus-sum.el (gnus-summary-print-truncate-and-quote): New function.
(gnus-summary-print-article): Use it.
* gnus-util.el (gnus-replace-in-string): Typo.
2001-12-03 09:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * mm-url.el: New.
+ * mm-url.el: New file.
* nnslashdot.el: Use it.
* mm-extern.el (mm-extern-url): Use it.
2001-11-20 09:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * mm-util.el (mm-coding-system-priorities): New.
- (mm-sort-coding-systems-predicate): New.
+ * mm-util.el (mm-coding-system-priorities): New variable.
+ (mm-sort-coding-systems-predicate): New function.
(mm-find-mime-charset-region): Resort coding systems if needed.
Suggested by Katsumi Yamaoka <yamaoka@jpl.org>.
(message-send-mail): Add Mail-Followup-To.
(message-make-mft): New function.
- * gnus.el (gnus-find-subscribed-addresses): New.
+ * gnus.el (gnus-find-subscribed-addresses): New function.
2001-10-31 07:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
mm-coding-system-p. Don't correct it only in XEmacs.
(mm-charset-to-coding-system): Use mm-coding-system-p and
mm-get-coding-system-list.
- (mm-emacs-mule, mm-mule4-p): New.
+ (mm-emacs-mule, mm-mule4-p): New variables.
(mm-enable-multibyte, mm-disable-multibyte,
mm-enable-multibyte-mule4, mm-disable-multibyte-mule4,
mm-with-unibyte-current-buffer,
message-news-p, which widens the buffer.
(message-forward-make-body): New function.
(message-forward): Use it.
- (message-insinuate-rmail): New.
- (message-forward-rmail-make-body): New.
+ (message-insinuate-rmail): New function.
+ (message-forward-rmail-make-body): New function.
2001-10-30 02:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
* nnslashdot.el (nnslashdot-retrieve-headers-1): Replace
nnslashdot-*-retrieve-headers.
(nnslashdot-request-article): Fix for slashcode 2.2.
- (nnslashdot-make-tuple): New.
+ (nnslashdot-make-tuple): New function.
(nnslashdot-read-groups): Use it.
2001-08-20 01:34:03 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus.el (gnus-expand-group-parameters): Fix.
- * gnus-spec.el (gnus-char-width): New.
+ * gnus-spec.el (gnus-char-width): New function.
(gnus-correct-substring, gnus-correct-length): Use it.
* message.el (message-required-mail-headers): Fix doc.
* gnus.el (gnus-info-find-node): Take an argument.
- * gnus-art.el (gnus-button-handle-info): New.
+ * gnus-art.el (gnus-button-handle-info): New function.
(gnus-url-unhex-string): Replace "+" with " ".
2001-08-17 21:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
2001-08-17 14:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
* smime.el (smime-point-at-eol): eval-and-compile.
- (smime-make-temp-file): New.
+ (smime-make-temp-file): New function.
(smime-sign-region, smime-encrypt-region, smime-decrypt-region):
Use it.
2001-08-10 21:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
* nndoc.el (nndoc-article-type): Fix doc.
- (nndoc-generate-article-function): New.
- (nndoc-dissection-function): New.
+ (nndoc-generate-article-function): New variable.
+ (nndoc-dissection-function): New variable.
(nndoc-type-alist): Add oe-dbx.
- (nndoc-oe-dbx-type-p): New.
- (nndoc-oe-dbx-dissection): New.
- (nndoc-oe-dbx-generate-article): New.
+ (nndoc-oe-dbx-type-p): New function.
+ (nndoc-oe-dbx-dissection): New function.
+ (nndoc-oe-dbx-generate-article): New function.
2001-08-11 Kai Gro\e,A_\e(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
2001-08-10 01:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * message.el (message-bogus-system-names): New.
+ * message.el (message-bogus-system-names): New variable.
(message-make-fqdn): Use it.
2001-08-09 15:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
2001-07-31 17:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
Originally from Pavel Jan\e,Bm\e(Bk <Pavel@Janik.cz>
- * gnus-agent.el (gnus-agent-make-mode-line-string): New.
+ * gnus-agent.el (gnus-agent-make-mode-line-string): New function.
(gnus-agent-toggle-plugged): Use it.
2001-07-31 ShengHuo ZHU <zsh@cs.rochester.edu>
2001-07-30 15:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
Originally from Andreas Fuchs <asf@void.at>
- * mml2015.el (mml2015-trust-boundaries-alist)
- (mml2015-gpg-pretty-print-fpr): New.
+ * mml2015.el (mml2015-trust-boundaries-alist): New variable.
+ (mml2015-gpg-pretty-print-fpr): New function.
(mml2015-gpg-extract-signature-details): More details, rename from
`m-g-e-from'.
(mml2015-gpg-verify): Use them.
2001-07-27 23:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * mm-decode.el (mm-image-type-from-buffer): New.
+ * mm-decode.el (mm-image-type-from-buffer): New function.
(mm-get-image): Use it.
2001-07-27 18:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * gnus.el (gnus-large-newsgroup): If it is nil, ...
+ * gnus.el (gnus-large-newsgroup): Add doc, "If it is nil, ..."
* gnus-art.el (gnus-mime-view-all-parts): buffer-read-only covers
mm-display-parts too.
2001-07-27 07:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * mml.el (mml-tweak-type-alist): New.
- (mml-tweak-function-alist): New.
- (mml-tweak-part): New.
+ * mml.el (mml-tweak-type-alist): New variable.
+ (mml-tweak-function-alist): New variable.
+ (mml-tweak-part): New function.
(mml-generate-mime-1): Use it.
2001-07-26 22:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
2001-07-26 14:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * mm-decode.el (mm-readable-p): New.
+ * mm-decode.el (mm-readable-p): New function.
(mm-inline-media-tests): Fix the default testers.
2001-07-26 Simon Josefsson <jas@extundo.com>
2001-07-25 11:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * gnus-util.el (gnus-byte-compile): New.
- (gnus-use-byte-compile): New.
+ * gnus-util.el (gnus-byte-compile): New function.
+ (gnus-use-byte-compile): New variable.
(gnus-make-sort-function): Use it.
* nnmail.el (nnmail-get-new-mail): Use it.
* message.el (message-bounce): If no Return-Path, the whole
content is considered as the original message.
- * nnml.el (nnml-check-directory-twice): New.
+ * nnml.el (nnml-check-directory-twice): New variable.
(nnml-article-to-file): Use it.
(nnml-retrieve-headers): Hack it.
* gnus-sum.el (gnus-articles-to-read): Use gnus-group-decoded-name.
- * mm-util.el (mm-string-as-multibyte): New.
+ * mm-util.el (mm-string-as-multibyte): New function.
* nnmh.el (nnmh-request-list-1): Encode, not decode!
2001-07-23 18:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * mm-util.el (mm-universal-coding-system): New.
+ * mm-util.el (mm-universal-coding-system): New variable.
* gnus-start.el (gnus-startup-file-coding-system): Use it.
2001-07-18 11:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * mml.el (mml-content-type-parameters): New.
- (mml-content-disposition-parameters): New.
+ * mml.el (mml-content-type-parameters): New variable.
+ (mml-content-disposition-parameters): New variable.
(mml-insert-mime-headers): Use them.
(mml-parse-1): Accept charset.
* gnus-msg.el (gnus-msg-treat-broken-reply-to): Add force.
(gnus-summary-reply): Use it.
- (gnus-summary-reply-broken-reply-to): New.
- (gnus-msg-force-broken-reply-to): New.
+ (gnus-summary-reply-broken-reply-to): New function.
+ (gnus-msg-force-broken-reply-to): New function.
* mm-view.el (mm-inline-text): Showing as text/plain when error.
* nnrss.el (nnrss-request-expire-articles): Correct the return value.
* nnslashdot.el (nnslashdot-request-list): Add time.
- (nnslashdot-request-expire-articles): New.
+ (nnslashdot-request-expire-articles): New function.
* gnus-start.el (gnus-check-bogus-newsgroups): Remove bogus
secondary methods too.
2001-03-21 Didier Verna <didier@lrde.epita.fr>
- * gnus-start.el:
* gnus-start.el (gnus-subscribe-newsgroup-hooks): New.
* gnus-start.el (gnus-subscribe-newsgroup): use it.
-
2001-03-15 09:47:23 Lars Magne Ingebrigtsen <larsi@gnus.org>
* nnultimate.el (nnultimate-retrieve-headers): Understand
2001-02-23 23:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * nnslashdot.el (nnslashdot-backslash-url): New.
+ * nnslashdot.el (nnslashdot-backslash-url): New variable.
(nnslashdot-request-list): Use it.
2001-02-23 22:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
no file.
* gnus-sum.el (gnus-summary-import-article): Display it. Enable edit.
- (gnus-summary-create-article): New.
+ (gnus-summary-create-article): New function.
- * gnus-group.el (gnus-group-mark-article-read): New.
+ * gnus-group.el (gnus-group-mark-article-read): New function.
* gnus-msg.el (gnus-inews-do-gcc): Use it.
gnus-article-edit-exit.
(gnus-article-edit-exit): Confirm and insert original-article-buffer.
- * gnus.el (gnus-parameters): New.
+ * gnus.el (gnus-parameters): New variable.
Suggested by NAGY Andras <nagya@inf.elte.hu>.
- (gnus-parameters-get-parameter): New.
+ (gnus-parameters-get-parameter): New function.
(gnus-group-find-parameter): Use it.
2001-02-23 Simon Josefsson <simon@josefsson.org>
2001-02-22 22:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * gnus-sum.el (gnus-fetch-headers): New.
+ * gnus-sum.el (gnus-fetch-headers): New function.
(gnus-select-newsgroup): Use it.
- (gnus-summary-insert-articles): New.
- (gnus-summary-insert-old-articles): New.
- (gnus-summary-insert-new-articles): New.
+ (gnus-summary-insert-articles): New function.
+ (gnus-summary-insert-old-articles): New function.
+ (gnus-summary-insert-new-articles): New function.
* gnus-group.el (gnus-group-prepare-flat-list-dead): Use decoded-name.
(gnus-group-list-active): Ditto.
* gnus-msg.el (gnus-inews-do-gcc): Activate group anyway.
* gnus-art.el (gnus-mime-display-multipart-alternative-as-mixed):
- New.
- (gnus-mime-display-multipart-related-as-mixed): New.
+ New variable.
+ (gnus-mime-display-multipart-related-as-mixed): New variable.
(gnus-mime-display-part): Use them.
2001-02-20 16:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
* gnus-srvr.el (gnus-server-regenerate-server): Use gnus-get-function.
- * nnagent.el (nnagent-request-regenerate): New.
+ * nnagent.el (nnagent-request-regenerate): New function.
- * nnfolder.el (nnfolder-request-regenerate): Deffoo.
+ * nnfolder.el (nnfolder-request-regenerate): New deffoo.
* nnml.el (nnml-generate-nov-databases): Accept argument
server. Don't open server if it is opened.
2001-02-13 19:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * gnus-draft.el (gnus-draft-reminder): New.
+ * gnus-draft.el (gnus-draft-reminder): New function.
- * gnus-art.el (gnus-sender-save-name): New.
+ * gnus-art.el (gnus-sender-save-name): New function.
2001-02-13 18:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
* gnus-topic.el (gnus-subscribe-topics): Return nil if not
subscribe.
- * gnus-start.el (gnus-call-subscribe-functions): New.
+ * gnus-start.el (gnus-call-subscribe-functions): New function.
(gnus-find-new-newsgroups): Use it.
(gnus-ask-server-for-new-groups): Use it.
(gnus-check-first-time-used): Use it.
* gnus-group.el (gnus-group-suspend): Offer save summaries.
- * gnus-art.el (gnus-treat-leading-whitespace): New.
+ * gnus-art.el (gnus-treat-leading-whitespace): New variable.
(gnus-treatment-function-alist): Use it.
- (article-remove-leading-whitespace): New.
+ (article-remove-leading-whitespace): New function.
(gnus-article-make-menu-bar): Use it.
* gnus-sum.el (gnus-summary-wash-empty-map): Add
2001-02-06 21:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * gnus-group.el (gnus-group-listing-limit): New.
+ * gnus-group.el (gnus-group-listing-limit): New variable.
(gnus-group-prepare-flat-list-dead): Use old trick to speed up.
* gnus-topic.el (gnus-group-prepare-topics): Use gnus-killed-hashtb.
2001-01-20 09:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
- * mm-util.el (mm-string-as-unibyte): New.
+ * mm-util.el (mm-string-as-unibyte): New function.
* message.el (message-forward): Use it.
* message.el (message-tool-bar-map): Use it.
- * Makefile.in (install-el): New.
+ * Makefile.in (install-el): New rule.
2000-12-21 Katsumi Yamaoka <yamaoka@jpl.org>
* mml2015.el (mml2015-function-alist): Clear verify and decrypt.
* mm-uu.el: Reorganized. Add gnatsweb, pgp-signed, pgp-encrypted.
- * mm-decode.el (mm-snarf-option): New.
+ * mm-decode.el (mm-snarf-option): New variable.
2000-11-04 13:08:02 ShengHuo ZHU <zsh@cs.rochester.edu>
:group 'gnus-agent
:type 'hook)
+(defcustom gnus-agent-fetched-hook nil
+ "Hook run after finishing fetching articles."
+ :group 'gnus-agent
+ :type 'hook)
+
(defcustom gnus-agent-handle-level gnus-level-subscribed
"Groups on levels higher than this variable will be ignored by the Agent."
:group 'gnus-agent
:type 'integer)
(defcustom gnus-agent-expire-days 7
- "Read articles older than this will be expired."
+ "Read articles older than this will be expired.
+This can also be a list of regexp/day pairs. The regexps will
+be matched against group names."
:group 'gnus-agent
:type 'integer)
err))
(signal 'quit "Cannot fetch articles into the Gnus agent"))))
(pop methods))
+ (run-hooks 'gnus-agent-fetch-hook)
(gnus-message 6 "Finished fetching articles into the Gnus agent"))))
(defun gnus-agent-fetch-group-1 (group method)
"Hook run in `gnus-category-mode' buffers.")
(defvar gnus-category-line-format " %(%20c%): %g\n"
- "Format of category lines.")
+ "Format of category lines.
+
+Valid specifiers include:
+%c Topic name (string)
+%g The number of groups in the topic (integer)
+
+General format specifiers can also be used. See
+(gnus)Formatting Variables.")
(defvar gnus-category-mode-line-format "Gnus: %%b"
"The format specification for the category mode line.")
"Expire all old articles."
(interactive)
(let ((methods gnus-agent-covered-methods)
- (day (- (time-to-days (current-time)) gnus-agent-expire-days))
+ (day (if (numberp gnus-agent-expire-days)
+ (- (time-to-days (current-time)) gnus-agent-expire-days)
+ nil))
+ (current-day (time-to-days (current-time)))
gnus-command-method sym group articles
history overview file histories elem art nov-file low info
- unreads marked article orig lowest highest)
+ unreads marked article orig lowest highest found days)
(save-excursion
(setq overview (gnus-get-buffer-create " *expire overview*"))
(while (setq gnus-command-method (pop methods))
(skip-chars-forward "^\t")
(if (let ((fetch-date (read (current-buffer))))
(if (numberp fetch-date)
- (> fetch-date day)
+ ;; We now have the arrival day, so we see
+ ;; whether it's old enough to be expired.
+ (if (numberp day)
+ (> fetch-date day)
+ (skip-chars-forward "\t")
+ (setq found nil
+ days gnus-agent-expire-days)
+ (while (and (not found)
+ days)
+ (when (looking-at (caar days))
+ (setq found (cadar days)))
+ (pop days))
+ (> fetch-date (- current-day found)))
;; History file is corrupted.
(gnus-message
5
"^X-UIDL:" "^MIME-Version:" "^Return-Path:" "^In-Reply-To:"
"^Content-Type:" "^Content-Transfer-Encoding:" "^X-WebTV-Signature:"
"^X-MimeOLE:" "^X-MSMail-Priority:" "^X-Priority:" "^X-Loop:"
- "^X-Authentication-Warning:" "^X-MIME-Autoconverted:" "^X-Face:"
+ "^X-Authentication-Warning:" "^X-MIME-Autoconverted:" "^X-Face"
"^X-Attribution:" "^X-Originating-IP:" "^Delivered-To:"
"^NNTP-[-A-Za-z]+:" "^Distribution:" "^X-no-archive:" "^X-Trace:"
"^X-Complaints-To:" "^X-NNTP-Posting-Host:" "^X-Orig.*:"
"^X-Content-length:" "^X-Posting-Agent:" "^Original-Received:"
"^X-Request-PGP:" "^X-Fingerprint:" "^X-WRIEnvto:" "^X-WRIEnvfrom:"
"^X-Virus-Scanned:" "^X-Delivery-Agent:" "^Posted-Date:" "^X-Gateway:"
- "^X-Local-Origin:" "^X-Local-Destination:" "^X-UserInfo1:")
+ "^X-Local-Origin:" "^X-Local-Destination:" "^X-UserInfo1:"
+ "^X-Received-Date:")
"*All headers that start with this regexp will be hidden.
This variable can also be a list of regexps of headers to be ignored.
If `gnus-visible-headers' is non-nil, this variable will be ignored."
(cond
((featurep 'xemacs)
(if (or (gnus-image-type-available-p 'xface)
- (gnus-image-type-available-p 'xpm))
- 'gnus-xmas-article-display-xface
+ (gnus-image-type-available-p 'pbm))
+ 'gnus-display-x-face-in-from
"{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | ee -"))
((and (fboundp 'image-type-available-p)
(module-installed-p 'x-face-e21))
'x-face-decode-message-header)
- ((gnus-image-type-available-p 'xbm)
- 'gnus-article-display-xface)
+ ((gnus-image-type-available-p 'pbm)
+ 'gnus-display-x-face-in-from)
((and window-system
(module-installed-p 'x-face-mule))
'x-face-mule-gnus-article-display-x-face)
- (gnus-article-compface-xbm
- "{ echo '/* Width=48, Height=48 */'; uncompface; } | display -")
(t
"{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | \
display -"))
(delq nil
(list
'string
- (if (and (featurep 'xemacs)
- (or (featurep 'xface)
- (featurep 'xpm)))
- '(function-item gnus-xmas-article-display-xface))
+ (if (or (gnus-image-type-available-p 'xface)
+ (gnus-image-type-available-p 'pbm))
+ '(function-item gnus-display-x-face-in-from))
(if (and x-face-e21
(fboundp 'image-type-available-p))
'(function-item
:group 'gnus-article-mime
:type '(repeat regexp))
+(defcustom gnus-body-boundary-delimiter "_"
+ "String used to delimit header and body.
+This variable is used by `gnus-article-treat-body-boundary' which can
+be controlled by `gnus-treat-body-boundary'."
+ :group 'gnus-article-various
+ :type '(choice (item :tag "None" :value nil)
+ string))
+
(defcustom gnus-article-mime-part-function nil
"Function called with a MIME handle as the argument.
This is meant for people who want to do something automatic based
(defcustom gnus-treat-buttonize 100000
"Add buttons.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(put 'gnus-treat-buttonize 'highlight t)
(defcustom gnus-treat-buttonize-head 'head
"Add buttons to the head.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-head-custom)
(put 'gnus-treat-buttonize-head 'highlight t)
50000)
"Emphasize text.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(put 'gnus-treat-emphasize 'highlight t)
(defcustom gnus-treat-strip-cr nil
"Remove carriage returns.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-leading-whitespace nil
"Remove leading whitespace in headers.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-hide-headers 'head
"Hide headers.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-head-custom)
(defcustom gnus-treat-hide-boring-headers nil
"Hide boring headers.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-head-custom)
(defcustom gnus-treat-hide-signature nil
"Hide the signature.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-fill-article nil
"Fill the article.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-hide-citation nil
"Hide cited text.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-hide-citation-maybe nil
"Hide cited text.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-strip-list-identifiers 'head
"Strip list identifiers from `gnus-list-identifiers`.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:version "21.1"
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-strip-pgp t
"Strip PGP signatures.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-strip-pem nil
"Strip PEM signatures.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
"Strip banners from articles.
The banner to be stripped is specified in the `banner' group parameter.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-highlight-headers 'head
"Highlight the headers.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-head-custom)
(put 'gnus-treat-highlight-headers 'highlight t)
(defcustom gnus-treat-highlight-citation t
"Highlight cited text.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(put 'gnus-treat-highlight-citation 'highlight t)
(defcustom gnus-treat-date-ut nil
"Display the Date in UT (GMT).
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-head-custom)
(defcustom gnus-treat-date-local nil
"Display the Date in the local timezone.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-head-custom)
(defcustom gnus-treat-date-english nil
"Display the Date in a format that can be read aloud in English.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-head-custom)
(defcustom gnus-treat-date-lapsed nil
"Display the Date header in a way that says how much time has elapsed.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-head-custom)
(defcustom gnus-treat-date-original nil
"Display the date in the original timezone.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-head-custom)
(defcustom gnus-treat-date-iso8601 nil
"Display the date in the ISO8601 format.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:version "21.1"
:group 'gnus-article-treat
:type gnus-article-treat-head-custom)
"Display the date in a user-defined format.
The format is defined by the `gnus-article-time-format' variable.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-head-custom)
(defcustom gnus-treat-strip-headers-in-body t
"Strip the X-No-Archive header line from the beginning of the body.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:version "21.1"
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-strip-trailing-blank-lines nil
"Strip trailing blank lines.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-strip-leading-blank-lines nil
"Strip leading blank lines.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-strip-multiple-blank-lines nil
"Strip multiple blank lines.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-unfold-headers 'head
"Unfold folded header lines.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
+ :group 'gnus-article-treat
+ :type gnus-article-treat-custom)
+
+(defcustom gnus-treat-fold-headers nil
+ "Fold headers.
+Valid values are nil, t, `head', `last', an integer or a predicate.
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-fold-newsgroups 'head
"Fold the Newsgroups and Followup-To headers.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-overstrike t
"Treat overstrike highlighting.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(put 'gnus-treat-overstrike 'highlight t)
'head)
"Display X-Face headers.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' and Info node
+`(gnus)X-Face' for details."
:group 'gnus-article-treat
;;:version "21.1"
:type gnus-article-treat-head-custom)
nil)
"Display smileys.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' and Info node
+`(gnus)Smileys' for details."
:group 'gnus-article-treat
;;:version "21.1"
:type gnus-article-treat-custom)
'head nil)
"Display picons in the From header.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' and Info node
+`(gnus)Picons' for details."
:group 'gnus-article-treat
:type gnus-article-treat-head-custom)
(put 'gnus-treat-from-picon 'highlight t)
'head nil)
"Display picons in To and Cc headers.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' and Info node
+`(gnus)Picons' for details."
:group 'gnus-article-treat
:type gnus-article-treat-head-custom)
(put 'gnus-treat-mail-picon 'highlight t)
'head nil)
"Display picons in the Newsgroups and Followup-To headers.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' and Info node
+`(gnus)Picons' for details."
:group 'gnus-article-treat
:type gnus-article-treat-head-custom)
(put 'gnus-treat-newsgroups-picon 'highlight t)
'head nil)
"Draw a boundary at the end of the headers.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:version "21.1"
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-capitalize-sentences nil
"Capitalize sentence-starting words.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:version "21.1"
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-fill-long-lines nil
"Fill long lines.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-play-sounds nil
"Play sounds.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:version "21.1"
:group 'gnus-article-treat
:type gnus-article-treat-custom)
(defcustom gnus-treat-translate nil
"Translate articles from one language to another.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:version "21.1"
:group 'gnus-article-treat
:type gnus-article-treat-custom)
"Verify X-PGP-Sig.
To automatically treat X-PGP-Sig, set it to head.
Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
+See Info node `(gnus)Customizing Articles' for details."
:group 'gnus-article-treat
:group 'mime-security
:type gnus-article-treat-custom)
(gnus-treat-date-original gnus-article-date-original)
(gnus-treat-date-user-defined gnus-article-date-user)
(gnus-treat-date-iso8601 gnus-article-date-iso8601)
+ (gnus-treat-display-xface gnus-article-display-x-face)
(gnus-treat-hide-headers gnus-article-maybe-hide-headers)
(gnus-treat-hide-boring-headers gnus-article-hide-boring-headers)
(gnus-treat-hide-signature gnus-article-hide-signature)
gnus-article-strip-multiple-blank-lines)
(gnus-treat-overstrike gnus-article-treat-overstrike)
(gnus-treat-unfold-headers gnus-article-treat-unfold-headers)
+ (gnus-treat-fold-headers gnus-article-treat-fold-headers)
(gnus-treat-fold-newsgroups gnus-article-treat-fold-newsgroups)
(gnus-treat-buttonize-head gnus-article-add-buttons-to-head)
- (gnus-treat-display-smileys ,(if (or (featurep 'xemacs)
- (>= emacs-major-version 21))
- 'gnus-smiley-display
- 'gnus-article-smiley-display))
+ (gnus-treat-display-smileys gnus-treat-smiley)
(gnus-treat-capitalize-sentences gnus-article-capitalize-sentences)
(gnus-treat-emphasize gnus-article-emphasize)
- (gnus-treat-display-xface gnus-article-display-x-face)
(gnus-treat-body-boundary gnus-article-treat-body-boundary)
(gnus-treat-play-sounds gnus-earcon-display)))
(replace-match " " t t)))
(goto-char (point-max)))))))
+(defun gnus-article-treat-fold-headers ()
+ "Fold message headers."
+ (interactive)
+ (gnus-with-article-headers
+ (while (not (eobp))
+ (save-restriction
+ (mail-header-narrow-to-field)
+ (mail-header-fold-field)
+ (goto-char (point-max))))))
+
+(defun gnus-treat-smiley ()
+ "Display textual emoticons (\"smileys\") as small graphical icons."
+ (interactive)
+ (gnus-with-article-buffer
+ (if (memq 'smiley gnus-article-wash-types)
+ (gnus-delete-images 'smiley)
+ (article-goto-body)
+ (let ((images (smiley-region (point) (point-max))))
+ (when images
+ (gnus-add-wash-type 'smiley)
+ (dolist (image images)
+ (gnus-add-image 'smiley image)))))))
+
+(defun gnus-article-remove-images ()
+ "Remove all images from the article buffer."
+ (interactive)
+ (gnus-with-article-buffer
+ (dolist (elem gnus-article-image-alist)
+ (gnus-delete-images (car elem)))))
+
(defun gnus-article-treat-fold-newsgroups ()
"Unfold folded message headers.
Only the headers that fit into the current window width will be
(while (gnus-article-goto-header "newsgroups\\|followup-to")
(save-restriction
(mail-header-narrow-to-field)
- (while (search-forward "," nil t)
+ (while (re-search-forward ", *" nil t)
(replace-match ", " t t))
(mail-header-fold-field)
(goto-char (point-max))))))
(defun gnus-article-treat-body-boundary ()
"Place a boundary line at the end of the headers."
(interactive)
- (gnus-with-article-headers
- (goto-char (point-max))
- (let ((start (point)))
- (insert "X-Boundary: ")
- (gnus-add-text-properties start (point) '(invisible t intangible t))
- (insert (make-string (1- (window-width)) ?-)
- "\n"))))
+ (when (and gnus-body-boundary-delimiter
+ (> (length gnus-body-boundary-delimiter) 0))
+ (gnus-with-article-headers
+ (goto-char (point-max))
+ (let ((start (point)))
+ (insert "X-Boundary: ")
+ (gnus-add-text-properties start (point) '(invisible t intangible t))
+ (insert (let (str)
+ (while (>= (1- (window-width)) (length str))
+ (setq str (concat str gnus-body-boundary-delimiter)))
+ (substring str 0 (1- (window-width))))
+ "\n")))))
(defun article-fill-long-lines ()
"Fill lines that are wider than the window width."
(defun article-display-x-face (&optional force)
"Look for an X-Face header and display it if present."
(interactive (list 'force))
- (gnus-with-article-headers
- ;; Delete the old process, if any.
- (when (process-status "article-x-face")
- (delete-process "article-x-face"))
- (if (memq 'xface gnus-article-wash-types)
- ;; We have already displayed X-Faces, so we remove them
- ;; instead.
- (gnus-delete-images 'xface)
- ;; Display X-Faces.
- (let (x-faces from face)
- (save-excursion
- (set-buffer gnus-original-article-buffer)
- (save-restriction
- (mail-narrow-to-head)
- (while (gnus-article-goto-header "x-face")
- (push (mail-header-field-value) x-faces))
- (setq from (message-fetch-field "from"))))
- ;; Sending multiple EOFs to xv doesn't work, so we only do a
- ;; single external face.
- (when (stringp gnus-article-x-face-command)
- (setq x-faces (list (car x-faces))))
- (while (and (setq face (pop x-faces))
- gnus-article-x-face-command
- (or force
- ;; Check whether this face is censored.
- (not gnus-article-x-face-too-ugly)
- (and gnus-article-x-face-too-ugly from
- (not (string-match gnus-article-x-face-too-ugly
- from)))))
- ;; We display the face.
- (if (symbolp gnus-article-x-face-command)
- ;; The command is a lisp function, so we call it.
- (if (gnus-functionp gnus-article-x-face-command)
- (funcall gnus-article-x-face-command face)
- (error "%s is not a function" gnus-article-x-face-command))
- ;; The command is a string, so we interpret the command
- ;; as a, well, command, and fork it off.
- (let ((process-connection-type nil))
- (process-kill-without-query
- (start-process
- "article-x-face" nil shell-file-name shell-command-switch
- gnus-article-x-face-command))
- (with-temp-buffer
- (insert face)
- (process-send-region "article-x-face" (point-min) (point-max)))
- (process-send-eof "article-x-face"))))))))
+ (let ((wash-face-p buffer-read-only)) ;; When type `W f'
+ (gnus-with-article-headers
+ ;; Delete the old process, if any.
+ (when (process-status "article-x-face")
+ (delete-process "article-x-face"))
+ (if (memq 'xface gnus-article-wash-types)
+ ;; We have already displayed X-Faces, so we remove them
+ ;; instead.
+ (gnus-delete-images 'xface)
+ ;; Display X-Faces.
+ (let (x-faces from face grey)
+ (save-excursion
+ (when (and wash-face-p
+ (progn
+ (goto-char (point-min))
+ (not (re-search-forward
+ "^X-Face\\(-[0-9]+\\)?:[\t ]*" nil t)))
+ (gnus-buffer-live-p gnus-original-article-buffer))
+ ;; If type `W f', use gnus-original-article-buffer,
+ ;; otherwise use the current buffer because displaying
+ ;; RFC822 parts calls this function too.
+ (set-buffer gnus-original-article-buffer))
+ (save-restriction
+ (mail-narrow-to-head)
+ (while (gnus-article-goto-header "x-face\\(-[0-9]+\\)?")
+ (when (match-beginning 2)
+ (setq grey t))
+ (push (mail-header-field-value) x-faces))
+ (setq from (message-fetch-field "from"))))
+ (if grey
+ (let ((xpm (gnus-convert-gray-x-face-to-xpm x-faces))
+ image)
+ (when xpm
+ (setq image (gnus-create-image xpm 'xpm t))
+ (gnus-article-goto-header "from")
+ (gnus-add-wash-type 'xface)
+ (gnus-add-image 'xface image)
+ (gnus-put-image image)))
+ ;; Sending multiple EOFs to xv doesn't work, so we only do a
+ ;; single external face.
+ (when (stringp gnus-article-x-face-command)
+ (setq x-faces (list (car x-faces))))
+ (while (and (setq face (pop x-faces))
+ gnus-article-x-face-command
+ (or force
+ ;; Check whether this face is censored.
+ (not gnus-article-x-face-too-ugly)
+ (and gnus-article-x-face-too-ugly from
+ (not (string-match gnus-article-x-face-too-ugly
+ from)))))
+ ;; We display the face.
+ (if (symbolp gnus-article-x-face-command)
+ ;; The command is a lisp function, so we call it.
+ (if (gnus-functionp gnus-article-x-face-command)
+ (funcall gnus-article-x-face-command face)
+ (error "%s is not a function" gnus-article-x-face-command))
+ ;; The command is a string, so we interpret the command
+ ;; as a, well, command, and fork it off.
+ (let ((process-connection-type nil))
+ (process-kill-without-query
+ (start-process
+ "article-x-face" nil shell-file-name shell-command-switch
+ gnus-article-x-face-command))
+ (with-temp-buffer
+ (insert face)
+ (process-send-region "article-x-face"
+ (point-min) (point-max)))
+ (process-send-eof "article-x-face"))))))))))
(defun article-decode-mime-words ()
"Decode all MIME-encoded words in the article."
">" end-of-buffer
"\C-c\C-i" gnus-info-find-node
"\C-c\C-b" gnus-bug
+ "R" gnus-article-reply-with-original
+ "F" gnus-article-followup-with-original
"\C-hk" gnus-article-describe-key
"\C-hc" gnus-article-describe-key-briefly
;;;
(defvar gnus-mime-button-line-format "%{%([%p. %d%T]%)%}%e\n"
- "The following specs can be used:
+ "Format of the MIME buttons.
+
+Valid specifiers include:
%t The MIME type
%T MIME type, along with additional info
%n The `name' parameter
%d The description, if any
%l The length of the encoded part
%p The part identifier number
-%e Dots if the part isn't displayed")
+%e Dots if the part isn't displayed
+
+General format specifiers can also be used. See
+(gnus)Formatting Variables.")
(defvar gnus-mime-button-line-format-alist
'((?t gnus-tmp-type ?s)
(setq b (point))
(gnus-eval-format
gnus-mime-button-line-format gnus-mime-button-line-format-alist
- `(keymap ,gnus-mime-button-map
- ,@(if (>= (string-to-number emacs-version) 21)
- nil
- (list 'local-map gnus-mime-button-map))
- gnus-callback gnus-mm-display-part
- gnus-part ,gnus-tmp-id
- article-type annotation
- gnus-data ,handle))
+ `(,@(gnus-local-map-property gnus-mime-button-map)
+ gnus-callback gnus-mm-display-part
+ gnus-part ,gnus-tmp-id
+ article-type annotation
+ gnus-data ,handle))
(setq e (point))
(widget-convert-button
'link b e
',gnus-article-mime-handle-alist))
(gnus-mime-display-alternative
',ihandles ',not-pref ',begend ,id))
- ,@(if (>= (string-to-number emacs-version) 21)
- nil ;; XEmacs doesn't care
- (list 'local-map gnus-mime-button-map))
+ ,@(gnus-local-map-property gnus-mime-button-map)
,gnus-mouse-face-prop ,gnus-article-mouse-face
face ,gnus-article-button-face
- keymap ,gnus-mime-button-map
gnus-part ,id
gnus-data ,handle))
(widget-convert-button 'link from (point)
',gnus-article-mime-handle-alist))
(gnus-mime-display-alternative
',ihandles ',handle ',begend ,id))
- ,@(if (>= (string-to-number emacs-version) 21)
- nil ;; XEmacs doesn't care
- (list 'local-map gnus-mime-button-map))
+ ,@(gnus-local-map-property gnus-mime-button-map)
,gnus-mouse-face-prop ,gnus-article-mouse-face
face ,gnus-article-button-face
- keymap ,gnus-mime-button-map
gnus-part ,id
gnus-data ,handle))
(widget-convert-button 'link from (point)
(interactive "P")
(gnus-article-check-buffer)
(let ((nosaves
- '("q" "Q" "c" "r" "R" "\C-c\C-f" "m" "a" "f" "F"
+ '("q" "Q" "c" "r" "\C-c\C-f" "m" "a" "f"
"Zc" "ZC" "ZE" "ZJ" "ZQ" "ZZ" "Zn" "ZR" "ZG" "ZN" "ZP"
"=" "^" "\M-^" "|"))
(nosave-but-article
(describe-key-briefly key insert))
(describe-key-briefly key insert)))
+(defun gnus-article-reply-with-original (&optional wide)
+ "Start composing a reply mail to the current message.
+The text in the region will be yanked. If the region isn't active,
+the entire article will be yanked."
+ (interactive "P")
+ (let ((article (cdr gnus-article-current)))
+ (if (not mark-active)
+ (gnus-summary-reply (list (list article)) wide)
+ ;; Deactivate active regions.
+ (when (and (boundp 'transient-mark-mode)
+ transient-mark-mode)
+ (setq mark-active nil))
+ (gnus-summary-reply
+ (list (list article (buffer-substring (point) (mark)))) wide))))
+
+(defun gnus-article-followup-with-original ()
+ "Compose a followup to the current article.
+The text in the region will be yanked. If the region isn't active,
+the entire article will be yanked."
+ (interactive)
+ (let ((article (cdr gnus-article-current)))
+ (if (not mark-active)
+ (gnus-summary-followup (list (list article)))
+ ;; Deactivate active regions.
+ (when (and (boundp 'transient-mark-mode)
+ transient-mark-mode)
+ (setq mark-active nil))
+ (gnus-summary-followup
+ (list (list article (buffer-substring (point) (mark))))))))
+
(defun gnus-article-hide (&optional arg force)
"Hide all the gruft in the current article.
This means that PGP stuff, signatures, cited text and (some)
("^X-[Uu][Rr][Ll]:" ,gnus-button-url-regexp 0 t browse-url 0)
("^Subject:" ,gnus-button-url-regexp 0 t browse-url 0)
("^[^:]+:" ,gnus-button-url-regexp 0 t browse-url 0)
+ ("^[^:]+:" "\\bmailto:\\([-a-zA-Z.@_+0-9%=?]+\\)" 0 t gnus-url-mailto 1)
("^[^:]+:" "\\(<\\(url: \\)?news:\\([^>\n ]*\\)>\\)" 1 t
gnus-button-message-id 3))
"*Alist of headers and regexps to match buttons in article heads.
(defvar gnus-next-page-line-format "%{%(Next page...%)%}\n")
(defvar gnus-prev-page-line-format "%{%(Previous page...%)%}\n")
-(defvar gnus-prev-page-map nil)
-(unless gnus-prev-page-map
- (setq gnus-prev-page-map (make-sparse-keymap))
- (define-key gnus-prev-page-map gnus-mouse-2 'gnus-button-prev-page)
- (define-key gnus-prev-page-map "\r" 'gnus-button-prev-page))
+(defvar gnus-prev-page-map
+ (let ((map (make-sparse-keymap)))
+ (unless (>= emacs-major-version 21)
+ ;; XEmacs doesn't care.
+ (set-keymap-parent map gnus-article-mode-map))
+ (define-key map gnus-mouse-2 'gnus-button-prev-page)
+ (define-key map "\r" 'gnus-button-prev-page)
+ map))
-(static-if (featurep 'xemacs)
- (defun gnus-insert-prev-page-button ()
- (let ((buffer-read-only nil))
- (gnus-eval-format
- gnus-prev-page-line-format nil
- `(gnus-prev t local-map ,gnus-prev-page-map
- gnus-callback gnus-article-button-prev-page
- article-type annotation))))
- (defun gnus-insert-prev-page-button ()
- (let ((buffer-read-only nil)
- (situation (get-text-property (point-min) 'mime-view-situation)))
- (set-keymap-parent gnus-prev-page-map (current-local-map))
- (gnus-eval-format
- gnus-prev-page-line-format nil
- `(gnus-prev t local-map ,gnus-prev-page-map
- gnus-callback gnus-article-button-prev-page
- article-type annotation
- mime-view-situation ,situation))))
- )
+(defun gnus-insert-prev-page-button ()
+ (let ((b (point))
+ (buffer-read-only nil)
+ (situation (get-text-property (point-min) 'mime-view-situation)))
+ (gnus-eval-format
+ gnus-prev-page-line-format nil
+ `(,@(gnus-local-map-property gnus-prev-page-map)
+ gnus-prev t
+ gnus-callback gnus-article-button-prev-page
+ article-type annotation
+ mime-view-situation ,situation))
+ (widget-convert-button
+ 'link b (point)
+ :action 'gnus-button-prev-page
+ :button-keymap gnus-prev-page-map)))
-(defvar gnus-next-page-map nil)
-(unless gnus-next-page-map
- (setq gnus-next-page-map (make-sparse-keymap))
- (define-key gnus-next-page-map gnus-mouse-2 'gnus-button-next-page)
- (define-key gnus-next-page-map "\r" 'gnus-button-next-page))
+(defvar gnus-next-page-map
+ (let ((map (make-sparse-keymap)))
+ (unless (>= emacs-major-version 21)
+ ;; XEmacs doesn't care.
+ (set-keymap-parent map gnus-article-mode-map))
+ (define-key map gnus-mouse-2 'gnus-button-next-page)
+ (define-key map "\r" 'gnus-button-next-page)
+ map))
-(defun gnus-button-next-page ()
+(defun gnus-button-next-page (&optional args more-args)
"Go to the next page."
(interactive)
(let ((win (selected-window)))
(gnus-article-next-page)
(select-window win)))
-(defun gnus-button-prev-page ()
+(defun gnus-button-prev-page (&optional args more-args)
"Go to the prev page."
(interactive)
(let ((win (selected-window)))
(gnus-article-prev-page)
(select-window win)))
-(static-if (featurep 'xemacs)
- (defun gnus-insert-next-page-button ()
- (let ((buffer-read-only nil))
- (gnus-eval-format gnus-next-page-line-format nil
- `(gnus-next
- t local-map ,gnus-next-page-map
- gnus-callback gnus-article-button-next-page
- article-type annotation))))
- (defun gnus-insert-next-page-button ()
- (let ((buffer-read-only nil)
- (situation (get-text-property (point-min) 'mime-view-situation)))
- (set-keymap-parent gnus-next-page-map (current-local-map))
- (gnus-eval-format gnus-next-page-line-format nil
- `(gnus-next
- t local-map ,gnus-next-page-map
+(defun gnus-insert-next-page-button ()
+ (let ((b (point))
+ (buffer-read-only nil)
+ (situation (get-text-property (point-min) 'mime-view-situation)))
+ (gnus-eval-format gnus-next-page-line-format nil
+ `(,@(gnus-local-map-property gnus-next-page-map)
+ gnus-next t
gnus-callback gnus-article-button-next-page
article-type annotation
- mime-view-situation ,situation))))
- )
+ mime-view-situation ,situation))
+ (widget-convert-button
+ 'link b (point)
+ :action 'gnus-button-next-page
+ :button-keymap gnus-next-page-map)))
(defun gnus-article-button-next-page (arg)
"Go to the next page."
(gnus-eval-format
gnus-mime-security-button-line-format
gnus-mime-security-button-line-format-alist
- `(keymap ,gnus-mime-security-button-map
- ,@(if (>= (string-to-number emacs-version) 21)
- nil ;; XEmacs doesn't care
- (list 'local-map gnus-mime-security-button-map))
- gnus-callback gnus-mime-security-press-button
- gnus-line-format ,gnus-mime-security-button-line-format
- article-type annotation
- gnus-data ,handle))
+ `(,@(gnus-local-map-property gnus-mime-security-button-map)
+ gnus-callback gnus-mime-security-press-button
+ gnus-line-format ,gnus-mime-security-button-line-format
+ article-type annotation
+ gnus-data ,handle))
(setq e (point))
(widget-convert-button
'link b e
;; Author: Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
;; Keywords: mail, news, extensions
-;; This file is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; This file is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published
+;; by the Free Software Foundation; either version 2, or (at your
+;; option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to
;;; gnus-diary.el --- Wrapper around the NNDiary Gnus backend
-;; Copyright (C) 1999-2001 Didier Verna.
+;; Copyright (c) 2001, 2002 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2001 Didier Verna.
;; Author: Didier Verna <didier@xemacs.org>
;; Maintainer: Didier Verna <didier@xemacs.org>
;; Created: Tue Jul 20 10:42:55 1999
-;; Last Revision: Wed Sep 12 12:31:09 2001
;; Keywords: calendar mail news
-;; This file is part of Gnus.
+;; This file is part of GNU Emacs.
-;; Gnus is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2 of the License, or
-;; (at your option) any later version.
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published
+;; by the Free Software Foundation; either version 2 of the License,
+;; or (at your option) any later version.
-;; Gnus is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
+;; GNU Emacs is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program; if not, write to the Free Software
;;; gnus-ems.el --- functions for making Semi-gnus work under different Emacsen
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
;; Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
(autoload 'appt-select-lowest-window "appt"))
(if (featurep 'xemacs)
- (autoload 'gnus-smiley-display "smiley")
- (autoload 'gnus-smiley-display "smiley-ems")) ; override XEmacs version
+ (autoload 'smiley-region "smiley")
+ (autoload 'smiley-region "smiley-ems")) ; override XEmacs version
(defun gnus-kill-all-overlays ()
"Delete all overlays in the current buffer."
(goto-char (point-min))
(sit-for 0))))))
-(defvar gnus-article-xface-ring-internal nil
- "Cache for face data.")
-
-;; Worth customizing?
-(defvar gnus-article-xface-ring-size 6
- "Length of the ring used for `gnus-article-xface-ring-internal'.")
-
-(defvar gnus-article-compface-xbm
- (condition-case ()
- (eq 0 (string-match "#define"
- (shell-command-to-string "uncompface -X")))
- (error nil))
- "Non-nil means the compface program supports the -X option.
-That produces XBM output.")
-
-(defun gnus-article-display-xface (data)
- "Display the XFace header FACE in the current buffer.
-Requires support for images in your Emacs and the external programs
-`uncompface', and `icontopbm'. On a GNU/Linux system these
-might be in packages with names like `compface' or `faces-xface' and
-`netpbm' or `libgr-progs', for instance. See also
-`gnus-article-compface-xbm'.
-
-This function is for Emacs 21+. See `gnus-xmas-article-display-xface'
-for XEmacs."
- ;; It might be worth converting uncompface's output in Lisp.
-
- (when (if (fboundp 'display-graphic-p)
- (display-graphic-p))
- (unless gnus-article-xface-ring-internal ; Only load ring when needed.
- (setq gnus-article-xface-ring-internal
- (make-ring gnus-article-xface-ring-size)))
- (save-excursion
- (let* ((cur (current-buffer))
- (image (cdr-safe (assoc data (ring-elements
- gnus-article-xface-ring-internal))))
- default-enable-multibyte-characters)
- (unless image
- (with-temp-buffer
- (insert data)
- (and (eq 0 (apply #'call-process-region (point-min) (point-max)
- "uncompface"
- 'delete '(t nil) nil
- (if gnus-article-compface-xbm
- '("-X"))))
- (if gnus-article-compface-xbm
- t
- (goto-char (point-min))
- (progn (insert "/* Width=48, Height=48 */\n") t)
- (eq 0 (call-process-region (point-min) (point-max)
- "icontopbm"
- 'delete '(t nil))))
- ;; Miles Bader says that faces don't look right as
- ;; light on dark.
- (if (eq 'dark (cdr-safe (assq 'background-mode
- (frame-parameters))))
- (setq image (create-image (buffer-string)
- (if gnus-article-compface-xbm
- 'xbm
- 'pbm)
- t
- :ascent 'center
- :foreground "black"
- :background "white"))
- (setq image (create-image (buffer-string)
- (if gnus-article-compface-xbm
- 'xbm
- 'pbm)
- t
- :ascent 'center)))))
- (ring-insert gnus-article-xface-ring-internal (cons data image)))
- (when image
- (goto-char (point-min))
- (re-search-forward "^From:" nil 'move)
- (while (get-text-property (point) 'display)
- (goto-char (next-single-property-change (point) 'display)))
- (gnus-add-wash-type 'xface)
- (gnus-add-image 'xface image)
- (insert-image image))))))
-
;;; Image functions.
(defun gnus-image-type-available-p (type)
(apply 'create-image file type data-p props)))
(defun gnus-put-image (glyph &optional string)
- (insert-image glyph string))
+ (insert-image glyph (or string " "))
+ (unless string
+ (put-text-property (1- (point)) (point)
+ 'gnus-image-text-deletable t))
+ glyph)
(defun gnus-remove-image (image)
- (dolist (position (gnus-text-with-property 'display))
+ (dolist (position (message-text-with-property 'display))
(when (equal (get-text-property position 'display) image)
- (put-text-property position (1+ position) 'display nil))))
+ (put-text-property position (1+ position) 'display nil)
+ (when (get-text-property position 'gnus-image-text-deletable)
+ (delete-region position (1+ position))))))
(defun-maybe assoc-ignore-case (key alist)
"Like `assoc', but assumes KEY is a string and ignores case when comparing."
(save-restriction
(article-narrow-to-head)
(gnus-article-goto-header "from")
+ (when (bobp)
+ (insert "From: \n")
+ (forward-char -2))
(gnus-add-image
'xface
(gnus-put-image
will be inserted into the buffer just like information from any other
group specifier.
-Text between %( and %) will be highlighted with `gnus-mouse-face' when
-the mouse point move inside the area. There can only be one such area.
-
Note that this format specification is not always respected. For
reasons of efficiency, when listing killed groups, this specification
is ignored altogether. If the spec is changed considerably, your
a bit of extra memory will be used. %D will also worsen performance.
Also note that if you change the format specification to include any
of these specs, you must probably re-start Gnus to see them go into
-effect."
+effect.
+
+General format specifiers can also be used.
+See (gnus)Formatting Variables."
+ :link '(custom-manual "(gnus)Formatting Variables")
:group 'gnus-group-visual
:type 'string)
;; if selection was successful.
(defun gnus-group-read-ephemeral-group (group method &optional activate
quit-config request-only
- select-articles)
+ select-articles
+ parameters)
"Read GROUP from METHOD as an ephemeral group.
If ACTIVATE, request the group first.
If QUIT-CONFIG, use that window configuration when exiting from the
ephemeral group.
If REQUEST-ONLY, don't actually read the group; just request it.
If SELECT-ARTICLES, only select those articles.
+If PARAMETERS, use those as the group parameters.
Return the name of the group if selection was successful."
;; Transform the select method into a unique server.
group
`(-1 nil (,group
,gnus-level-default-subscribed nil nil ,method
- ((quit-config .
- ,(if quit-config quit-config
- (cons gnus-summary-buffer
- gnus-current-window-configuration))))))
+ ,(cons
+ (if quit-config
+ (cons 'quit-config quit-config)
+ (cons 'quit-config
+ (cons gnus-summary-buffer
+ gnus-current-window-configuration)))
+ parameters)))
gnus-newsrc-hashtb)
(push method gnus-ephemeral-servers)
(set-buffer gnus-group-buffer)
;; Kill Gnus buffers except for group mode buffer.
(let ((group-buf (get-buffer gnus-group-buffer)))
(mapcar (lambda (buf)
- (unless (member buf (list group-buf gnus-dribble-buffer))
+ (unless (or (member buf (list group-buf gnus-dribble-buffer))
+ (progn
+ (save-excursion
+ (set-buffer buf)
+ (eq major-mode 'message-mode))))
(gnus-kill-buffer buf)))
(gnus-buffers))
(gnus-kill-gnus-frames)
(defun gnus-group-mark-article-read (group article)
"Mark ARTICLE read."
- (gnus-activate-group group)
(let ((buffer (gnus-summary-buffer-name group))
- (mark gnus-read-mark))
- (unless
- (and
- (get-buffer buffer)
- (with-current-buffer buffer
- (when gnus-newsgroup-prepared
- (when (and gnus-newsgroup-auto-expire
- (memq mark gnus-auto-expirable-marks))
- (setq mark gnus-expirable-mark))
- (setq mark (gnus-request-update-mark
- group article mark))
- (gnus-mark-article-as-read article mark)
- (setq gnus-newsgroup-active (gnus-active group))
- t)))
+ (mark gnus-read-mark)
+ active n)
+ (if (get-buffer buffer)
+ (with-current-buffer buffer
+ (setq active gnus-newsgroup-active)
+ (gnus-activate-group group)
+ (when gnus-newsgroup-prepared
+ (when (and gnus-newsgroup-auto-expire
+ (memq mark gnus-auto-expirable-marks))
+ (setq mark gnus-expirable-mark))
+ (setq mark (gnus-request-update-mark
+ group article mark))
+ (gnus-mark-article-as-read article mark)
+ (setq gnus-newsgroup-active (gnus-active group))
+ (when active
+ (setq n (1+ (cdr active)))
+ (while (<= n (cdr gnus-newsgroup-active))
+ (unless (eq n article)
+ (push n gnus-newsgroup-unselected))
+ (setq n (1+ n))))))
+ (gnus-activate-group group)
(gnus-group-make-articles-read group
(list article))
(when (gnus-group-auto-expirable-p group)
;;; gnus-msg.el --- mail and post interface for Semi-gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
;; Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
(variable)
(sexp)))))))
-(defcustom gnus-inews-mark-gcc-as-read nil
+(defcustom gnus-gcc-mark-as-read nil
"If non-nil, automatically mark Gcc articles as read."
:group 'gnus-message
:type 'boolean)
+(defvar gnus-inews-mark-gcc-as-read nil
+ "Obsolete variable. Use `gnus-gcc-mark-as-read' instead.")
+
+(make-obsolete-variable 'gnus-inews-mark-gcc-as-read
+ 'gnus-gcc-mark-as-read)
+
+(defcustom gnus-gcc-externalize-attachments nil
+ "Should local-file attachments be included as external parts in Gcc copies?
+If it is `all', attach files as external parts;
+if a regexp and matches the Gcc group name, attach files as external parts;
+If nil, attach files as normal parts."
+ :group 'gnus-message
+ :type '(choice (const nil :tag "None")
+ (const all :tag "Any")
+ (string :tag "Regexp")))
+
(defcustom gnus-group-posting-charset-alist
'(("^\\(no\\|fr\\)\\.[^,]*\\(,[ \t\n]*\\(no\\|fr\\)\\.[^,]*\\)*$" iso-8859-1 (iso-8859-1))
("^\\(fido7\\|relcom\\)\\.[^,]*\\(,[ \t\n]*\\(fido7\\|relcom\\)\\.[^,]*\\)*$" koi8-r (koi8-r))
(defun gnus-summary-followup (yank &optional force-news)
"Compose a followup to an article.
-If prefix argument YANK is non-nil, original article is yanked automatically."
+If prefix argument YANK is non-nil, the original article is yanked
+automatically.
+YANK is a list of elements, where the car of each element is the
+article number, and the two following numbers is the region to be
+yanked."
(interactive
(list (and current-prefix-arg
(gnus-summary-work-articles 1))))
(when yank
- (gnus-summary-goto-subject (car yank)))
+ (gnus-summary-goto-subject
+ (if (listp (car yank))
+ (caar yank)
+ (car yank))))
(save-window-excursion
(gnus-summary-select-article))
(let ((headers (gnus-summary-article-header (gnus-summary-article-number)))
(gnus-summary-followup (gnus-summary-work-articles arg) t))
(defun gnus-inews-yank-articles (articles)
- (let ((more-than-one (cdr articles))
- (cur (current-buffer))
- refs beg article window)
+ (let (beg article yank-string
+ (more-than-one (cdr articles))
+ (cur (current-buffer))
+ refs window)
(message-goto-body)
(while (setq article (pop articles))
+ (when (listp article)
+ (setq yank-string (nth 1 article)
+ article (nth 0 article)))
(save-window-excursion
(set-buffer gnus-summary-buffer)
(gnus-summary-select-article nil nil nil article)
(when (setq window (get-buffer-window cur t))
(select-frame (window-frame window)))))
- (gnus-copy-article-buffer)
+ (gnus-copy-article-buffer nil yank-string)
(let ((message-reply-buffer gnus-article-copy)
(message-reply-headers
+ ;; The headers are decoded.
(with-current-buffer gnus-article-copy
- ;; The headers are decoded.
(nnheader-parse-head t))))
(message-yank-original)
(setq beg (or beg (mark t))))
\f
-(defun gnus-copy-article-buffer (&optional article-buffer)
+(defun gnus-copy-article-buffer (&optional article-buffer yank-string)
;; make a copy of the article buffer with all text properties removed
;; this copy is in the buffer gnus-article-copy.
;; if ARTICLE-BUFFER is nil, gnus-article-buffer is used
(let ((inhibit-read-only t))
(copy-to-buffer gnus-article-copy (point-min) (point-max))
(set-buffer gnus-article-copy)
+ (when yank-string
+ (message-goto-body)
+ (delete-region (point) (point-max))
+ (insert yank-string))
;; Encode bitmap smileys to ordinary text.
;; Possibly, the original text might be restored.
(static-unless (featurep 'xemacs)
(goto-char (point-min))
(while (looking-at message-unix-mail-delimiter)
(forward-line 1))
- (setq beg (point))
- (setq end (or (message-goto-body) beg))
+ (setq beg (point)
+ end (or (message-goto-body) beg))
;; Delete the headers from the displayed articles.
(set-buffer gnus-article-copy)
(delete-region (goto-char (point-min))
(gnus-summary-work-articles 1))))
;; Stripping headers should be specified with mail-yank-ignored-headers.
(when yank
- (gnus-summary-goto-subject (car yank)))
+ (gnus-summary-goto-subject
+ (if (listp (car yank))
+ (caar yank)
+ (car yank))))
(let ((gnus-article-reply (or yank (gnus-summary-article-number)))
(headers ""))
(gnus-setup-message (if yank 'reply-yank 'reply)
(let ((gcc (or gcc (mail-fetch-field "gcc" nil t)))
(coding-system-for-write 'raw-text)
(output-coding-system 'raw-text)
- groups group method group-art)
+ groups group method group-art
+ mml-externalize-attachments)
(when gcc
(message-remove-header "gcc")
(widen)
(car method))))
(unless (gnus-request-group group nil method)
(gnus-request-create-group group method))
+ (setq mml-externalize-attachments
+ (if (stringp gnus-gcc-externalize-attachments)
+ (string-match gnus-gcc-externalize-attachments group)
+ gnus-gcc-externalize-attachments))
(save-excursion
(nnheader-set-temp-buffer " *acc*")
(insert-buffer-substring message-encoding-buffer)
(gnus-message 1 "Couldn't store article in group %s: %s"
group (gnus-status-message method))
(sit-for 2))
- (when (and group-art gnus-inews-mark-gcc-as-read)
+ (when (and group-art
+ (or gnus-gcc-mark-as-read
+ gnus-inews-mark-gcc-as-read))
(gnus-group-mark-article-read group (cdr group-art)))
(kill-buffer (current-buffer)))))))))
;;; gnus-picon.el --- displaying pretty icons in Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
;; Free Software Foundation, Inc.
;; Author: Wes Hardaker <hardaker@ece.ucdavis.edu>
(defvar gnus-picon-glyph-alist nil
"Picon glyphs cache.
List of pairs (KEY . GLYPH) where KEY is either a filename or an URL.")
+(defvar gnus-picon-cache nil)
;;; Functions:
(split-string (car address) "\\."))))
(defun gnus-picon-find-face (address directories &optional exact)
- (let* ((databases gnus-picon-databases)
- (address (gnus-picon-split-address address))
+ (let* ((address (gnus-picon-split-address address))
(user (pop address))
- database directory found instance base)
- (while (and (not found)
- (setq database (pop databases)))
- (while (and (not found)
- (setq directory (pop directories)))
- (setq base (expand-file-name directory database))
- ;; Kludge to search misc/MISC for users.
- (when (string= directory "misc")
- (setq address '("MISC")))
- (while (and (not found)
- address)
- (setq found (gnus-picon-find-image
- (concat base "/" (mapconcat 'identity
- (reverse address)
- "/")
- "/" user "/")))
- (if exact
- (setq address nil)
- (pop address)))))
- found))
+ (faddress address)
+ database directory result instance base)
+ (catch 'found
+ (dolist (database gnus-picon-databases)
+ (dolist (directory directories)
+ (setq address faddress
+ base (expand-file-name directory database))
+ (while address
+ (when (setq result (gnus-picon-find-image
+ (concat base "/" (mapconcat 'identity
+ (reverse address)
+ "/")
+ "/" user "/")))
+ (throw 'found result))
+ (if exact
+ (setq address nil)
+ (pop address)))
+ ;; Kludge to search MISC as well. But not in "news".
+ (unless (string= directory "news")
+ (when (setq result (gnus-picon-find-image
+ (concat base "/MISC/" user "/")))
+ (throw 'found result))))))))
(defun gnus-picon-find-image (directory)
(let ((types gnus-picon-file-types)
(gnus-with-article-headers
(let ((addresses
(mail-header-parse-addresses (mail-fetch-field header)))
- first spec file)
+ spec file point cache)
(dolist (address addresses)
- (setq address (car address)
- first t)
+ (setq address (car address))
(when (and (stringp address)
(setq spec (gnus-picon-split-address address)))
- (when (setq file (gnus-picon-find-face
- address gnus-picon-user-directories))
- (setcar spec (cons (gnus-picon-create-glyph file)
- (car spec))))
- (dotimes (i (1- (length spec)))
- (when (setq file (gnus-picon-find-face
- (concat "unknown@"
- (mapconcat
- 'identity (nthcdr (1+ i) spec) "."))
- gnus-picon-domain-directories t))
- (setcar (nthcdr (1+ i) spec)
- (cons (gnus-picon-create-glyph file)
- (nth (1+ i) spec)))))
+ (if (setq cache (cdr (assoc address gnus-picon-cache)))
+ (setq spec cache)
+ (when (setq file (or (gnus-picon-find-face
+ address gnus-picon-user-directories)
+ (gnus-picon-find-face
+ (concat "unknown@"
+ (mapconcat
+ 'identity (cdr spec) "."))
+ gnus-picon-user-directories)))
+ (setcar spec (cons (gnus-picon-create-glyph file)
+ (car spec))))
+
+ (dotimes (i (1- (length spec)))
+ (when (setq file (gnus-picon-find-face
+ (concat "unknown@"
+ (mapconcat
+ 'identity (nthcdr (1+ i) spec) "."))
+ gnus-picon-domain-directories t))
+ (setcar (nthcdr (1+ i) spec)
+ (cons (gnus-picon-create-glyph file)
+ (nth (1+ i) spec)))))
+ (setq spec (nreverse spec))
+ (push (cons address spec) gnus-picon-cache))
(gnus-article-goto-header header)
(mail-header-narrow-to-field)
(when (search-forward address nil t)
(delete-region (match-beginning 0) (match-end 0))
+ (setq point (point))
(while spec
- (gnus-picon-insert-glyph (pop spec) category)
- (when spec
- (if (not first)
- (insert ".")
- (insert "@")
- (setq first nil))))))))))
+ (goto-char point)
+ (if (> (length spec) 2)
+ (insert ".")
+ (if (= (length spec) 2)
+ (insert "@")))
+ (gnus-picon-insert-glyph (pop spec) category))))))))
(defun gnus-picon-transform-newsgroups (header)
(interactive)
(gnus-with-article-headers
- (let ((groups
- (sort
- (message-tokenize-header (mail-fetch-field header))
- (lambda (g1 g2) (> (length g1) (length g2)))))
- spec file)
+ (gnus-article-goto-header header)
+ (mail-header-narrow-to-field)
+ (let ((groups (message-tokenize-header (mail-fetch-field header)))
+ spec file point)
(dolist (group groups)
- (setq spec (nreverse (split-string group "[.]")))
- (dotimes (i (length spec))
- (when (setq file (gnus-picon-find-face
- (concat "unknown@"
- (mapconcat
- 'identity (nthcdr i spec) "."))
- gnus-picon-news-directories t))
- (setcar (nthcdr i spec)
- (cons (gnus-picon-create-glyph file)
- (nth i spec)))))
-
- (gnus-article-goto-header header)
- (mail-header-narrow-to-field)
+ (unless (setq spec (cdr (assoc group gnus-picon-cache)))
+ (setq spec (nreverse (split-string group "[.]")))
+ (dotimes (i (length spec))
+ (when (setq file (gnus-picon-find-face
+ (concat "unknown@"
+ (mapconcat
+ 'identity (nthcdr i spec) "."))
+ gnus-picon-news-directories t))
+ (setcar (nthcdr i spec)
+ (cons (gnus-picon-create-glyph file)
+ (nth i spec)))))
+ (push (cons group spec) gnus-picon-cache))
(when (search-forward group nil t)
(delete-region (match-beginning 0) (match-end 0))
- (setq spec (nreverse spec))
- (while spec
- (gnus-picon-insert-glyph (pop spec) 'newsgroups-picon)
- (when spec
- (insert "."))))))))
+ (save-restriction
+ (narrow-to-region (point) (point))
+ (while spec
+ (goto-char (point-min))
+ (if (> (length spec) 1)
+ (insert "."))
+ (gnus-picon-insert-glyph (pop spec) 'newsgroups-picon))
+ (goto-char (point-max))))))))
;;; Commands:
(setq gnus-newsgroup-adaptive t)
adapt)
(t
- ;;(setq gnus-newsgroup-adaptive gnus-use-adaptive-scoring)
gnus-default-adaptive-score-alist)))
(setq gnus-thread-expunge-below
(or thread-mark-and-expunge gnus-thread-expunge-below))
(require 'alist)
(require 'gnus)
-(defcustom gnus-use-correct-string-widths t
+(defcustom gnus-use-correct-string-widths (featurep 'xemacs)
"*If non-nil, use correct functions for dealing with wide characters."
:group 'gnus-format
:type 'boolean)
"Return a form that limits EL to MAX-WIDTH."
(let ((max (abs max-width))
(length-fun (if gnus-use-correct-string-widths
- 'gnus-correct-length
- 'length))
+ 'gnus-correct-length
+ 'length))
(substring-fun (if gnus-use-correct-string-widths
- 'gnus-correct-substring
- 'substring)))
+ 'gnus-correct-substring
+ 'substring)))
(if (symbolp el)
`(if (> (,length-fun ,el) ,max)
,(if (< max-width 0)
(if (equal val ,ignore-value)
"" val))))
-(defun gnus-correct-pad-form (el pad-width)
+(defun gnus-pad-form (el pad-width)
"Return a form that pads EL to PAD-WIDTH accounting for multi-column
characters correctly. This is because `format' may pad to columns or to
characters when given a pad value."
(let ((pad (abs pad-width))
(side (< 0 pad-width)))
(if (symbolp el)
- `(let ((need (- ,pad (gnus-correct-length ,el))))
+ `(let ((need (- ,pad (,(if gnus-use-correct-string-widths
+ 'gnus-correct-length
+ 'length)
+ ,el))))
(if (> need 0)
(concat ,(when side '(make-string need ?\ ))
,el
,(when (not side) '(make-string need ?\ )))
,el))
`(let* ((val (eval ,el))
- (need (- ,pad (gnus-correct-length ,el))))
+ (need (- ,pad (,(if gnus-use-correct-string-widths
+ 'gnus-correct-length
+ 'length) ,el))))
(if (> need 0)
(concat ,(when side '(make-string need ?\ ))
,el
;; them will have the balloon-help text property.
(let ((case-fold-search nil))
(if (string-match
- "\\`\\(.*\\)%[0-9]?[{(«]\\(.*\\)%[0-9]?[»})]\\(.*\n?\\)\\'"
- format)
- (gnus-parse-complex-format format spec-alist)
+ "\\`\\(.*\\)%[0-9]?[{(«]\\(.*\\)%[0-9]?[»})]\\(.*\n?\\)\\'\\|%[-0-9]*="
+ format)
+ (gnus-parse-complex-format format spec-alist)
;; This is a simple format.
(gnus-parse-simple-format format spec-alist insert))))
(when max-width
(setq el (gnus-tilde-max-form el max-width)))
(when pad-width
- (setq el (gnus-correct-pad-form el pad-width)))
+ (setq el (gnus-pad-form el pad-width)))
(push el flist)))
(insert elem-type)
(push (car elem) flist))))
;;; gnus-srvr.el --- virtual server support for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
;; Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
%n name
%w address
%s status
-%a agent covered"
+%a agent covered
+
+General format specifiers can also be used.
+See (gnus)Formatting Variables."
+ :link '(custom-manual "(gnus)Formatting Variables")
:group 'gnus-server-visual
:type 'string)
:group 'gnus-newsrc
:type 'boolean)
-(defvar gnus-startup-file-coding-system (static-if (boundp 'MULE)
- '*ctext*
- 'ctext)
- "*Coding system for startup file.")
+;;; Internal variables
-(defvar gnus-ding-file-coding-system gnus-startup-file-coding-system
- "*Coding system for ding file.")
+(defvar gnus-ding-file-coding-system (static-if (boundp 'MULE)
+ '*ctext*
+ 'ctext)
+ "Coding system for ding file.")
;; Note that the ding file for T-gnus ought not to have byte-codes.
-;;; Internal variables
-
(defvar gnus-newsrc-file-version nil)
(defvar gnus-override-subscribe-method nil)
(defvar gnus-dribble-buffer nil)
(if gnus-init-inhibit
(setq gnus-init-inhibit nil)
(setq gnus-init-inhibit inhibit-next)
- (let ((files (list gnus-site-init-file gnus-init-file))
- file)
- (while files
- (and (setq file (pop files))
- (or (and (file-exists-p file)
- ;; Don't try to load a directory.
- (not (file-directory-p file)))
- (file-exists-p (concat file ".el"))
- (file-exists-p (concat file ".elc")))
- (if (or debug-on-error debug-on-quit)
- (load file nil t)
- (condition-case var
- (load file nil t)
- (error
- (error "Error in %s: %s" file var))))))))))
+ (dolist (file (list gnus-site-init-file gnus-init-file))
+ (when (and file
+ (locate-library file))
+ (if (or debug-on-error debug-on-quit)
+ (load file nil t)
+ (condition-case var
+ (load file nil t)
+ (error
+ (error "Error in %s: %s" file var)))))))))
;; For subscribing new newsgroup
;;; gnus-sum.el --- summary mode commands for Semi-gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
;; Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
(defcustom gnus-thread-hide-subtree nil
"*If non-nil, hide all threads initially.
+This can be a predicate specifier which says which threads to hide.
If threads are hidden, you have to run the command
`gnus-summary-show-thread' by hand or use `gnus-select-article-hook'
to expose hidden threads."
It works along the same lines as a normal formatting string,
with some simple extensions.
-%S The subject"
+%S The subject
+
+General format specifiers can also be used.
+See (gnus)Formatting Variables."
+ :link '(custom-manual "(gnus)Formatting Variables")
:group 'gnus-threading
:type 'string)
Ready-made functions include `gnus-thread-sort-by-number',
`gnus-thread-sort-by-author', `gnus-thread-sort-by-subject',
-`gnus-thread-sort-by-date', `gnus-thread-sort-by-score' and
+`gnus-thread-sort-by-date', `gnus-thread-sort-by-score',
+`gnus-thread-sort-by-most-recent-number',
+`gnus-thread-sort-by-most-recent-date', and
`gnus-thread-sort-by-total-score' (see `gnus-thread-score-function').
When threading is turned off, the variable
`gnus-summary-next-same-subject' command does, you can use the
following hook:
- (setq gnus-select-group-hook
- (list
- (lambda ()
- (mapcar (lambda (header)
- (mail-header-set-subject
- header
- (gnus-simplify-subject
- (mail-header-subject header) 're-only)))
- gnus-newsgroup-headers))))"
+ (add-hook gnus-select-group-hook
+ (lambda ()
+ (mapcar (lambda (header)
+ (mail-header-set-subject
+ header
+ (gnus-simplify-subject
+ (mail-header-subject header) 're-only)))
+ gnus-newsgroup-headers)))"
:group 'gnus-group-select
:type 'hook)
(mime-find-field-decoder 'From 'nov)
"Variable that says which function should be used to decode a string with encoded words.")
-(defcustom gnus-extra-headers nil
+(defcustom gnus-extra-headers '(To Newsgroups)
"*Extra headers to parse."
:version "21.1"
:group 'gnus-summary
"l" gnus-summary-stop-page-breaking
"r" gnus-summary-caesar-message
"t" gnus-article-toggle-headers
- "g" gnus-summary-toggle-smiley
- "u" gnus-article-treat-unfold-headers
- "n" gnus-article-treat-fold-newsgroups
+ "g" gnus-treat-smiley
"v" gnus-summary-verbose-headers
"m" gnus-summary-toggle-mime
"a" gnus-article-strip-headers-in-body ;; mnemonic: wash archive
"c" gnus-article-highlight-citation
"s" gnus-article-highlight-signature)
+ (gnus-define-keys (gnus-summary-wash-header-map "G" gnus-summary-wash-map)
+ "f" gnus-article-treat-fold-headers
+ "u" gnus-article-treat-unfold-headers
+ "n" gnus-article-treat-fold-newsgroups)
+
(gnus-define-keys (gnus-summary-wash-display-map "D" gnus-summary-wash-map)
"x" gnus-article-display-x-face
- "s" gnus-summary-toggle-smiley
+ "s" gnus-treat-smiley
+ "D" gnus-article-remove-images
"f" gnus-treat-from-picon
"m" gnus-treat-mail-picon
"n" gnus-treat-newsgroups-picon)
["Lapsed" gnus-article-date-lapsed t]
["User-defined" gnus-article-date-user t])
("Display"
- ["Toggle smiley" gnus-summary-toggle-smiley t]
+ ["Remove images" gnus-article-remove-images t]
+ ["Toggle smiley" gnus-treat-smiley t]
["Show X-Face" gnus-article-display-x-face t]
["Show picons in From" gnus-treat-from-picon t]
["Show picons in mail headers" gnus-treat-mail-picon t]
["Fetch article with id..." gnus-summary-refer-article t]
["Setup Mailing List Params" gnus-mailing-list-insinuate t]
["Redisplay" gnus-summary-show-article t]
- ["Raw article" gnus-summary-show-raw-article t])))
+ ["Raw article" gnus-summary-show-raw-article :keys "C-u g"])))
(easy-menu-define
gnus-summary-article-menu gnus-summary-mode-map ""
(cons "Article" innards))
["Wide reply and yank" gnus-summary-wide-reply-with-original
,@(if (featurep 'xemacs) '(t)
'(:help "Mail a reply, quoting this article"))]
+ ["Very wide reply" gnus-summary-very-wide-reply t]
+ ["Very wide reply and yank" gnus-summary-very-wide-reply-with-original
+ ,@(if (featurep 'xemacs) '(t)
+ '(:help "Mail a very wide reply, quoting this article"))]
["Mail forward" gnus-summary-mail-forward t]
["Post forward" gnus-summary-post-forward t]
["Digest and mail" gnus-summary-digest-mail-forward t]
;; Hide conversation thread subtrees. We cannot do this in
;; gnus-summary-prepare-hook since kill processing may not
;; work with hidden articles.
- (and gnus-show-threads
- gnus-thread-hide-subtree
- (gnus-summary-hide-all-threads))
+ (gnus-summary-maybe-hide-threads)
(when kill-buffer
(gnus-kill-or-deaden-summary kill-buffer))
(gnus-summary-auto-select-subject)
(defun gnus-thread-total-score (thread)
;; This function find the total score of THREAD.
- (cond ((null thread)
- 0)
- ((consp thread)
- (if (stringp (car thread))
- (apply gnus-thread-score-function 0
- (mapcar 'gnus-thread-total-score-1 (cdr thread)))
- (gnus-thread-total-score-1 thread)))
- (t
- (gnus-thread-total-score-1 (list thread)))))
+ (cond
+ ((null thread)
+ 0)
+ ((consp thread)
+ (if (stringp (car thread))
+ (apply gnus-thread-score-function 0
+ (mapcar 'gnus-thread-total-score-1 (cdr thread)))
+ (gnus-thread-total-score-1 thread)))
+ (t
+ (gnus-thread-total-score-1 (list thread)))))
+
+(defun gnus-thread-sort-by-most-recent-number (h1 h2)
+ "Sort threads such that the thread with the most recently arrived article comes first."
+ (> (gnus-thread-highest-number h1) (gnus-thread-highest-number h2)))
+
+(defun gnus-thread-highest-number (thread)
+ "Return the highest article number in THREAD."
+ (apply 'max (mapcar (lambda (header)
+ (mail-header-number header))
+ (message-flatten-list thread))))
+
+(defun gnus-thread-sort-by-most-recent-date (h1 h2)
+ "Sort threads such that the thread with the most recently dated article comes first."
+ (> (gnus-thread-latest-date h1) (gnus-thread-latest-date h2)))
+
+(defun gnus-thread-latest-date (thread)
+ "Return the highest article date in THREAD."
+ (let ((previous-time 0))
+ (apply 'max (mapcar
+ (lambda (header)
+ (setq previous-time
+ (time-to-seconds
+ (mail-header-parse-date
+ (condition-case ()
+ (mail-header-date header)
+ (error previous-time))))))
+ (sort
+ (message-flatten-list thread)
+ (lambda (h1 h2)
+ (< (mail-header-number h1)
+ (mail-header-number h2))))))))
(defun gnus-thread-total-score-1 (root)
;; This function find the total score of the thread below ROOT.
(suppress-keymap gnus-dead-summary-mode-map)
(substitute-key-definition
'undefined 'gnus-summary-wake-up-the-dead gnus-dead-summary-mode-map)
- (let ((keys '("\C-d" "\r" "\177" [delete])))
- (while keys
- (define-key gnus-dead-summary-mode-map
- (pop keys) 'gnus-summary-wake-up-the-dead))))
+ (dolist (key '("\C-d" "\r" "\177" [delete]))
+ (define-key gnus-dead-summary-mode-map
+ key 'gnus-summary-wake-up-the-dead))
+ (dolist (key '("q" "Q"))
+ (define-key gnus-dead-summary-mode-map key 'bury-buffer)))
(defvar gnus-dead-summary-mode nil
"Minor mode for Gnus summary buffers.")
(and (not (and undownloaded
(eq gnus-undownloaded-mark
(gnus-data-mark (car data)))))
- (not (and unseen
- (memq (car data) gnus-newsgroup-unseen)))
- (not (gnus-data-unread-p (car data)))))
+ (if unseen
+ (or (not (memq
+ (gnus-data-number (car data))
+ gnus-newsgroup-unseen))
+ (not (gnus-data-unread-p (car data))))
+ (not (gnus-data-unread-p (car data))))))
(setq data (cdr data)))
(when data
(goto-char (gnus-data-pos (car data)))
(when (gnus-buffer-live-p gnus-article-buffer)
(with-current-buffer gnus-article-buffer
(setq gnus-article-charset gnus-newsgroup-charset)
- (setq gnus-article-ignored-charsets gnus-newsgroup-ignored-charsets)))
+ (setq gnus-article-ignored-charsets gnus-newsgroup-ignored-charsets)
+ (set-buffer-multibyte t)))
(if (null article)
nil
(prog1
;; according to the new limit.
(gnus-summary-prepare)
;; Hide any threads, possibly.
- (and gnus-show-threads
- gnus-thread-hide-subtree
- (gnus-summary-hide-all-threads))
+ (gnus-summary-maybe-hide-threads)
;; Try to return to the article you were at, or one in the
;; neighborhood.
(when data
(gnus-group-read-ephemeral-group
name `(nndoc ,name (nndoc-address ,(get-buffer dig))
(nndoc-article-type
- ,(if force 'mbox 'guess))) t))
+ ,(if force 'mbox 'guess)))
+ t nil nil nil
+ `((adapt-file . ,(gnus-score-file-name gnus-newsgroup-name
+ "ADAPT")))))
;; Make all postings to this group go to the parent group.
(nconc (gnus-info-params (gnus-get-info name))
params)
(let ((gnus-newsgroup-charset
(or (cdr (assq arg gnus-summary-show-article-charset-alist))
(mm-read-coding-system
- "View as charset: "
+ "View as charset: " ;; actually it is coding system.
(save-excursion
(set-buffer gnus-article-buffer)
- (let ((coding-systems
- (detect-coding-region (point) (point-max))))
- (or (car-safe coding-systems)
- coding-systems))))))
+ (mm-detect-coding-region (point) (point-max))))))
(gnus-newsgroup-ignored-charsets 'gnus-all))
(gnus-summary-select-article nil 'force)
(let ((deps gnus-newsgroup-dependencies)
(execute-kbd-macro (concat (this-command-keys) key))
(gnus-article-edit-done))
-(defun gnus-summary-toggle-smiley (&optional arg)
- "Toggle the display of smilies as small graphical icons."
- (interactive "P")
- (save-excursion
- (set-buffer gnus-article-buffer)
- (gnus-smiley-display arg)))
-
;;; Respooling
(defun gnus-summary-respool-query (&optional silent trace)
(goto-char orig)
(gnus-summary-position-point))))
-(defun gnus-summary-hide-all-threads ()
- "Hide all thread subtrees."
+(defun gnus-summary-maybe-hide-threads ()
+ "If requested, hide the threads that should be hidden."
+ (when (and gnus-show-threads
+ gnus-thread-hide-subtree)
+ (gnus-summary-hide-all-threads
+ (if (or (consp gnus-thread-hide-subtree)
+ (gnus-functionp gnus-thread-hide-subtree))
+ (gnus-make-predicate gnus-thread-hide-subtree)
+ nil))))
+
+;;; Hiding predicates.
+
+(defun gnus-article-unread-p (header)
+ (memq (mail-header-number header) gnus-newsgroup-unreads))
+
+(defun gnus-article-unseen-p (header)
+ (memq (mail-header-number header) gnus-newsgroup-unseen))
+
+(defun gnus-map-articles (predicate articles)
+ "Map PREDICATE over ARTICLES and return non-nil if any predicate is non-nil."
+ (apply 'gnus-or (mapcar predicate
+ (mapcar 'gnus-summary-article-header articles))))
+
+(defun gnus-summary-hide-all-threads (&optional predicate)
+ "Hide all thread subtrees.
+If PREDICATE is supplied, threads that satisfy this predicate
+will not be hidden."
(interactive)
(save-excursion
(goto-char (point-min))
- (gnus-summary-hide-thread)
- (while (zerop (gnus-summary-next-thread 1 t))
- (gnus-summary-hide-thread)))
+ (let ((end nil))
+ (while (not end)
+ (when (or (not predicate)
+ (gnus-map-articles
+ predicate (gnus-summary-article-children)))
+ (gnus-summary-hide-thread))
+ (setq end (not (zerop (gnus-summary-next-thread 1 t)))))))
(gnus-summary-position-point))
(defun gnus-summary-hide-thread ()
"Hide thread subtrees.
+If PREDICATE is supplied, threads that satisfy this predicate
+will not be hidden.
Returns nil if no threads were there to be hidden."
(interactive)
(let ((buffer-read-only nil)
;; We do the sorting by regenerating the threads.
(gnus-summary-prepare)
;; Hide subthreads if needed.
- (when (and gnus-show-threads gnus-thread-hide-subtree)
- (gnus-summary-hide-all-threads))))
+ (gnus-summary-maybe-hide-threads)))
(defun gnus-summary-sort (predicate reverse)
"Sort summary buffer by PREDICATE. REVERSE means reverse order."
;; We do the sorting by regenerating the threads.
(gnus-summary-prepare)
;; Hide subthreads if needed.
- (when (and gnus-show-threads gnus-thread-hide-subtree)
- (gnus-summary-hide-all-threads))))
+ (gnus-summary-maybe-hide-threads)))
;; Summary saving commands.
(setq older (subseq older 0 all))))))))
(if (not older)
(message "No old news.")
- (gnus-summary-insert-articles older)
+ (let ((gnus-fetch-old-headers t))
+ (gnus-summary-insert-articles older))
(gnus-summary-limit (gnus-union older old))))
(gnus-summary-position-point)))
;;; gnus-topic.el --- a folding minor mode for Gnus group buffers
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
;; Free Software Foundation, Inc.
;; Author: Ilja Weis <kult@uni-paderborn.de>
%g Number of groups in the topic.
%a Number of unread articles in the groups in the topic.
%A Number of unread articles in the groups in the topic and its subtopics.
-"
+
+General format specifiers can also be used.
+See (gnus)Formatting Variables."
+ :link '(custom-manual "(gnus)Formatting Variables")
:type 'string
:group 'gnus-topic)
(cdr recursive)))
visible-groups))
+(defun gnus-topic-goto-previous-topic (n)
+ "Go to the N'th previous topic."
+ (interactive "p")
+ (gnus-topic-goto-next-topic (- n)))
+
+(defun gnus-topic-goto-next-topic (n)
+ "Go to the N'th next topic."
+ (interactive "p")
+ (let ((backward (< n 0))
+ (n (abs n))
+ (topic (gnus-current-topic)))
+ (while (and (> n 0)
+ (setq topic
+ (if backward
+ (gnus-topic-previous-topic topic)
+ (gnus-topic-next-topic topic))))
+ (gnus-topic-goto-topic topic)
+ (setq n (1- n)))
+ (when (/= 0 n)
+ (gnus-message 7 "No more topics"))
+ n))
+
(defun gnus-topic-previous-topic (topic)
"Return the previous topic on the same level as TOPIC."
(let ((top (cddr (gnus-topic-find-topology
"j" gnus-topic-jump-to-topic
"M" gnus-topic-move-matching
"C" gnus-topic-copy-matching
+ "\M-p" gnus-topic-goto-previous-topic
+ "\M-n" gnus-topic-goto-next-topic
"\C-i" gnus-topic-indent
[tab] gnus-topic-indent
"r" gnus-topic-rename
["Mark" gnus-topic-mark-topic t]
["Indent" gnus-topic-indent t]
["Sort" gnus-topic-sort-topics t]
+ ["Previous topic" gnus-topic-goto-previous-topic t]
+ ["Next topic" gnus-topic-goto-next-topic t]
["Toggle hide empty" gnus-topic-toggle-display-empty-topics t]
["Edit parameters" gnus-topic-edit-parameters t])
["List active" gnus-topic-list-active t]))))
;;; gnus-util.el --- utility functions for Semi-gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
;; Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
(delete-char 1))
(goto-char (next-single-property-change (point) prop nil (point-max))))))
-(defun gnus-text-with-property (prop)
- "Return a list of all points where the text has PROP."
- (let ((points nil)
- (point (point-min)))
- (save-excursion
- (while (< point (point-max))
- (when (get-text-property point prop)
- (push point points))
- (incf point)))
- (nreverse points)))
-
(require 'nnheader)
(defun gnus-newsgroup-directory-form (newsgroup)
"Make hierarchical directory name from NEWSGROUP name."
(setq tmp (concat tmp str))
tmp))
+(defun gnus-make-predicate (spec)
+ "Transform SPEC into a function that can be called.
+SPEC is a predicate specifier that contains stuff like `or', `and',
+`not', lists and functions. The functions all take one parameter."
+ `(lambda (elem) ,(gnus-make-predicate-1 spec)))
+
+(defun gnus-make-predicate-1 (spec)
+ (cond
+ ((symbolp spec)
+ `(,spec elem))
+ ((listp spec)
+ (if (memq (car spec) '(or and not))
+ `(,(car spec) ,@(mapcar 'gnus-make-predicate-1 (cdr spec)))
+ (error "Invalid predicate specifier: %s" spec)))))
+
+(defun gnus-local-map-property (map)
+ "Return a list suitable for a text property list specifying keymap MAP."
+ (cond
+ ((featurep 'xemacs)
+ (list 'keymap map))
+ ((>= emacs-major-version 21)
+ (list 'keymap map))
+ (t
+ (list 'local-map map))))
+
(provide 'gnus-util)
;;; gnus-util.el ends here
(require 'product)
(provide 'gnus-vers)
-(defconst gnus-revision-number "10"
+(defconst gnus-revision-number "00"
"Revision number for this version of gnus.")
;; Product information of this gnus.
(product-provide 'gnus-vers
(product-define "T-gnus" nil
- (list 6 15 4
+ (list 6 15 5
(string-to-number gnus-revision-number))))
-(defconst gnus-original-version-number "0.04"
+(defconst gnus-original-version-number "0.05"
"Version number for this version of Gnus.")
(provide 'running-pterodactyl-gnus-0_73-or-later)
;;; gnus-xmas.el --- Gnus functions for XEmacs
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
;; Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
'call-process-region (point-min) (point-max) command t '(t nil) nil
args))
-(defface gnus-x-face '((t (:foreground "black" :background "white")))
- "Face to show X face"
- :group 'gnus-xmas)
-
-(defun gnus-xmas-article-display-xface (data)
- "Display the XFace in DATA."
- (save-excursion
- (let ((xface-glyph
- (cond
- ((featurep 'xface)
- (make-glyph (vector 'xface :data
- (concat "X-Face: " data))))
- ((featurep 'xpm)
- (let ((cur (current-buffer)))
- (save-excursion
- (gnus-set-work-buffer)
- (insert data)
- (let ((coding-system-for-read 'binary)
- (coding-system-for-write 'binary))
- (gnus-xmas-call-region "uncompface")
- (goto-char (point-min))
- (insert "/* Width=48, Height=48 */\n")
- (gnus-xmas-call-region "icontopbm")
- (gnus-xmas-call-region "ppmtoxpm")
- (make-glyph
- (vector 'xpm :data (buffer-string)))))))
- (t
- (make-glyph [nothing])))))
- ;;(set-glyph-face xface-glyph 'gnus-x-face)
-
- (gnus-article-goto-header "from")
- (gnus-put-image xface-glyph " ")
- (gnus-add-wash-type 'xface)
- (gnus-add-image 'xface xface-glyph))))
-
(defvar gnus-xmas-modeline-left-extent
(let ((ext (copy-extent modeline-buffer-id-left-extent)))
ext))
Warning: Don't insert text immediately after the image."
(let ((begin (point))
extent)
+ (if (and (bobp) (not string))
+ (setq string " "))
(if string
(insert string)
(setq begin (1- begin)))
;;; gnus.el --- a newsreader for GNU Emacs
-;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996,
+;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996,
;; 1997, 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
+(defgroup gnus-fun nil
+ "Frivolous Gnus extensions."
+ :link '(custom-manual "(gnus)Exiting Gnus")
+ :group 'gnus)
+
(defcustom gnus-inhibit-startup-message nil
"If non-nil, the startup message will not be displayed.
This variable is used before `.gnus.el' is loaded, so it should
(berry "#cc6485" "#ff7db5")
(dino "#724214" "#1e3f03")
(oort "#cccccc" "#888888")
+ (storm "#666699" "#99ccff")
+ (pdino "#9999cc" "#99ccff")
+ (purp "#9999cc" "#666699")
(neutral "#b4b4b4" "#878787")
(september "#bf9900" "#ffcc00"))
"Color alist used for the Gnus logo.")
(defcustom gnus-logo-color-style 'oort
"*Color styles used for the Gnus logo."
- :type '(choice (const flame) (const pine) (const moss)
- (const irish) (const sky) (const tin)
- (const velvet) (const grape) (const labia)
- (const berry) (const neutral) (const september)
- (const dino))
+ :type `(choice ,@(mapcar (lambda (elem) (list 'const (car elem)))
+ gnus-logo-color-alist))
:group 'gnus-xmas)
(defvar gnus-logo-colors
gnus-demon-remove-handler)
("gnus-demon" :interactive t
gnus-demon-init gnus-demon-cancel)
+ ("gnus-fun" gnus-convert-gray-x-face-to-xpm gnus-display-x-face-in-from
+ gnus-convert-image-to-gray-x-face)
("gnus-salt" gnus-highlight-selected-tree gnus-possibly-generate-tree
gnus-tree-open gnus-tree-close gnus-carpal-setup-buffer)
("gnus-nocem" gnus-nocem-scan-groups gnus-nocem-close
("gnus-picon" :interactive t gnus-treat-from-picon)
("gnus-gl" bbb-login bbb-logout bbb-grouplens-group-p
gnus-grouplens-mode)
- ("smiley" :interactive t gnus-smiley-display)
+ ("smiley" :interactive t smiley-region)
("gnus-win" gnus-configure-windows gnus-add-configuration)
("gnus-sum" gnus-summary-insert-line gnus-summary-read-group
gnus-list-of-unread-articles gnus-list-of-read-articles
;;; gnus-sum.el thingies
-(defcustom gnus-summary-line-format "%U%R%z%I%(%[%4L: %-23,23n%]%) %s\n"
+(defcustom gnus-summary-line-format "%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n"
"*The format specification of the lines in the summary buffer.
It works along the same lines as a normal formatting string,
will be inserted into the summary just like information from any other
summary specifier.
-Text between %( and %) will be highlighted with `gnus-mouse-face'
-when the mouse point is placed inside the area. There can only be one
-such area.
-
The %U (status), %R (replied) and %z (zcore) specs have to be handled
with care. For reasons of efficiency, Gnus will compute what column
these characters will end up in, and \"hard-code\" that. This means that
The smart choice is to have these specs as far to the left as
possible.
-This restriction may disappear in later versions of Gnus."
+This restriction may disappear in later versions of Gnus.
+
+General format specifiers can also be used.
+See (gnus)Formatting Variables."
+ :link '(custom-manual "(gnus)Formatting Variables")
:type 'string
:group 'gnus-summary-format)
(let ((cmds (if (listp imap-ssl-program) imap-ssl-program
(list imap-ssl-program)))
cmd done)
- (ignore-errors (require 'ssl))
+ (condition-case ()
+ (require 'ssl)
+ (error))
(while (and (not done) (setq cmd (pop cmds)))
(message "imap: Opening SSL connection with `%s'..." cmd)
(let* ((port (or port imap-default-ssl-port))
?p (number-to-string port)))))
process)
(when (setq process
- (ignore-errors
- (cond ((eq system-type 'windows-nt)
- (let (selective-display
- (coding-system-for-write 'binary)
- (coding-system-for-read 'raw-text-dos)
- (output-coding-system 'binary)
- (input-coding-system 'raw-text-dos))
- (open-ssl-stream name buffer server port)))
- (t
- (as-binary-process
- (open-ssl-stream name buffer server port))))))
+ (condition-case nil
+ (cond ((eq system-type 'windows-nt)
+ (let (selective-display
+ (coding-system-for-write 'binary)
+ (coding-system-for-read 'raw-text-dos)
+ (output-coding-system 'binary)
+ (input-coding-system 'raw-text-dos))
+ (open-ssl-stream name buffer server port)))
+ (t
+ (as-binary-process
+ (open-ssl-stream name buffer server port))))
+ (error nil)))
(with-current-buffer buffer
(goto-char (point-min))
(while (and (memq (process-status process) '(open run))
(let ((token (read (current-buffer))))
(imap-forward)
(cond ((eq token 'UID)
- (setq uid (ignore-errors (read (current-buffer)))))
+ (setq uid (condition-case ()
+ (read (current-buffer))
+ (error))))
((eq token 'FLAGS)
(setq flags (imap-parse-flag-list))
(if (not flags)
;;; message.el --- composing mail and news messages
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
;; Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
:group 'message-sending
:type '(repeat (symbol :tag "Type")))
+(defcustom message-fcc-externalize-attachments nil
+ "If non-nil, attachments are included as external parts in Fcc copies."
+ :type 'boolean
+ :group 'message-sending)
+
(defcustom message-courtesy-message
"The following message is a courtesy copy of an article\nthat has been posted to %s as well.\n\n"
"*This is inserted at the start of a mailed copy of a posted message.
(define-key message-mode-map "\C-c?" 'describe-mode)
(define-key message-mode-map "\C-c\C-f\C-t" 'message-goto-to)
+ (define-key message-mode-map "\C-c\C-f\C-o" 'message-goto-from)
(define-key message-mode-map "\C-c\C-f\C-b" 'message-goto-bcc)
(define-key message-mode-map "\C-c\C-f\C-w" 'message-goto-fcc)
(define-key message-mode-map "\C-c\C-f\C-c" 'message-goto-cc)
(define-key message-mode-map "\C-c\C-t" 'message-insert-to)
(define-key message-mode-map "\C-c\C-n" 'message-insert-newsgroups)
+ (define-key message-mode-map "\C-c\C-u" 'message-insert-or-toggle-importance)
+ (define-key message-mode-map "\C-c\M-n" 'message-insert-disposition-notification-to)
+
(define-key message-mode-map "\C-c\C-y" 'message-yank-original)
(define-key message-mode-map "\C-c\M-\C-y" 'message-yank-buffer)
(define-key message-mode-map "\C-c\C-q" 'message-fill-yanked-message)
["Kill To Signature" message-kill-to-signature t]
["Newline and Reformat" message-newline-and-reformat t]
["Rename buffer" message-rename-buffer t]
- ["Flag as important" message-insert-importance-high
+ ["Flag As Important" message-insert-importance-high
,@(if (featurep 'xemacs) '(t)
'(:help "Mark this message as important"))]
- ["Flag as unimportant" message-insert-importance-low
+ ["Flag As Unimportant" message-insert-importance-low
,@(if (featurep 'xemacs) '(t)
'(:help "Mark this message as unimportant"))]
+ ["Request Receipt"
+ message-insert-disposition-notification-to
+ ,@(if (featurep 'xemacs) '(t)
+ '(:help "Request a Disposition Notification of this article"))]
["Spellcheck" ispell-message
,@(if (featurep 'xemacs) '(t)
'(:help "Spellcheck this message"))]
["Fetch Newsgroups" message-insert-newsgroups t]
"----"
["To" message-goto-to t]
+ ["From" message-goto-from t]
["Subject" message-goto-subject t]
["Cc" message-goto-cc t]
["Reply-To" message-goto-reply-to t]
C-c C-f C-k move to Keywords C-c C-f C-d move to Distribution
C-c C-f C-f move to Followup-To
C-c C-f C-m move to Mail-Followup-To
+ C-c C-f C-i cycle through Importance values
C-c C-f c move to Mail-Copies-To
C-c C-t `message-insert-to' (add a To header to a news followup)
C-c C-n `message-insert-newsgroups' (add a Newsgroup header to a news reply)
C-c C-v `message-delete-not-region' (remove the text outside the region).
C-c C-z `message-kill-to-signature' (kill the text up to the signature).
C-c C-r `message-caesar-buffer-body' (rot13 the message body).
-C-c C-p `message-insert-or-toggle-importance' (insert or cycle importance)
+C-c C-u `message-insert-or-toggle-importance' (insert or cycle importance).
+C-c M-n `message-insert-disposition-notification-to' (request receipt).
M-RET `message-newline-and-reformat' (break the line and reformat)."
(set (make-local-variable 'message-reply-buffer) nil)
(make-local-variable 'message-send-actions)
(interactive)
(message-position-on-field "To"))
+(defun message-goto-from ()
+ "Move point to the From header."
+ (interactive)
+ (message-position-on-field "From"))
+
(defun message-goto-subject ()
"Move point to the Subject header."
(interactive)
(message-goto-eoh)
(insert (format "Importance: %s\n" new)))))
+(defun message-insert-disposition-notification-to ()
+ "Request a disposition notification (return receipt) to this message.
+Note that this should not be used in newsgroups."
+ (interactive)
+ (save-excursion
+ (message-remove-header "Disposition-Notification-To")
+ (message-goto-eoh)
+ (insert (format "Disposition-Notification-To: %s\n"
+ (or (message-fetch-field "From") (message-make-from))))))
+
(defun message-elide-region (b e)
"Elide the text in the region.
An ellipsis (from `message-elide-ellipsis') will be inserted where the
'(invisible t mime-edit-invisible t))
(put-text-property start end 'invisible t))))))
+(defun message-text-with-property (prop)
+ "Return a list of all points where the text has PROP."
+ (let ((points nil)
+ (point (point-min)))
+ (save-excursion
+ (while (< point (point-max))
+ (when (get-text-property point prop)
+ (push point points))
+ (incf point)))
+ (nreverse points)))
+
(defun message-fix-before-sending ()
"Do various things to make the message nice before sending it."
;; Make sure there's a newline at the end of the message.
(let ((case-fold-search t)
(coding-system-for-write 'raw-text)
(output-coding-system 'raw-text)
- list file)
+ list file
+ (mml-externalize-attachments message-fcc-externalize-attachments))
(save-excursion
(save-restriction
(message-narrow-to-headers)
(aset tmp (1- (match-end 0)) ?-))
(string-match "[\\()]" tmp)))))
(insert fullname)
- (goto-char (point-min))
- ;; Look for a character that cannot appear unquoted
- ;; according to RFC 822.
- (when (re-search-forward "[^- !#-'*+/-9=?A-Z^-~]" nil 1)
- ;; Quote fullname, escaping specials.
- (goto-char (point-min))
- (insert "\"")
- (while (re-search-forward "[\"\\]" nil 1)
- (replace-match "\\\\\\&" t))
- (insert "\""))
(insert " <" login ">"))
(t ; 'parens or default
(insert login " (")
(match-string 1 user-mail))
;; Default to this bogus thing.
(t
- (concat system-name ".i-did-not-set--mail-host-address--so-shoot-me")))))
+ (concat system-name ".i-did-not-set--mail-host-address--so-tickle-me")))))
(defun message-make-host-name ()
"Return the name of the host."
(goto-char (point-max))
(insert (if (stringp header) header (symbol-name header))
": " value)
+ ;; We check whether the value was ended by a
+ ;; newline. If now, we insert one.
(unless (bolp)
(insert "\n"))
(forward-line -1))
to group)
(if (not (or (null name)
(string-equal name "mail")
- (string-equal name "news")))
+ (string-equal name "posting")))
(setq name (concat "*sent " name "*"))
(message-narrow-to-headers)
(setq to (message-fetch-field "to"))
(or (car (mail-extract-address-components to))
to) "*"))
((and group (not (string= group "")))
- (concat "*sent news on " group "*"))
+ (concat "*sent posting on " group "*"))
(t "*sent mail*"))))
(unless (string-equal name (buffer-name))
(rename-buffer name t)))))
"Start editing a news article to be sent."
(interactive)
(let ((message-this-is-news t))
- (message-pop-to-buffer (message-buffer-name "news" nil newsgroups))
+ (message-pop-to-buffer (message-buffer-name "posting" nil newsgroups))
(message-setup `((Newsgroups . ,(or newsgroups ""))
(Subject . ,(or subject ""))))))
(special-display-regexps nil)
(same-window-buffer-names nil)
(same-window-regexps nil))
- (message-pop-to-buffer (message-buffer-name "news" nil newsgroups)))
+ (message-pop-to-buffer (message-buffer-name "posting" nil newsgroups)))
(let ((message-this-is-news t))
(message-setup `((Newsgroups . ,(or newsgroups ""))
(Subject . ,(or subject ""))))))
(special-display-regexps nil)
(same-window-buffer-names nil)
(same-window-regexps nil))
- (message-pop-to-buffer (message-buffer-name "news" nil newsgroups)))
+ (message-pop-to-buffer (message-buffer-name "posting" nil newsgroups)))
(let ((message-this-is-news t))
(message-setup `((Newsgroups . ,(or newsgroups ""))
(Subject . ,(or subject ""))))))
(tool-bar-add-item-from-menu
'message-insert-importance-low "unimportant"
message-mode-map)
+ (tool-bar-add-item-from-menu
+ 'message-insert-disposition-notification-to "receipt"
+ message-mode-map)
tool-bar-map)))))
;;; Group name completion.
(message-narrow-to-headers-or-head)
(message-remove-first-header "Content-Type")
(message-remove-first-header "Content-Transfer-Encoding"))
- ;; We always make sure that the message has a Content-Type header.
- ;; This is because some broken MTAs and MUAs get awfully confused
- ;; when confronted with a message with a MIME-Version header and
- ;; without a Content-Type header. For instance, Solaris'
- ;; /usr/bin/mail.
+ ;; We always make sure that the message has a Content-Type
+ ;; header. This is because some broken MTAs and MUAs get
+ ;; awfully confused when confronted with a message with a
+ ;; MIME-Version header and without a Content-Type header. For
+ ;; instance, Solaris' /usr/bin/mail.
(unless content-type-p
(goto-char (point-min))
;; For unknown reason, MIME-Version doesn't exist.
;;; mm-util.el --- Utility functions for Mule and low level things
-;; Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
'(iso-2022-jp iso-2022-jp-2 japanese-shift-jis utf-8))
")
+(defvar mm-use-find-coding-systems-region
+ (fboundp 'find-coding-systems-region)
+ "Use `find-coding-systems-region' to find proper coding systems.")
+
;;; Internal variables:
;;; Functions:
)
charset)
;; Translate invalid charsets.
- ((mm-coding-system-p (setq charset
- (cdr (assq charset
- mm-charset-synonym-alist))))
- charset)
+ ((let ((cs (cdr (assq charset mm-charset-synonym-alist))))
+ (and cs (mm-coding-system-p charset) cs)))
;; Last resort: search the coding system list for entries which
;; have the right mime-charset in case the canonical name isn't
;; defined (though it should be).
(or (get-charset-property charset 'preferred-coding-system)
(get-charset-property charset 'prefered-coding-system)))
+(defsubst mm-guess-charset ()
+ "Guess Mule charset from the language environment."
+ (or
+ mail-parse-mule-charset ;; cached mule-charset
+ (progn
+ (setq mail-parse-mule-charset
+ (and (boundp 'current-language-environment)
+ (car (last
+ (assq 'charset
+ (assoc current-language-environment
+ language-info-alist))))))
+ (if (or (not mail-parse-mule-charset)
+ (eq mail-parse-mule-charset 'ascii))
+ (setq mail-parse-mule-charset
+ (or (car (last (assq mail-parse-charset
+ mm-mime-mule-charset-alist)))
+ ;; default
+ 'latin-iso8859-1)))
+ mail-parse-mule-charset)))
+
(defun mm-charset-after (&optional pos)
"Return charset of a character in current buffer at position POS.
If POS is nil, it defauls to the current point.
(if (and charset (not (memq charset '(ascii eight-bit-control
eight-bit-graphic))))
charset
- (or
- mail-parse-mule-charset ;; cached mule-charset
- (progn
- (setq mail-parse-mule-charset
- (and (boundp 'current-language-environment)
- (car (last
- (assq 'charset
- (assoc current-language-environment
- language-info-alist))))))
- (if (or (not mail-parse-mule-charset)
- (eq mail-parse-mule-charset 'ascii))
- (setq mail-parse-mule-charset
- (or (car (last (assq mail-parse-charset
- mm-mime-mule-charset-alist)))
- ;; Fixme: don't fix that!
- 'latin-iso8859-1)))
- mail-parse-mule-charset)))))))
+ (mm-guess-charset))))))
(defun mm-mime-charset (charset)
"Return the MIME charset corresponding to the given Mule CHARSET."
(setq result (cons head result)))
(nreverse result)))
-;; It's not clear whether this is supposed to mean the global or local
-;; setting. I think it's used inconsistently. -- fx
-(defsubst mm-multibyte-p ()
- "Say whether multibyte is enabled."
- (if (and (not (featurep 'xemacs))
- (boundp 'enable-multibyte-characters))
- enable-multibyte-characters
- (featurep 'mule)))
+(if (and (not (featurep 'xemacs))
+ (boundp 'enable-multibyte-characters))
+ (defalias 'mm-multibyte-p
+ (lambda ()
+ "Say whether multibyte is enabled in the current buffer."
+ enable-multibyte-characters))
+ (defalias 'mm-multibyte-p (lambda () (featurep 'mule))))
(defun mm-iso-8859-x-to-15-region (&optional b e)
(if (fboundp 'char-charset)
(let (charsets)
;; The return possibilities of this function are a mess...
(or (and (mm-multibyte-p)
- (fboundp 'find-coding-systems-region)
+ mm-use-find-coding-systems-region
;; Find the mime-charset of the most preferred coding
;; system that has one.
(let ((systems (find-coding-systems-region b e)))
(push dir result))
(push path result))))
+(if (fboundp 'detect-coding-region)
+ (defun mm-detect-coding-region (start end)
+ "Like 'detect-coding-region' except returning the best one."
+ (let ((coding-systems
+ (detect-coding-region (point) (point-max))))
+ (or (car-safe coding-systems)
+ coding-systems)))
+ (defun mm-detect-coding-region (start end)
+ (let ((point (point)))
+ (goto-char start)
+ (skip-chars-forward "\0-\177" end)
+ (prog1
+ (if (eq (point) end) 'ascii (mm-guess-charset))
+ (goto-char point)))))
+
+(if (fboundp 'coding-system-get)
+ (defun mm-detect-mime-charset-region (start end)
+ "Detect MIME charset of the text in the region between START and END."
+ (let ((cs (mm-detect-coding-region start end)))
+ (coding-system-get cs 'mime-charset)))
+ (defun mm-detect-mime-charset-region (start end)
+ "Detect MIME charset of the text in the region between START and END."
+ (let ((cs (mm-detect-coding-region start end)))
+ cs)))
+
(provide 'mm-util)
;;; mm-util.el ends here
;;; mml.el --- A package for parsing and validating MML documents
-;; Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; This file is part of GNU Emacs.
handle. FUNCTION is a Lisp function which is called with the MML
handle to tweak the part.")
+(defvar mml-tweak-sexp-alist
+ '((mml-externalize-attachments . mml-tweak-externalize-attachments))
+ "A list of (SEXP . FUNCTION) for tweaking MML parts.
+SEXP is a s-expression. If the evaluation of SEXP is non-nil, FUNCTION
+is called. FUNCTION is a Lisp function which is called with the MML
+handle to tweak the part.")
+
+(defvar mml-externalize-attachments nil
+ "*If non-nil, local-file attachments are generated as external parts.")
+
(defvar mml-generate-multipart-alist nil
"*Alist of multipart generation functions.
Each entry has the form (NAME . FUNCTION), where
(message-encode-message-body)
(save-restriction
(message-narrow-to-headers-or-head)
+ ;; Skip past any From_ headers.
+ (while (looking-at "From ")
+ (forward-line 1))
(let ((mail-parse-charset message-default-charset))
(mail-encode-encoded-word-buffer))))
(erase-buffer)
(mm-disable-multibyte)
(insert s)))
- (let ((gnus-newsgroup-charset (car message-posting-charset)))
+ (let ((gnus-newsgroup-charset (car message-posting-charset))
+ gnus-article-prepare-hook gnus-original-article-buffer)
(run-hooks 'gnus-article-decode-hook)
(let ((gnus-newsgroup-name "dummy"))
(gnus-article-prepare-display))))
(setq alist (cdr alist)))))))
(if func
(funcall func cont)
- cont)))
+ cont)
+ (let ((alist mml-tweak-sexp-alist))
+ (while alist
+ (if (eval (caar alist))
+ (funcall (cdar alist) cont))
+ (setq alist (cdr alist)))))
+ cont)
+
+(defun mml-tweak-externalize-attachments (cont)
+ "Tweak attached files as external parts."
+ (let (filename-cons)
+ (when (and (eq (car cont) 'part)
+ (not (cdr (assq 'buffer cont)))
+ (and (setq filename-cons (assq 'filename cont))
+ (not (equal (cdr (assq 'nofile cont)) "yes"))))
+ (setcar cont 'external)
+ (setcar filename-cons 'name))))
(provide 'mml)
(save-excursion
(nnmail-find-file file) ; Insert the file in the nntp buf.
(unless (nnheader-article-p) ; Either it's a real article...
- (goto-char (point-min))
- (nneething-make-head
- file (current-buffer)) ; ... or we fake some headers.
+ (let ((type
+ (unless (file-directory-p file)
+ (or (cdr (assoc (concat "." (file-name-extension file))
+ mailcap-mime-extensions))
+ "text/plain")))
+ (charset
+ (mm-detect-mime-charset-region (point-min) (point-max)))
+ (encoding))
+ (unless (string-match "\\`text/" type)
+ (base64-encode-region (point-min) (point-max))
+ (setq encoding "base64"))
+ (goto-char (point-min))
+ (nneething-make-head file (current-buffer)
+ nil type charset encoding))
(insert "\n"))
t))))
(insert-buffer-substring nneething-work-buffer)
(goto-char (point-max))))
-(defun nneething-make-head (file &optional buffer extra-msg)
+(defun nneething-make-head (file &optional buffer extra-msg
+ mime-type mime-charset mime-encoding)
"Create a head by looking at the file attributes of FILE."
(let ((atts (file-attributes file)))
(insert
(concat "Lines: " (int-to-string
(count-lines (point-min) (point-max)))
"\n"))
+ "")
+ (if mime-type
+ (concat "Content-Type: " mime-type
+ (if mime-charset
+ (concat "; charset="
+ (if (stringp mime-charset)
+ mime-charset
+ (symbol-name mime-charset)))
+ "")
+ (if mime-encoding
+ (concat "\nContent-Transfer-Encoding: " mime-encoding)
+ "")
+ "\nMIME-Version: 1.0\n")
""))))
(defun nneething-from-line (uid &optional file)
;;; nnmail.el --- mail support functions for the Gnus mail backends
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
;; Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
(const warn)
(const delete)))
-(defcustom nnmail-extra-headers nil
+(defcustom nnmail-extra-headers '(To Newsgroups)
"*Extra headers to parse."
:version "21.1"
:group 'nnmail
;;; nnmaildir.el --- maildir backend for Gnus
-;; Copyright (c) 2001 Free Software Foundation, Inc.
+;; Copyright (c) 2001, 2002 Free Software Foundation, Inc.
;; Copyright (c) 2000, 2001 Paul Jarc <prj@po.cwru.edu>
;; Author: Paul Jarc <prj@po.cwru.edu>
;;
;; Some goals of nnmaildir:
;; * Everything Just Works, and correctly. E.g., stale NOV data is
-;; ignored when articles have been edited; no need for
-;; -generate-nov-databases.
+;; ignored; no need for -generate-nov-databases.
;; * Perfect reliability: [C-g] will never corrupt its data in memory,
;; and SIGKILL will never corrupt its data in the filesystem.
;; * We make it easy to manipulate marks, etc., from outside Gnus.
;; * All information about a group is stored in the maildir, for easy
-;; backup and restoring.
+;; backup, copying, restoring, etc.
;; * We use the filesystem as a database.
;;
;; Todo:
-;; * Ignore old NOV data when gnus-extra-headers has changed.
;; * Don't force article renumbering, so nnmaildir can be used with
;; the cache and agent. Alternatively, completely rewrite the Gnus
;; backend interface, which would have other advantages.
["subject\tfrom\tdate"
"references\tchars\lines"
"extra"
- article-file-modtime]]
+ article-file-modtime
+ ;; The value of nnmail-extra-headers when this NOV data was parsed:
+ (to in-reply-to)]]
(defmacro nnmaildir--srv-new () '(make-vector 11 nil))
(defmacro nnmaildir--srv-get-name (server) `(aref ,server 0))
(defmacro nnmaildir--art-set-msgid (article val) `(aset ,article 3 ,val))
(defmacro nnmaildir--art-set-nov (article val) `(aset ,article 4 ,val))
-(defmacro nnmaildir--nov-new () '(make-vector 4 nil))
+(defmacro nnmaildir--nov-new () '(make-vector 5 nil))
(defmacro nnmaildir--nov-get-beg (nov) `(aref ,nov 0))
(defmacro nnmaildir--nov-get-mid (nov) `(aref ,nov 1))
(defmacro nnmaildir--nov-get-end (nov) `(aref ,nov 2))
(defmacro nnmaildir--nov-get-mtime (nov) `(aref ,nov 3))
+(defmacro nnmaildir--nov-get-neh (nov) `(aref ,nov 4))
(defmacro nnmaildir--nov-set-beg (nov val) `(aset ,nov 0 ,val))
(defmacro nnmaildir--nov-set-mid (nov val) `(aset ,nov 1 ,val))
(defmacro nnmaildir--nov-set-end (nov val) `(aset ,nov 2 ,val))
(defmacro nnmaildir--nov-set-mtime (nov val) `(aset ,nov 3 ,val))
+(defmacro nnmaildir--nov-set-neh (nov val) `(aset ,nov 4 ,val))
(defmacro nnmaildir--srv-grp-dir (srv-dir gname)
`(file-name-as-directory (concat ,srv-dir ,gname)))
(defun nnmaildir--update-nov (srv-dir group article)
(let ((nnheader-file-coding-system 'binary)
dir gname pgname msgdir prefix suffix file attr mtime novdir novfile
- nov msgid nov-beg nov-mid nov-end field pos extra val deactivate-mark)
+ nov msgid nov-beg nov-mid nov-end field pos extra val old-neh new-neh
+ deactivate-mark)
(catch 'return
(setq suffix (nnmaildir--art-get-suffix article))
(if (stringp suffix) nil
novfile (concat novdir prefix))
(save-excursion
(set-buffer (get-buffer-create " *nnmaildir nov*"))
- (when (file-exists-p novfile)
- (and nov
- (equal mtime (nnmaildir--nov-get-mtime nov))
- (throw 'return nov))
- (erase-buffer)
- (nnheader-insert-file-contents novfile)
- (setq nov (read (current-buffer)))
- (nnmaildir--art-set-msgid article (car nov))
- (setq nov (cadr nov))
- (and (equal mtime (nnmaildir--nov-get-mtime nov))
- (throw 'return nov)))
+ (when (file-exists-p novfile) ;; If not, force reparsing the message.
+ (if nov nil ;; It's already in memory.
+ ;; Else read the data from the NOV file.
+ (erase-buffer)
+ (nnheader-insert-file-contents novfile)
+ (setq nov (read (current-buffer)))
+ (nnmaildir--art-set-msgid article (car nov))
+ (setq nov (cadr nov)))
+ ;; If the NOV's modtime matches the file's current modtime,
+ ;; and it has the right length (i.e., it wasn't produced by
+ ;; a too-much older version of nnmaildir), then we may use
+ ;; this NOV data rather than parsing the message file,
+ ;; unless nnmail-extra-headers has been augmented since this
+ ;; data was last parsed.
+ (when (and (equal mtime (nnmaildir--nov-get-mtime nov))
+ (= (length nov) (length (nnmaildir--nov-new))))
+ ;; This NOV data is potentially up-to-date.
+ (setq old-neh (nnmaildir--nov-get-neh nov)
+ new-neh nnmail-extra-headers)
+ (if (equal new-neh old-neh) (throw 'return nov)) ;; Common case.
+ ;; They're not equal, but maybe the new is a subset of the old...
+ (if (null new-neh) (throw 'return nov))
+ (while new-neh
+ (if (memq (car new-neh) old-neh)
+ (progn
+ (setq new-neh (cdr new-neh))
+ (if new-neh nil (throw 'return nov)))
+ (setq new-neh nil)))))
+ ;; Parse the NOV data out of the message.
(erase-buffer)
(nnheader-insert-file-contents file)
(insert "\n")
(nnmaildir--nov-set-mid nov nov-mid)
(nnmaildir--nov-set-end nov nov-end)
(nnmaildir--nov-set-mtime nov mtime)
+ (nnmaildir--nov-set-neh nov (copy-sequence nnmail-extra-headers))
(prin1 (list msgid nov) (current-buffer))
- (setq file (concat novdir ":"))
+ (setq file (concat novfile ":"))
(nnmaildir--unlink file)
(write-region (point-min) (point-max) file nil 'no-message))
(rename-file file novfile 'replace)
(let ((no-force (not force))
(group (nnmaildir--prepare server gname))
pgname time boundary time-iter bound-iter high low target dir nlist
- stop num article didnt suffix nnmaildir--file deactivate-mark)
+ stop number article didnt suffix nnmaildir--file
+ nnmaildir-article-file-name deactivate-mark)
(catch 'return
(if group nil
(nnmaildir--srv-set-error nnmaildir--cur-server
high (1- high)))
(setcar (cdr boundary) low)
(setcar boundary high)
- (setq target (nnmaildir--param pgname 'expire-group)
- target (and (stringp target)
- (not (string-equal target pgname))
- target)
- dir (nnmaildir--srv-get-dir nnmaildir--cur-server)
+ (setq dir (nnmaildir--srv-get-dir nnmaildir--cur-server)
dir (nnmaildir--srv-grp-dir dir gname)
dir (nnmaildir--cur dir)
nlist (nnmaildir--grp-get-lists group)
(save-excursion
(set-buffer (get-buffer-create " *nnmaildir move*"))
(while ranges
- (setq num (car ranges) ranges (cdr ranges))
- (while (eq num (car ranges))
+ (setq number (car ranges) ranges (cdr ranges))
+ (while (eq number (car ranges))
(setq ranges (cdr ranges)))
- (if (numberp num) (setq stop num)
- (setq stop (car num) num (cdr num)))
- (setq nlist (nthcdr (- (nnmaildir--art-get-num (car nlist)) num)
+ (if (numberp number) (setq stop number)
+ (setq stop (car number) number (cdr number)))
+ (setq nlist (nthcdr (- (nnmaildir--art-get-num (car nlist)) number)
nlist))
(while (and nlist
(setq article (car nlist)
- num (nnmaildir--art-get-num article))
- (>= num stop))
+ number (nnmaildir--art-get-num article))
+ (>= number stop))
(setq nlist (cdr nlist)
suffix (nnmaildir--art-get-suffix article))
(catch 'continue
time-iter (cdr time-iter)))
(and bound-iter time-iter
(car-less-than-car bound-iter time-iter))))
- (setq didnt (cons (nnmaildir--art-get-num article) didnt))
- (when target
+ (setq didnt (cons number didnt))
+ (save-excursion
+ (setq nnmaildir-article-file-name nnmaildir--file
+ target (nnmaildir--param pgname 'expire-group)))
+ (when (and (stringp target)
+ (not (string-equal target pgname))) ;; Move it.
(erase-buffer)
(nnheader-insert-file-contents nnmaildir--file)
(gnus-request-accept-article target nil nil 'no-encode))
- (nnmaildir--unlink nnmaildir--file)
- (nnmaildir--art-set-suffix article 'expire)
- (nnmaildir--art-set-nov article nil)))))
+ (if (equal target pgname)
+ (setq didnt (cons number didnt)) ;; Leave it here.
+ (nnmaildir--unlink nnmaildir--file)
+ (nnmaildir--art-set-suffix article 'expire)
+ (nnmaildir--art-set-nov article nil))))))
(erase-buffer))
didnt)))
;;; nnspool.el --- spool access for GNU Emacs
;; Copyright (C) 1988, 1989, 1990, 1993, 1994, 1995, 1996, 1997, 1998,
-;; 2000 Free Software Foundation, Inc.
+;; 2000, 2002
+;; Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
;; Lars Magne Ingebrigtsen <larsi@gnus.org>
()
(nnheader-report 'nnspool "")
(set-process-sentinel proc 'nnspool-inews-sentinel)
- (process-send-region proc (point-min) (point-max))
+ (mm-with-unibyte-current-buffer
+ (process-send-region proc (point-min) (point-max)))
;; We slap a condition-case around this, because the process may
;; have exited already...
(ignore-errors
;;; nntp.el --- nntp access for Gnus
-;; Copyright (C) 1987, 1988, 1989, 1990, 1992, 1993, 1994, 1995, 1996,
-;; 1997, 1998, 2000, 2001
+;; Copyright (C) 1987, 1988, 1989, 1990, 1992, 1993, 1994, 1995, 1996,
+;; 1997, 1998, 2000, 2001, 2002
;; Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
(set-buffer (nntp-find-connection-buffer nntp-server-buffer))
(erase-buffer)))
(nntp-encode-text)
- (process-send-region (nntp-find-connection nntp-server-buffer)
- (point-min) (point-max))
+ (mm-with-unibyte-current-buffer
+ ;; Some encoded unicode text contains character 0x80-0x9f e.g. Euro.
+ (process-send-region (nntp-find-connection nntp-server-buffer)
+ (point-min) (point-max)))
(nntp-retrieve-data
nil nntp-address nntp-port-number nntp-server-buffer
wait-for nnheader-callback-function))
(last-point (point-min))
(nntp-inhibit-erase t)
(buf (nntp-find-connection-buffer nntp-server-buffer))
- (command (if nntp-server-list-active-group "LIST ACTIVE" "GROUP")))
+ (command (if nntp-server-list-active-group
+ "LIST ACTIVE" "GROUP")))
(while groups
;; Send the command to the server.
(nntp-send-command nil command (pop groups))
(erase-buffer)
(nntp-send-command "^[245].*\n" "GROUP" group)
(setcar (cddr entry) group)
- (erase-buffer))))))
+ (erase-buffer)
+ (save-excursion
+ (set-buffer nntp-server-buffer)
+ (erase-buffer)))))))
(defun nntp-decode-text (&optional cr-only)
"Decode the text in the current buffer."
;;; rfc2047.el --- Functions for encoding and decoding rfc2047 messages
-;; Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
(defun rfc2047-decode-string (string)
"Decode the quoted-printable-encoded STRING and return the results."
(let ((m (mm-multibyte-p)))
- (with-temp-buffer
- (when m
- (mm-enable-multibyte))
- (insert string)
- (inline
- (rfc2047-decode-region (point-min) (point-max)))
- (buffer-string))))
+ (if (string-match "=\\?" string)
+ (with-temp-buffer
+ (when m
+ (mm-enable-multibyte))
+ (insert string)
+ (inline
+ (rfc2047-decode-region (point-min) (point-max)))
+ (buffer-string))
+ (if (and m
+ mail-parse-charset
+ (not (eq mail-parse-charset 'us-ascii))
+ (not (eq mail-parse-charset 'gnus-decoded)))
+ (mm-decode-coding-string string mail-parse-charset)
+ string))))
(defun rfc2047-parse-and-decode (word)
"Decode WORD and return it if it is an encoded word.
;;; smiley-ems.el --- displaying smiley faces
-;; Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
;; Author: Dave Love <fx@gnu.org>
;; Keywords: news mail multimedia
(mouse-set-point event)
(smiley-toggle-buffer))))
-(eval-when-compile (defvar gnus-article-buffer))
-
-(defun gnus-smiley-display (&optional arg)
- "Display textual emoticaons (\"smilies\") as small graphical icons.
-With arg, turn displaying on if and only if arg is positive."
- (interactive "P")
- (gnus-with-article-buffer
- (if (memq 'smiley gnus-article-wash-types)
- (gnus-delete-images 'smiley)
- (article-goto-body)
- (let ((images (smiley-region (point) (point-max))))
- (when images
- (gnus-add-wash-type 'smiley)
- (dolist (image images)
- (gnus-add-image 'smiley image))))
- (when (and (numberp arg)
- (<= arg 0))
- (smiley-toggle-buffer arg)))))
-
(provide 'smiley)
;;; smiley-ems.el ends here
+2002-01-06 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus.texi (Archived Messages): Rename
+ gnus-inews-mark-gcc-as-read to gnus-gcc-mark-as-read.
+
+ * Makefile.in (clean): Clean thumb*.
+
+2002-01-05 Harry Putnam <reader@newsguy.com>
+
+ * gnus.texi (Score Variables): Clarify.
+
+2002-01-05 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Agent Expiry): Addition.
+ (Sorting the Summary Buffer): Addition.
+
+2002-01-05 Simon Josefsson <jas@extundo.com>
+
+ * gnus.texi (Conformity): Add MIME and Disposition Notifications.
+
+ * message.texi (Header Commands): Fix. Add m-goto-from.
+ (Insertion): Add m-i-disposition-notification-to.
+
+2002-01-05 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * Makefile.in (.latexi.pdf-x): Use thumbpdf.
+
+ * gnus.texi (Advanced Formatting): Double @'s. Use thumbpdf.
+ colorlinks=true.
+
+2002-01-05 Norman Walsh <ndw@nwalsh.com>
+
+ * gnus-faq.texi: Fix typo.
+
+2002-01-05 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Sorting the Summary Buffer): Addition.
+
+2002-01-04 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Virtual Groups): Addition.
+
+2002-01-03 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Article Keymap): Addition.
+ (Summary Mail Commands): Fix.
+
+2002-01-02 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Group Timestamp): Addition. Example from Andras
+ BALI.
+ (X-Face): Addition.
+ (Advanced Formatting): Add example.
+
+2002-01-01 Simon Josefsson <jas@extundo.com>
+
+ * gnus.texi (Conformity): Add and fix.
+
+ * message.texi (Security): Mention gpg-temp-directory.
+
+ * gnus.texi (Article Washing): Link to Security section.
+ (Security): Fix.
+ (Signing and Encrypting): Renamed from Using GPG.
+ (IMAP): Fixes.
+
+2002-01-01 Simon Josefsson <jas@extundo.com>
+
+ * gnus.texi (Customizing Articles): Add crossreference links. Add
+ gnus-body-boundary-delimiter.
+
2002-01-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus.texi (Choosing Commands): Addition.
+ (Article Display): Update.
+ (Article Display): Addition.
+ (Article Header): New.
+ (Slow Terminal Connection): Addition.
+ (Predicate Specifiers): New.
+ (To From Newsgroups): Addition.
+ (Topic Commands): Addition.
+ Update the menus.
+ Fix some references b0rked up by the menu fixing.
2001-12-31 Rui Zhu <sprache@iname.com>
TEXINPUTS=$(srcdir):$$TEXINPUTS $(PDFLATEX) refcard.tex
clean:
- rm -f gnus.*.bak *.ky *.cp *.fn *.cps *.kys *.log *.aux *.dvi *.vr \
- *.pdf *.tp *.toc *.pg gnus.latexi *.aux *.[cgk]idx \
- gnus.ilg gnus.ind gnus.[cgk]ind gnus.idx \
- gnustmp.texi *.tmplatexi gnus.tmplatexi1 texput.log *.orig *.rej \
- gnus.latexi*~* xface.tex picons.tex smiley.tex *.latexi *.dvi-x \
- *.pdf-x gnus.out
+ rm -f *.[cgk]idx *.aux *.cp *.cps *.dvi *.dvi-x *.fn *.ky \
+ *.kys *.latexi *.log *.orig *.pdf *.pdf-x *.pg *.rej \
+ *.tmplatexi *.toc *.tp *.vr gnus.*.bak gnus.[cgk]ind gnus.idx \
+ gnus.ilg gnus.ind gnus.latexi*~* gnus.out gnus.tmplatexi1 \
+ gnustmp.texi picons.tex smiley.tex texput.log thumb*.png \
+ thumbdta.tex xface.tex
makeinfo:
makeinfo -o gnus gnus.texi
egrep -v "end\{document\}" $< > gnus.tmplatexi
cat $(srcdir)/postamble.tex >> gnus.tmplatexi
TEXINPUTS=$(srcdir):$$TEXINPUTS $(PDFLATEX) gnus.tmplatexi
+ thumbpdf gnus.pdf
TEXINPUTS=$(srcdir):$$TEXINPUTS $(PDFLATEX) gnus.tmplatexi
mv gnus.pdf $@
and Yank} and @i{Reply and Yank} in the Post menu.
@kbd{C-c C-y} grabs the previous message and prefixes each line with
-@code{ail-indentation-spaces} spaces or @code{mail-yank-prefix} if that is
+@code{message-indentation-spaces} spaces or @code{message-yank-prefix} if that is
non-nil, unless you have set your own @code{mail-citation-hook}, which will
be called to do the job.
\ifx\pdfoutput\undefined
\else
-\usepackage[pdftex,bookmarks]{hyperref}
+\usepackage[pdftex,bookmarks,colorlinks=true]{hyperref}
+\usepackage{thumbpdf}
\pdfcompresslevel=9
\fi
\makeindex
\begin{document}
-\newcommand{\gnusversionname}{T-gnus v.}
+\newcommand{\gnusversionname}{T-gnus v6.15}
\newcommand{\gnuschaptername}{}
\newcommand{\gnussectionname}{}
* Choosing Articles:: \e$B5-;v$rFI$`\e(B
* Paging the Article:: \e$BFI$s$G$$$k5-;v$r%9%/%m!<%k$9$k\e(B
* Reply Followup and Post:: \e$B5-;v$rEj9F$9$k\e(B
-* Delayed Articles::
+* Delayed Articles::
* Marking Articles:: \e$B5-;v$K4{FI$d4|8B@Z$l:o=|2DG=Ey$N0u$rIU$1\e(B
\e$B$k\e(B
* Limiting:: \e$B35N,%P%C%U%!$K@)8B$r2C$($k$3$H$,$G$-$k\e(B
* Summary Mail Commands:: \e$B%a!<%k$rAw$k\e(B
* Summary Post Commands:: \e$B%K%e!<%9$rAw$k\e(B
* Summary Message Commands:: \e$BB>$N%a%C%;!<%84XO"$NL?Na\e(B
-* Canceling and Superseding::
+* Canceling and Superseding::
Marking Articles
* Article Hiding:: \e$BFCDj$N>pJs$O>C$75n$j$?$$$H$b;W$&\e(B
* Article Washing:: \e$B?M@8$r$b$C$H$h$/$9$k$?$/$5$s$N5$$NMx$$$?\e(B
\e$B4X?t\e(B
+* Article Header:: \e$B%X%C%@!<$r$$$m$$$mJQ7A$5$;$k\e(B
* Article Buttons:: URL \e$B$d\e(B Message-ID \e$B$d\e(B \e$B%"%I%l%9$J$I$r%/%j%C\e(B
\e$B%/$9$k\e(B
* Article Date:: \e$B$0$:$0$:8@$&$J!"@$3&;~$@\e(B!
+* Article Display:: X-Face, Picons, Smileys \e$B$rI=<($9$k\e(B
* Article Signature:: \e$B=pL>$C$F2?\e(B?
* Article Miscellania:: \e$BB>$N$$$m$$$m$J$b$N\e(B
* Summary Group Information:: \e$B>pJs;X8~$NL?Na\e(B
* Searching for Articles:: \e$BJ#?t5-;vL?Na\e(B
-* Summary Generation Commands::
+* Summary Generation Commands::
* Really Various Summary Commands:: \e$B$"$N$d$C$+$$$JB>$KE,9g$7$J$$L?Na\e(B
Article Buffer
* Drafts:: \e$B%a%C%;!<%8$N1d4|$H5qH]$5$l$?%a%C%;!<%8\e(B
* Rejected Articles:: \e$B%5!<%P!<$,$"$J$?$N5-;v$r9%$-$G$J$$$H$-$K\e(B
\e$B2?$,5/$3$k\e(B?
-@c * Using GPG:: How to use GPG and MML to sign and encrypt messages
+@c * Signing and encrypting:: How to compose secure messages.
Select Methods
* Not Reading Mail:: \e$BB>$N%U%!%$%k$rFI$`$?$a$K%a!<%k%P%C%/%(\e(B
\e$B%s%I$r;H$&\e(B
* Choosing a Mail Back End:: Gnus \e$B$O?'!9$J%a!<%kMM<0$rFI$`;v$,$G$-$k\e(B
-* Archiving Mail:: \e$B%a!<%k$r%P%C%/%"%C%W$9$k$K$O\e(B
Mail Sources
Browsing the Web
+* Archiving Mail::
* Web Searches:: \e$BJ8;zNs$K%^%C%A$9$k5-;v$+$i%0%k!<%W$r:n$k\e(B
* Slashdot:: Slashdot \e$B$N%3%a%s%H$rFI$`\e(B
* Ultimate:: Ultimate Bulletin Board \e$B%7%9%F%`\e(B
Agent Commands
-* Group Agent Commands::
-* Summary Agent Commands::
-* Server Agent Commands::
+* Group Agent Commands::
+* Summary Agent Commands::
+* Server Agent Commands::
Scoring
\e$B$-$k\e(B
* NoCeM:: Spam \e$B$dB>$NB@$j$d$9$$?);v$rHr$1$kJ}K!\e(B
* Undo:: \e$B$$$/$D$+$NF0:n$O85$KLa$9;v$,$G$-$k\e(B
+* Predicate Specifiers:: \e$B=R8l$r@_Dj$9$k\e(B
* Moderation:: \e$B$"$J$?$,%b%G%l!<%?!<$@$C$?$i$I$&$9$k$+\e(B
* Image Enhancements:: \e$B:G?7$N\e(B Emacs/XEmacs \e$B$O3($rI=<($G$-$k\e(B
* Fuzzy Matching:: \e$BBg$-$JLJLS$C$F2?\e(B?
* Tabulation:: \e$B=PNO$N@0Ns\e(B
* Wide Characters:: \e$BI}$,9-$$J8;z$r07$&\e(B
-XEmacs Enhancements
+Image Enhancements
* Picons:: \e$B$"$J$?$,FI$s$G$$$k$b$N$N3($rI=<($9$kJ}K!\e(B
* Smileys:: \e$BI=<($5$l$k$Y$/@8$^$l$?9,$;$=$&$J4i$rI=<(\e(B
\e$B$9$kJ}K!\e(B
+* X-Face:: \e$B%U%!%s%-!<$J$A$C$A$c$JGr9u$N3($rI=<($9$k\e(B
* Toolbar:: \e$B%/%j%C%/1n\e(B
* XVarious:: \e$B$=$NB>$N\e(B XEmacs \e$B$G\e(B Gnus \e$B$JJQ?t\e(B
Appendices
+* XEmacs:: XEmacs \e$B$G%$%s%9%H!<%k$9$k$?$a$NMW7o\e(B
* History:: \e$B$I$&$d$C$F\e(B gnus \e$B$,:#F|$N$h$&$K$J$C$?$+\e(B
* On Writing Manuals:: \e$B$J$<$3$l$,=i?4<TMQ$N0FFb$G$J$$$+\e(B
* Terminology:: \e$B2f!9$OK\Ev$KFq$7$$!"8l$N$h$&$J8l$r;H$&\e(B
Back End Interface
-* Required Back End Functions:: \e$B<BAu$7$J$1$l$P$J$i$J$$4X?t\e(B
-* Optional Back End Functions:: \e$B<BAu$7$J$/$F$b$h$$4X?t\e(B
+* Required Back End Functions:: \e$B<BAu$7$J$1$l$P$J$i$J$$4X?t\e(B
+* Optional Back End Functions:: \e$B<BAu$7$J$/$F$b$h$$4X?t\e(B
* Error Messaging:: \e$B%a%C%;!<%8$d%(%i!<Js9p$rF@$kJ}K!\e(B
* Writing New Back Ends:: \e$B8E$$%P%C%/%(%s%I$N3HD%\e(B
* Hooking New Back Ends Into Gnus:: Gnus \e$BB&$G$7$J$1$l$P$J$i$J$$$3$H\e(B
Gnus \e$B$,CN$C$F$$$k%H%T%C%/2=$5$l$?%0%k!<%W$rA4$FI=<($7$^\e(B
\e$B$9\e(B (@code{gnus-topic-list-active})\e$B!#\e(B
+@item T M-n
+@kindex T M-n (\e$B%H%T%C%/\e(B)
+@findex gnus-topic-goto-next-topic
+\e$B<!$N%H%T%C%/$K0\F0$7$^$9\e(B (@code{gnus-topic-goto-next-topic})\e$B!#\e(B
+
+@item T M-p
+@kindex T M-p (\e$B%H%T%C%/\e(B)
+@findex gnus-topic-goto-previous-topic
+\e$BA0$N%H%T%C%/$K0\F0$7$^$9\e(B (@code{gnus-topic-goto-previous-topic})\e$B!#\e(B
+
@item G p
@kindex G p (\e$B%H%T%C%/\e(B)
@findex gnus-topic-edit-parameters
"%M\%S\%p\%P\%5y: %(%-40,40g%) %6,6~(cut 2)d\n")
@end lisp
+\e$B$b$C$H6E$C$?F|IU$N7A<0$r$*K>$_$J$i!"%f!<%6!<Dj5A$K$h$k%U%)!<%^%C%H$N;EMM\e(B
+\e$B$r;H$&$3$H$,$G$-$^$9!#0J2<$N$h$&$J$b$N$O$&$^$/$$$/$G$7$g$&\e(B:
+
+@lisp
+(setq gnus-group-line-format
+ "%M\%S\%p\%P\%5y: %(%-40,40g%) %Ud\n")
+(defun gnus-user-format-function-d (headers)
+ (let ((time (gnus-group-timestamp gnus-tmp-group)))
+ (format-time-string "%b %d %H:%M" time)))
+@end lisp
+
@node File Commands
@subsection \e$B%U%!%$%kL?Na\e(B
@cindex file commands
* Choosing Articles:: \e$B5-;v$rFI$`\e(B
* Paging the Article:: \e$BFI$s$G$$$k5-;v$r%9%/%m!<%k$9$k\e(B
* Reply Followup and Post:: \e$B5-;v$rEj9F$9$k\e(B
-* Delayed Articles::
+* Delayed Articles::
* Marking Articles:: \e$B5-;v$K4{FI$d4|8B@Z$l:o=|2DG=Ey$N0u$rIU$1\e(B
\e$B$k\e(B
* Limiting:: \e$B35N,%P%C%U%!$K@)8B$r2C$($k$3$H$,$G$-$k\e(B
"Your Name Here")
@end lisp
+(\e$B>e5-$NCM$O\e(B gnus \e$B$N%G%#%U%)%k%HCM$G$9!#$"$J$?$NLr$KN)$D$h$&$KJQ$($F2<$5\e(B
+\e$B$$!#\e(B)
+
\e$B$5$F!"$3$l$O:n@.$5$l$k\e(B @sc{nov} \e$B%U%!%$%k$rA`:n$G$-$k%a!<%k%0%k!<%W$G$O$?\e(B
\e$B$$$F$$$N>l9gLrN)$A$^$9!#$7$+$7!"0J2<$N$b$N$r\e(B @file{overview.fmt} \e$B%U%!%$\e(B
\e$B%k$N:G8e$KDI2C$9$k$h$&$K\e(B nntp \e$B4IM}<T$r@bF@$9$k$3$H$,$G$-$l$P\e(B:
* Summary Mail Commands:: \e$B%a!<%k$rAw$k\e(B
* Summary Post Commands:: \e$B%K%e!<%9$rAw$k\e(B
* Summary Message Commands:: \e$BB>$N%a%C%;!<%84XO"$NL?Na\e(B
-* Canceling and Superseding::
+* Canceling and Superseding::
@end menu
@node Summary Mail Commands
@findex gnus-thread-sort-by-author
@findex gnus-thread-sort-by-number
@vindex gnus-thread-sort-functions
+@findex gnus-thread-sort-by-most-recent-thread
\e$B$b$7%9%l%C%I$N35N,I=<($r;H$C$F$$$k$N$G$"$l$P!"\e(B
@code{gnus-thread-sort-functions} \e$B$r@_Dj$9$k$3$H$G%9%l%C%I$rJB$SBX$($k$3\e(B
\e$B$H$,$G$-$^$9!#$=$l$O!"C1FH$N4X?t!"4X?t$N%j%9%H!"4X?t$H\e(B @code{(\e$B4X?t$G$J$$\e(B
\e$B$b$N\e(B)} \e$B$NMWAG$G$"$k$3$H$,$G$-$^$9!#%G%#%U%)%k%H$G$O!"JB$SBX$($O5-;vHV9f\e(B
\e$B$K$h$C$F$J$5$l$^$9!#4{$K:n$i$l$F$$$kJB$SBX$(=R8l4X?t\e(B
-\e$B$O\e(B @code{gnus-thread-sort-by-number}, @code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject}, @code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score} \e$B$H\e(B @code{gnus-thread-sort-by-total-score} \e$B$G\e(B
-\e$B$9!#\e(B
+\e$B$O\e(B @code{gnus-thread-sort-by-number}\e$B!"\e(B@code{gnus-thread-sort-by-author}\e$B!"\e(B
+@code{gnus-thread-sort-by-subject}\e$B!"\e(B@code{gnus-thread-sort-by-date}\e$B!"\e(B
+@code{gnus-thread-sort-by-score}\e$B!"\e(B
+@code{gnus-thread-sort-by-most-recent-number}\e$B!"\e(B
+@code{gnus-thread-sort-by-most-recent-date} \e$B$*$h$S\e(B
+@code{gnus-thread-sort-by-total-score} \e$B$G$9!#\e(B
\e$B3F4X?t$OFs$D$N%9%l%C%I$r$H$j!":G=i$N%9%l%C%I$,B>$N%9%l%C%I$h$j@h$KJB$SBX\e(B
\e$B$($i$l$k$Y$-$G$"$l$P!"\e(B@code{nil} \e$B$G$J$$CM$r$+$($7$^$9!#IaDL!"JB$SBX$($O\e(B
* Article Hiding:: \e$BFCDj$N>pJs$O>C$75n$j$?$$$H$b;W$&\e(B
* Article Washing:: \e$B?M@8$r$b$C$H$h$/$9$k$?$/$5$s$N5$$NMx$$$?\e(B
\e$B4X?t\e(B
+* Article Header:: \e$B%X%C%@!<$r$$$m$$$mJQ7A$5$;$k\e(B
* Article Buttons:: URL \e$B$d\e(B Message-ID \e$B$d\e(B \e$B%"%I%l%9$J$I$r%/%j%C\e(B
\e$B%/$9$k\e(B
* Article Date:: \e$B$0$:$0$:8@$&$J!"@$3&;~$@\e(B!
@c @kindex W s (Summary)
@c @findex gnus-summary-force-verify-and-decrypt
@c Verify a signed (PGP, PGP/MIME or S/MIME) message
-@c (@code{gnus-summary-force-verify-and-decrypt}).
-
-@item W u
-@kindex W u (\e$B35N,\e(B)
-@findex gnus-article-treat-unfold-headers
-\e$B@^$jJV$5$l$?%X%C%@!<9T$r0l9T$K$7$^\e(B
-\e$B$9\e(B (@code{gnus-article-treat-unfold-headers})\e$B!#\e(B
-
-@item W n
-@kindex W n (\e$B35N,\e(B)
-@findex gnus-article-treat-fold-newsgroups
-@code{Newsgroups} \e$B$H\e(B @code{Followup-To} \e$B%X%C%@!<$r@^$jJV$7$^\e(B
-\e$B$9\e(B (@code{gnus-article-treat-fold-newsgroups})\e$B!#\e(B
+@c (@code{gnus-summary-force-verify-and-decrypt}). @xref{Security}.
@item W W H
@kindex W W H (\e$B35N,\e(B)
\e$B5-;v$N@vBu$r<+F0E*$K$9$k$?$a$NJ}K!$O\e(B @xref{Customizing Articles} \e$B$r;2>H\e(B
\e$B$7$F2<$5$$!#\e(B
+@node Article Header
+@subsection \e$B5-;v%X%C%@!<\e(B
+
+\e$B$3$l$i$N%3%^%s%I$O5-;v%X%C%@!<$r$$$m$$$mJQ7A$5$;$^$9!#\e(B
+
+@table @kbd
+@item W G u
+@kindex W G u (\e$B35N,\e(B)
+@findex gnus-article-treat-unfold-headers
+\e$B@^$jJV$5$l$?%X%C%@!<9T$r0l9T$K$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-treat-unfold-headers})\e$B!#\e(B
+
+@item W G n
+@kindex W G n (\e$B35N,\e(B)
+@findex gnus-article-treat-fold-newsgroups
+@code{Newsgroups} \e$B$H\e(B @code{Followup-To} \e$B%X%C%@!<$r@^$jJV$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-treat-fold-newsgroups})\e$B!#\e(B
+
+@item W G f
+@kindex W G f (\e$B35N,\e(B)
+@findex gnus-article-treat-fold-header
+\e$B$9$Y$F$N%a%C%;!<%8%X%C%@!<$r@^$jJV$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-treat-fold-headers})\e$B!#\e(B
+@end table
+
@node Article Buttons
@subsection \e$B5-;v$N%\%?%s\e(B
@cindex buttons
@item W D s
@kindex W D s (\e$B35N,\e(B)
-@findex gnus-article-toggle-smiley
-\e$B%9%^%$%j!<$NI=<($r%H%0%k$7$^$9\e(B (@code{gnus-article-toggle-smiley})\e$B!#\e(B
+@findex gnus-treat-smiley
+\e$B%9%^%$%j!<$rI=<($7$^$9\e(B (@code{gnus-treat-smiley})\e$B!#\e(B
@item W D f
@kindex W D f (\e$B35N,\e(B)
\e$B$9$Y$F$N%K%e!<%9%X%C%@!<\e(B (\e$B$9$J$o\e(B
\e$B$A\e(B @code{Newsgroups} \e$B$H\e(B @code{Followup-To}) \e$B$r\e(B Picon \e$B2=$7$^\e(B
\e$B$9\e(B (@code{gnus-treat-from-picon})\e$B!#\e(B
+
+@item W D D
+@kindex W D D (\e$B35N,\e(B)
+@findex gnus-article-remove-images
+\e$B5-;v%P%C%U%!$+$i$9$Y$F$N2hA|$r:o=|$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-remove-images})\e$B!#\e(B
@end table
@node Article Signature
@menu
* Summary Group Information:: \e$B>pJs;X8~$NL?Na\e(B
* Searching for Articles:: \e$BJ#?t5-;vL?Na\e(B
-* Summary Generation Commands::
+* Summary Generation Commands::
* Really Various Summary Commands:: \e$B$"$N$d$C$+$$$JB>$KE,9g$7$J$$L?Na\e(B
@end menu
@section Security
Gnus is able to verify signed messages or decrypt encrypted messages.
-The formats that are supported are PGP (plain text, RFC 1991 format),
-PGP/MIME (RFC 2015/3156) and S/MIME, however you need some external
-programs to get things to work:
+The formats that are supported are PGP, PGP/MIME and S/MIME, however
+you need some external programs to get things to work:
@enumerate
@item
-To verify or decrypt PGP messages, you have to install mailcrypt or
-gpg.el as well as a OpenPGP implementation (such as GnuPG). @xref{Using GPG}.
+To handle PGP messages, you have to install mailcrypt or gpg.el as
+well as a OpenPGP implementation (such as GnuPG).
@item
-To verify or decrypt S/MIME message, you need to install OpenSSL.
-OpenSSL 0.9.6 or newer is recommended.
+To handle S/MIME message, you need to install OpenSSL. OpenSSL 0.9.6
+or newer is recommended.
@end enumerate
More information on how to set things up can be found in the message
-manual. @xref{Security, ,Security, message, The Message Manual}.
+manual (@pxref{Security, ,Security, message, Message Manual}).
@table @code
@item mm-verify-option
@item mm-decrypt-option
@vindex mm-decrypt-option
Option of decrypting encrypted parts. @code{never}, no decryption;
-@code{always}, always decrypt @code{known}, only decrypt known
+@code{always}, always decrypt; @code{known}, only decrypt known
protocols. Otherwise, ask user.
@end table
@end ignore
@table @code
@item gnus-treat-buttonize (t, integer)
@item gnus-treat-buttonize-head (head)
+
+@xref{Article Buttons}.
+
@item gnus-treat-capitalize-sentences (t, integer)
+@item gnus-treat-overstrike (t, integer)
+@item gnus-treat-strip-cr (t, integer)
+@item gnus-treat-strip-headers-in-body (t, integer)
+@item gnus-treat-strip-leading-blank-lines (t, integer)
+@item gnus-treat-strip-multiple-blank-lines (t, integer)
+@item gnus-treat-strip-pem (t, last, integer)
+@item gnus-treat-strip-pgp (t, last, integer)
+@item gnus-treat-strip-trailing-blank-lines (t, last, integer)
+
+@xref{Article Washing}.
+
@item gnus-treat-date-english (head)
@item gnus-treat-date-iso8601 (head)
@item gnus-treat-date-lapsed (head)
@item gnus-treat-date-original (head)
@item gnus-treat-date-user-defined (head)
@item gnus-treat-date-ut (head)
-@item gnus-treat-display-picons (head)
+
+@xref{Article Date}.
+
+@item gnus-treat-from-picon (head)
+@item gnus-treat-mail-picon (head)
+@item gnus-treat-newsgroups-picon (head)
+
+@xref{Picons}.
+
@item gnus-treat-display-smileys (t, integer)
+
+@item gnus-treat-body-boundary (head)
+
+@vindex gnus-body-boundary-delimiter
+\e$B%X%C%@!<$HK\J8$N4V$K6-3&@~$rDI2C$7$^$9!#6-3&@~$K\e(B
+\e$B$O\e(B @code{gnus-body-boundary-delimiter} \e$B$K@_Dj$5$l$?J8;zNs$,;H$o$l$^$9!#\e(B
+
+@xref{Smileys}.
+
@item gnus-treat-display-xface (head)
+
+@xref{X-Face}.
+
@item gnus-treat-emphasize (t, head, integer)
@item gnus-treat-fill-article (t, integer)
@item gnus-treat-fill-long-lines (t, integer)
@item gnus-treat-hide-citation-maybe (t, integer)
@item gnus-treat-hide-headers (head)
@item gnus-treat-hide-signature (t, last)
+
+@xref{Article Hiding}.
+
@item gnus-treat-highlight-citation (t, integer)
@item gnus-treat-highlight-headers (head)
@item gnus-treat-highlight-signature (t, last, integer)
-@item gnus-treat-overstrike (t, integer)
+
+@xref{Article Highlighting}.
+
@item gnus-treat-play-sounds
-@item gnus-treat-strip-cr (t, integer)
-@item gnus-treat-strip-headers-in-body (t, integer)
-@item gnus-treat-strip-leading-blank-lines (t, integer)
-@item gnus-treat-strip-multiple-blank-lines (t, integer)
-@item gnus-treat-strip-pem (t, last, integer)
-@item gnus-treat-strip-pgp (t, last, integer)
-@item gnus-treat-strip-trailing-blank-lines (t, last, integer)
@item gnus-treat-translate
@item gnus-treat-x-pgp-sig (head)
-@item gnus-treat-from-picon (head)
-@item gnus-treat-mail-picon (head)
-@item gnus-treat-newsgroups-picon (head)
+
@item gnus-treat-unfold-headers (head)
+@item gnus-treat-fold-headers (head)
@item gnus-treat-fold-newsgroups (head)
-@item gnus-treat-body-boundary (head)
+
@item gnus-treat-decode-article-as-default-mime-charset
@end table
@kindex M-TAB (\e$B5-;v\e(B)
@findex gnus-article-prev-button
\e$B0l$DA0$N%\%?%s$,$"$l$P$=$3$K0\F0$7$^$9\e(B (@code{gnus-article-prev-button})\e$B!#\e(B
+
+@item R
+@kindex R (\e$B5-;v\e(B)
+@findex gnus-article-reply-with-original
+\e$B8=:_$N5-;v$KK\5-;v$r4^$s$@JVEz$N%a!<%k$rAw$j$^\e(B
+\e$B$9\e(B (@code{gnus-article-reply-with-original})\e$B!#@\F,<-$rM?$($k$H9-$$JV\e(B
+\e$BEz\e(B (wide reply) \e$B$K$J$j$^$9!#$b$7NN0h$,3h@-2=$5$l$F$$$?$J$i$P!"$=$NNN0h$K\e(B
+\e$B$"$k%F%-%9%H$@$1$r\e(B yank \e$B$7$^$9!#\e(B
+
+@item F
+@kindex F (\e$B5-;v\e(B)
+@findex gnus-article-followup-with-original
+\e$B8=:_$N5-;v$KK\5-;v$r4^$s$G%U%)%m!<%"%C%W$r$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-followup-with-original})\e$B!#@\F,<-$rM?$($k$H9-$$JV\e(B
+\e$BEz\e(B (wide reply) \e$B$K$J$j$^$9!#$b$7NN0h$,3h@-2=$5$l$F$$$?$J$i$P!"$=$NNN0h$K\e(B
+\e$B$"$k%F%-%9%H$@$1$r\e(B yank \e$B$7$^$9!#\e(B
@end table
@node Misc Article
@cindex followup
@cindex post
@c @cindex using gpg
+@c @cindex using s/mime
+@c @cindex using smime
@kindex C-c C-c (\e$BEj9F\e(B)
\e$BEj9F$N$?$a$NL?Na$r$9$k$H!"$"$J$?$O%a%C%;!<%8%P%C%U%!$K0\F0$7$^$9!#\e(B
\e$B$=$3$G$O!"5-;v$r9%$-$J$h$&$KJT=8$9$k;v$,$G$-$^$9!#\e(B
\e$B$=$N8e$G\e(B @kbd{C-c C-c} \e$B$r2!$9;v$K$h$C$F!"5-;v$rAw?.$7$^$9!#\e(B
-@xref{Top, , Top, message, The Message Manual}\e$B!#5-;v$O$"$J$?$N@_Dj$K\e(B
-\e$B4p$E$$$FAw?.$5$l$^$9\e(B (@pxref{Posting Server})\e$B!#\e(B
+@xref{Top, , Overview, message, Message Manual}\e$B!#5-;v$O$"$J$?$N@_Dj$K4p\e(B
+\e$B$E$$$FAw?.$5$l$^$9\e(B (@pxref{Posting Server})\e$B!#\e(B
@menu
* Mail:: \e$B%a!<%k$HJVEz\e(B
* Drafts:: \e$B%a%C%;!<%8$N1d4|$H5qH]$5$l$?%a%C%;!<%8\e(B
* Rejected Articles:: \e$B%5!<%P!<$,$"$J$?$N5-;v$r9%$-$G$J$$$H$-$K\e(B
\e$B2?$,5/$3$k\e(B?
-@c * Using GPG:: How to use GPG and MML to sign and encrypt messages
+@c * Signing and encrypting:: How to compose secure messages.
@end menu
\e$BEj9F$9$k$Y$-$G$J$+$C$?5-;v$r:o=|$9$k$?$a$N>pJs$O\e(B @pxref{Canceling and
\e$B$3$NJQ?t$O\e(B @code{gnus-message-archive-group} \e$B$NBe$o$j$K;H$&;v$,$G$-$^$9\e(B
\e$B$,!"8e<T$NJ}$,9%$^$7$$J}K!$G$9!#\e(B
-@item gnus-inews-mark-gcc-as-read
-@vindex gnus-inews-mark-gcc-as-read
+@item gnus-gcc-mark-as-read
+@vindex gnus-gcc-mark-as-read
\e$B$b$7Hs\e(B@code{nil}\e$B$J$i!"\e(B@code{Gcc} \e$B$N5-;v$K4{FI$N0u$rIU$1$^$9!#\e(B
@end table
\e$B$j$^$9!#\e(B
@ignore
-@node Using GPG
-@section Using GPG
+@node Signing and encrypting
+@section Signing and encrypting
@cindex using gpg
+@cindex using s/mime
+@cindex using smime
-Gnus has an ALPHA support to GPG that's provided by @file{gpg.el}. See
-@code{mm-verify-option} and @code{mm-decrypt-option} to enable Gnus to
-verify or decrypt messages accordingly.
+Gnus can digitally sign and encrypt your messages, using vanilla PGP
+format or PGP/MIME or S/MIME. For decoding such messages, see the
+@code{mm-verify-option} and @code{mm-decrypt-option} options
+(@pxref{Security}).
-To use this correctly with GPG, you'll need the following lisp code in your
-@file{~/.emacs} or @file{~/.gnus}:
+For PGP, Gnus supports two external libraries, @sc{gpg.el} and
+@sc{Mailcrypt}, you need to install at least one of them. The S/MIME
+support in Gnus requires the external program OpenSSL.
-@lisp
-(require 'gpg)
-(setq mml2015-use 'gpg)
-(setq mml1991-use 'gpg)
-(setq gpg-temp-directory (expand-file-name "~/.gnupg/tmp"))
-@end lisp
+Instructing MML to perform security operations on a MIME part is done
+using the @code{C-c C-m s} key map for signing and the @code{C-c C-m
+c} key map for encryption, as follows.
+
+@table @kbd
+
+@item C-c C-m s s
+@kindex C-c C-m s s
+@findex mml-secure-sign-smime
+
+Digitally sign current MIME part using S/MIME.
-The @code{gpg-temp-directory} need to point to a directory with permissions set
-to 700, for your own safety.
+@item C-c C-m s o
+@kindex C-c C-m s o
+@findex mml-secure-sign-pgp
-To sign or encrypt your message you may choose to use the MML Security
-menu or @kbd{C-c C-m s p} to sign your message using PGP/MIME,
-@kbd{C-c C-m s s} to sign your message using S/MIME. There's also
-@kbd{C-c C-m c p} to encrypt your message with PGP/MIME and @kbd{C-c
-C-m c s} to encrypt using S/MIME. @xref{Security, ,Security, message,
-The Message Manual}.
+Digitally sign current MIME part using PGP.
+
+@item C-c C-m s p
+@kindex C-c C-m s p
+@findex mml-secure-sign-pgp
+
+Digitally sign current MIME part using PGP/MIME.
+
+@item C-c C-m c s
+@kindex C-c C-m c s
+@findex mml-secure-encrypt-smime
+
+Digitally encrypt current MIME part using S/MIME.
+
+@item C-c C-m c o
+@kindex C-c C-m c o
+@findex mml-secure-encrypt-pgp
+
+Digitally encrypt current MIME part using PGP.
+
+@item C-c C-m c p
+@kindex C-c C-m c p
+@findex mml-secure-encrypt-pgpmime
+
+Digitally encrypt current MIME part using PGP/MIME.
+
+@end table
-Gnus will ask for your passphrase and then it will send your message, if
-you've typed it correctly.
+Also @xref{Security, ,Security, message, Message Manual}.
@end ignore
@node Select Methods
* Not Reading Mail:: \e$BB>$N%U%!%$%k$rFI$`$?$a$K%a!<%k%P%C%/%(\e(B
\e$B%s%I$r;H$&\e(B
* Choosing a Mail Back End:: Gnus \e$B$O?'!9$J%a!<%kMM<0$rFI$`;v$,$G$-$k\e(B
-* Archiving Mail:: \e$B%a!<%k$r%P%C%/%"%C%W$9$k$K$O\e(B
@end menu
@node Mail in a Newsreader
\e$B$^$9!#\e(B
@menu
+* Archiving Mail::
* Web Searches:: \e$BJ8;zNs$K%^%C%A$9$k5-;v$+$i%0%k!<%W$r:n$k\e(B
* Slashdot:: Slashdot \e$B$N%3%a%s%H$rFI$`\e(B
* Ultimate:: Ultimate Bulletin Board \e$B%7%9%F%`\e(B
@sc{imap} \e$B$K$OFs$D$NFC<A$,$"$j$^$9!#0l$D$O!"\e(B@sc{imap} \e$B$O\e(B POP \e$B$G$G$-$k$3\e(B
\e$B$H$OA4It$G$-$k!"$=$l$f$(\e(B POP++ \e$B$N$h$&$K$b8+$($k$H$$$&$3$H!#Fs$DL\$O!"\e(B
@sc{imap} \e$B$O\e(B @sc{nntp} \e$B$,%K%e!<%9$rCyB"$9$k%W%m%H%3%k$G$"$k$h$&$K!"%a!<\e(B
-\e$B%k$rCyB"$9$k%W%m%H%3%k$G$"$k$H$$$&$3$H$G$9!#\e(B(@sc{imap} \e$B$O\e(B @sc{nntp} \e$B$h$j\e(B
-\e$BB?$/$N5!G=$rDs6!$7$^$9!#%K%e!<%9$OFI$`$@$1$G$9$,!"%a!<%k$OFI$_=q$-$,$G$-\e(B
-\e$B$^$9!#\e(B)
-
-@sc{imap} \e$B$r\e(B POP++ \e$B$N$h$&$K;H$$$?$$$H$-$O!"%a!<%k%=!<%9$K\e(B imap \e$B$rEPO?$7\e(B
-\e$B$F2<$5$$!#$3$l$K$h$C$F\e(B gnus \e$B$O\e(B @sc{imap} \e$B%5!<%P!<$+$i%a!<%k$r<h$j9~$s$G!"\e(B
-\e$B%m!<%+%k%G%#%9%/$KCyB"$7$^$9!#$3$3$G$O$=$N;H$$J}$N@bL@$O$7$^$;$s$N$G!"\e(B
+\e$B%k$rCyB"$9$k%W%m%H%3%k$G$"$k$H$$$&$3$H$G$9!#$7$+$7$J$,\e(B
+\e$B$i\e(B @sc{imap} \e$B$O\e(B @sc{nntp} \e$B$h$jB?$/$N5!G=$rDs6!$7$^$9!#%K%e!<%9$OFI$`$@$1\e(B
+\e$B$G$9$,!"%a!<%k$OFI$_=q$-$,$G$-$^$9!#\e(B
+
+@sc{imap} \e$B$r\e(B POP++ \e$B$N$h$&$K;H$$$?$$$H$-$O!"\e(B
+@code{mail-sources} \e$B$K\e(B imap \e$B$rEPO?$7$F2<$5$$!#$3$l$K$h$C\e(B
+\e$B$F\e(B gnus \e$B$O\e(B @sc{imap} \e$B%5!<%P!<$+$i%a!<%k$r<h$j9~$s$G!"%m!<%+%k%G%#%9%/$K\e(B
+\e$BCyB"$7$^$9!#$3$3$G$O$=$N;H$$J}$N@bL@$O$7$^$;$s$N$G!"\e(B
@xref{Mail Sources} \e$B$r;2>H$7$F2<$5$$!#\e(B
@sc{imap} \e$B$r%a!<%k$rCyB"$9$k%W%m%H%3%k$H$7$F;H$$$?$$$H$-$O!"\e(B
-gnus-secondary-select-methods \e$B$K\e(B nnimap \e$B$rEPO?$7$F2<$5$$!#$3$l$K$h$C\e(B
-\e$B$F\e(B gnus \e$B$O\e(B @sc{imap} \e$B%5!<%P!<$KCyB"$5$l$F$$$k%a!<%k$rA`:n$9$k$h$&$K$J$j\e(B
-\e$B$^$9!#$3$l$,$3$3$G@bL@$9$k;H$$J}$G$9!#\e(B
+@code{gnus-secondary-select-methods} \e$B$K\e(B nnimap \e$B$rEPO?$7$F2<$5$$!#$3$l$K\e(B
+\e$B$h$C$F\e(B gnus \e$B$O\e(B @sc{imap} \e$B%5!<%P!<$KCyB"$5$l$F$$$k%a!<%k$rA`:n$9$k$h$&$K\e(B
+\e$B$J$j$^$9!#$3$l$,$3$3$G@bL@$9$k;H$$J}$G$9!#\e(B
-\e$B$$$/$D$+$N\e(B @sc{imap} \e$B%5!<%P!<$r\e(B @code{~/.gnus} \e$B$G@_Dj$9$k$H!"$?$V$s$3$N\e(B
-\e$B$h$&$J$b$N$K$J$k$G$7$g$&\e(B:
+\e$B$$$/$D$+$N\e(B @sc{imap} \e$B%5!<%P!<$r\e(B @code{~/.gnus} \e$B$G@_Dj$9$k$H!"$?$V$s0J2<\e(B
+\e$B$N$h$&$J$b$N$K$J$k$G$7$g$&!#\e(B(\e$BCm\e(B: SSL/TLS \e$B$G$O30It%W%m%0%i%`$H%i%$%V%i%j\e(B
+\e$B$,I,MW$G$9!#0J2<$r;2>H$7$F2<$5$$!#\e(B)
@lisp
(setq gnus-secondary-select-methods
(nnimap-stream ssl))))
@end lisp
-(SSL/TLS \e$B$r;H$&$K$O30It%i%$%V%i%j\e(B @samp{ssl.el} \e$B$,I,MW$G$9!#0J2<$r;2>H$7\e(B
-\e$B$F2<$5$$!#\e(B)
-
\e$B0J2<$NJQ?t$O2>A[\e(B @code{nnimap} \e$B%5!<%P!<$r:n@.$9$k$?$a$K;H$&$3$H$,$G$-$^\e(B
\e$B$9!#\e(B
@itemize @bullet
@item
-@dfn{gssapi:} GSSAPI (\e$BIaDL$O\e(B kerberos 5) \e$B$r;H$$$^$9!#\e(B@samp{imtest} \e$B%W%m\e(B
+@dfn{gssapi:} GSSAPI (\e$BIaDL$O\e(B Kerberos 5) \e$B$r;H$$$^$9!#\e(B@samp{imtest} \e$B%W%m\e(B
\e$B%0%i%`$,I,MW$G$9!#\e(B
@item
-@dfn{kerberos4:} kerberos 4 \e$B$r;H$$$^$9!#\e(B@samp{imtest} \e$B%W%m%0%i%`$,I,MW$G\e(B
+@dfn{kerberos4:} Kerberos 4 \e$B$r;H$$$^$9!#\e(B@samp{imtest} \e$B%W%m%0%i%`$,I,MW$G\e(B
\e$B$9!#\e(B
@item
@dfn{starttls:} STARTTLS (SSL \e$B$KN`;w\e(B) \e$B$r;H$$$^$9!#30It%i%$%V%i\e(B
@itemize @bullet
@item
-@dfn{gssapi:} GSSAPI (\e$BIaDL$O\e(B kerberos 5) \e$BG'>Z$G$9!#30It%W%m%0%i\e(B
+@dfn{gssapi:} GSSAPI (\e$BIaDL$O\e(B Kerberos 5) \e$BG'>Z$G$9!#30It%W%m%0%i\e(B
\e$B%`\e(B @code{imtest} \e$B$,I,MW$G$9!#\e(B
@item
-@dfn{kerberos4:} Kerberos \e$BG'>Z$G$9!#30It%W%m%0%i%`\e(B @code{imtest} \e$B$,I,MW\e(B
-\e$B$G$9!#\e(B
+@dfn{kerberos4:} Kerberos 4 \e$B$K$h$kG'>Z$G$9!#30It%W%m%0%i\e(B
+\e$B%`\e(B @code{imtest} \e$B$,I,MW$G$9!#\e(B
@item
@dfn{digest-md5:} DIGEST-MD5 \e$B$G0E9f2=$5$l$?\e(B \e$BMxMQ<TL>\e(B/\e$B%Q%9%o!<%I\e(B \e$B$G$9!#30\e(B
\e$BIt%i%$%V%i%j\e(B @code{digest-md5.el} \e$B$,I,MW$G$9!#\e(B
\e$B$3$N$h$&$J>l9g$O!"%a%C%;!<%8%P%C%U%!$G$N\e(B @kbd{C-c C-n} \e$B$,1~Ez$7$h$&$H$7\e(B
\e$B$F$$$k5-;v$+$i\e(B @code{Newsgroups} \e$B9T$rH4$-=P$7$FA^F~$7$^$9!#\e(B
+@code{nnvirtual} \e$B%0%k!<%W$O!"9=@.%0%k!<%W$+$i5-;v$H0u0J30$O7Q>5$7$^$;$s!#\e(B
+\e$BNc$($P%0%k!<%W%Q%i%a!<%?$b$=$&$J$N$G$9$,!"$=$l$i$O7Q>5$5$l$^$;$s!#\e(B
+
@node Kibozed Groups
@subsection Kiboze \e$B%0%k!<%W\e(B
@cindex nnkiboze
\e$B$GF0:n$7!"\e(Bgnus \e$B%(!<%8%'%s%H$N@Z$jN%$7\e(B/\e$B:9$79~$_>uBV$r@Z$jBX$($^$9!#\e(B
@menu
-* Group Agent Commands::
-* Summary Agent Commands::
-* Server Agent Commands::
+* Group Agent Commands::
+* Summary Agent Commands::
+* Server Agent Commands::
@end menu
\e$B40A4$J0l3g<hF@$r9T$&$K$O!"%3%^%s%I9T$+$i0J2<$N$*$^$8$J$$$r\e(B
\e$BE*$G$b$J$/!"0lC6;O$a$F$7$^$C$?$i\e(B (@kbd{C-g} \e$B$d$=$NB>$G\e(B) \e$BCfCG$9$k$3$H$b$"\e(B
\e$B$^$jNI$$$3$H$G$O$"$j$^$;$s!#\e(B
+@code{gnus-agent-expire-days} \e$B$O@55,I=8=\e(B/\e$BF|?t$N%Z%"$N%j%9%H$G$"$C$F$b9=\e(B
+\e$B$$$^$;$s!#@55,I=8=$O%0%k!<%WL>$K%^%C%A$7!"0[$J$k%0%k!<%W$G0[$J$k4|8B@Z$l\e(B
+\e$B>C5n$r9T$J$&$3$H$r2DG=$K$7$^$9!#\e(B
+
+@lisp
+(setq gnus-agent-expire-days
+ '(("alt\\." 7)
+ (".*binary" 1)
+ ("." 21)))
+@end lisp
+
+\e$B$b$7%j%9%H$N7A<0$r;H$&>l9g$O!":G8e$NMWAG$O%G%#%U%)%k%H$N%a%=%C%I!"$9$J$o\e(B
+\e$B$A$9$Y$F$N%0%k!<%W$K%^%C%A$9$k$b$N$K$7$J$1$l$P$J$j$^$;$s!#\e(B
+
@vindex gnus-agent-expire-all
@code{gnus-agent-expire-all} \e$B$,\e(B @code{nil} \e$B$G$J$1$l$P!"$3$NL?Na$OA4$F$N\e(B
\e$B5-;v\e(B --- \e$BL$FI!"4{FI!"2D;k!"J]N15-;v$r>C5n$7$^$9!#$b$7\e(B @code{nil} (\e$B$3$l$,\e(B
@item gnus-agent-unplugged-hook
@vindex gnus-agent-unplugged-hook
\e$B%M%C%H%o!<%/$+$i@ZCG$5$l$?$H$-$K<B9T$5$l$k%U%C%/!#\e(B
+
+@item gnus-agent-fetched-hook
+@vindex gnus-agent-fetched-hook
+\e$B5-;v$r<h$j9~$_=*$o$C$?$H$-$K<B9T$5$l$k%U%C%/!#\e(B
@end table
@node Example Setup
@item gnus-update-score-entry-dates
@vindex gnus-update-score-entry-dates
-\e$B$3$NJQ?t$,\e(B @code{nil} \e$B$G$J$$$H!"9gCW$9$k%9%3%"EPO?$OF|IU$,99?7$5$l$^$9!#\e(B
-(\e$B$3$l$O\e(B gnus \e$B$,4|8B@Z$l>C5n$rA`:n$7$F$$$kJ}K!$G$9\e(B---\e$BA4$F$N9gCW$7$J$$EPO?\e(B
-\e$B$O8E$/$J$j$9$.!"9gCW$9$kEPO?$r?7A/$G<c$$$^$^$G$9!#\e(B) \e$B$7$+$7!"$3$NJQ?t\e(B
-\e$B$r\e(B @code{nil} \e$B$K@_Dj$9$k$H!"9gCW$9$kEPO?$G$5$($b8E$/$J$j!"$"$N7y$J;`?@$H\e(B
-\e$BD>LL$9$k;v$K$J$k$G$7$g$&!#\e(B
+\e$B$3$NJQ?t$,\e(B @code{nil} \e$B$G$J$$$H!"0l;~E*$K9gCW$7$?%9%3%"EPO?$OF|IU$,99?7$5\e(B
+\e$B$l$^$9!#\e(B(\e$B$3$l$O\e(B gnus \e$B$,4|8B@Z$l>C5n$rA`:n$7$F$$$kJ}K!$G$9\e(B---\e$BA4$F$N9gCW$7\e(B
+\e$B$J$$EPO?$O8E$/$J$j$9$.!"9gCW$9$kEPO?$r?7A/$G<c$$$^$^$G$9!#\e(B) \e$B$7$+$7!"$3$N\e(B
+\e$BJQ?t$r\e(B @code{nil} \e$B$K@_Dj$9$k$H!"9gCW$9$kEPO?$G$5$($b8E$/$J$j!"$"$N7y$J;`\e(B
+\e$B?@$HD>LL$9$k;v$K$J$k$G$7$g$&!#\e(B
@item gnus-score-after-write-file-function
@vindex gnus-score-after-write-file-function
\e$B$-$k\e(B
* NoCeM:: Spam \e$B$dB>$NB@$j$d$9$$?);v$rHr$1$kJ}K!\e(B
* Undo:: \e$B$$$/$D$+$NF0:n$O85$KLa$9;v$,$G$-$k\e(B
+* Predicate Specifiers:: \e$B=R8l$r@_Dj$9$k\e(B
* Moderation:: \e$B$"$J$?$,%b%G%l!<%?!<$@$C$?$i$I$&$9$k$+\e(B
* Image Enhancements:: \e$B:G?7$N\e(B Emacs/XEmacs \e$B$O3($rI=<($G$-$k\e(B
* Fuzzy Matching:: \e$BBg$-$JLJLS$C$F2?\e(B?
@item form
@samp{@@} \e$B;XDj$,;H$o$l$?$H$-$K!";XDj$5$l$?<0$rNN0h$NCM$H$7$F;H$$$^$9!#\e(B
+
+\e$B$3$l$ONc$G$9\e(B:
+
+@lisp
+"~(form (current-time-string))@@"
+@end lisp
@end table
\e$BNc$r=P$7$F$_$^$7$g$&!#35N,%b!<%I9T$G$N\e(B @samp{%o} \e$B;XDj$O>.7?$N\e(B ISO0861 \e$BMM\e(B
\e$B4|@_Dj$G$9!#\e(B@kbd{C-M-_} \e$B%-!<$,\e(B @code{gnus-undo} \e$BL?Na$r<B9T$7$^$9!#$3$l$O\e(B
\e$BDL>o$N\e(B Emacs \e$B$N\e(B @code{undo} \e$BL?Na$K$A$g$C$H$@$1;w$F$$$k$H;W$o$l$k$G$7$g$&!#\e(B
+@node Predicate Specifiers
+@section \e$B=R8l$N@_Dj\e(B
+@cindex predicate specifiers
+
+\e$B$$$/$D$+$N\e(B gnus \e$B$NJQ?t\e(B
+\e$B$O\e(B @dfn{\e$B=R8l;X<(;R\e(B} (@dfn{predicate specifiers}) \e$B$G$9!#$3$l$O=R8l$N;EMM\e(B
+\e$B$KM;DL$r8z$+$;$k$3$H$,$G$-$kFCJL$J7A<0$G$9!#\e(B
+
+\e$B$3$l$i$N;X<(;R$O4X?t$K$h$k%j%9%H!"%7%s%\%k$^$?$O%j%9%H$G$9!#\e(B
+
+\e$B$3$l$ONc$G$9\e(B:
+
+@lisp
+(or gnus-article-unseen-p
+ gnus-article-unread-p)
+@end lisp
+
+\e$BMxMQ$G$-$k%7%s%\%k$O\e(B @code{or}\e$B!"\e(B@code{and} \e$B$*$h$S\e(B @code{not} \e$B$G$9!#4X?t\e(B
+\e$B$O$9$Y$F0l$D$N%Q%i%a!<%?$r<u$1<h$j$^$9!#\e(B
+
+@findex gnus-make-predicate
+\e$BFbItE*$K!"\e(Bgnus \e$B$O8F$V$3$H$,$G$-$k4X?t$r:n$k$?$a$K!"$3$l$i$N;X<(;R$K$D$$\e(B
+\e$B$F\e(B @code{gnus-make-predicate} \e$B$r;H$$$^$9!#$3$N4X?t$X$N$3$NF~NO%Q%i%a!<%?\e(B
+\e$B$O!"=R8l;X<(;R$N$9$Y$F$N4X?t$KEO$5$l$^$9!#\e(B
+
@node Moderation
@section \e$B;J2qLr\e(B
@cindex moderation
gnus \e$B$O$3$l$rMxMQ$9$k$3$H$K$7$^$9!#\e(B
@menu
-* Picons:: \e$B$"$J$?$,FI$s$G$$$k$b$N$N3($rI=<($9$kJ}K!\e(B
-* Smileys:: \e$BI=<($5$l$k$Y$/@8$^$l$?9,$;$=$&$J4i$rI=<($9$kJ}K!\e(B
-* X-Face:: \e$B%U%!%s%-!<$J$A$C$A$c$JGr9u$N3($rI=<($9$k\e(B
-* Toolbar:: \e$B%/%j%C%/1n\e(B
-* XVarious:: \e$B$=$NB>$N\e(B XEmacs \e$B$G\e(B Gnus \e$B$JJQ?t\e(B
+* Picons:: \e$B$"$J$?$,FI$s$G$$$k$b$N$N3($rI=<($9$kJ}K!\e(B
+* Smileys:: \e$BI=<($5$l$k$Y$/@8$^$l$?9,$;$=$&$J4i$rI=<(\e(B
+ \e$B$9$kJ}K!\e(B
+* X-Face:: \e$B%U%!%s%-!<$J$A$C$A$c$JGr9u$N3($rI=<($9$k\e(B
+* Toolbar:: \e$B%/%j%C%/1n\e(B
+* XVarious:: \e$B$=$NB>$N\e(B XEmacs \e$B$G\e(B Gnus \e$B$JJQ?t\e(B
@end menu
@node Picons
@cindex x-face
@code{X-Face} \e$B%X%C%@!<$O!"%a%C%;!<%8$NCx<T$rI=$o$9$3$H$K$J$C$F$$$k\e(B 48\e$B!_\e(B
-48 \e$B2hAG$NGr9u$N3($rIA$-$^$9!#$3$l$O?J2=$7B3$1$k$"$^$?$N%a!<%k$H%K%e!<%9\e(B
-\e$B%j!<%@!<$K$h$C$F%5%]!<%H$5$l$k$G$7$g$&!#\e(B
+48 \e$B2hAG$NGr9u\e(B (1 bit \e$B$N?<$5\e(B) \e$B$N3($rIA$-$^$9!#$3$l$O?J2=$7B3$1$k$"$^$?$N\e(B
+\e$B%a!<%k$H%K%e!<%9%j!<%@!<$K$h$C$F%5%]!<%H$5$l$k$G$7$g$&!#\e(B
@cindex x-face
@findex gnus-article-display-x-face
(\e$BCm\e(B: \e$BJQ?t\e(B/\e$B4X?tL>$K$O\e(B @code{xface} \e$B$G$O$J$/\e(B @code{x-face} \e$B$,;H$o$l$^$9!#\e(B)
+gnus \e$B$O!"30$K=P$9%a%C%;!<%8$K\e(B X-Face \e$B%X%C%@!<$r4JC1$KA^F~$9$k$?$a$N!"JX\e(B
+\e$BMx$J4X?t$HJQ?t$r>/$7$P$+$jDs6!$7$^$9!#\e(B
+
+@findex gnus-random-x-face
+@code{gnus-random-x-face} \e$B$O\e(B @code{gnus-x-face-directory} \e$B$K$"$k$9$Y$F\e(B
+\e$B$N\e(B @samp{pbm} \e$B$r$/$^$J$/C5$7$F%i%s%@%`$K0l$D$rA*$S<h$j!"%7%'%k%3%^%s\e(B
+\e$B%I\e(B @code{gnus-convert-pbm-to-x-face-command} \e$B$r;H$C$F$=$l$r\e(B X-Face \e$B$N7A\e(B
+\e$B<0$KJQ49$7$^$9!#\e(B@samp{pbm} \e$B%U%!%$%k$O\e(B 48\e$B!_\e(B48 \e$B2hAG$NBg$-$5$G$J$1$l$P$J$j\e(B
+\e$B$^$;$s!#\e(B
+
+@code{gnus-x-face-from-file} \e$B$O%Q%i%a!<%?$H$7$F%U%!%$%k$r<u$1<h$j!"%7%'\e(B
+\e$B%k%3%^%s%I\e(B @code{gnus-convert-image-to-x-face-command} \e$B$r;H$C$F$=$N%U%!\e(B
+\e$B%$%k$r\e(B X-Face \e$B$N7A<0$KJQ49$7$^$9!#\e(B
+
+\e$BA0<T$O0lHLE*$K;H$&$G$"$m$&4X?t$G$9!#0J2<$N$h$&$J$b$N\e(B
+\e$B$r\e(B @file{.gnus.el} \e$B%U%!%$%k$K=q$$$F2<$5$$\e(B:
+
+@lisp
+(setq message-required-news-headers
+ (nconc message-required-news-headers
+ (list '(X-Face . gnus-random-x-face))))
+@end lisp
+
+\e$B8e<T$N4X?t$r;H$&$N$O!"$3$N$h$&$K$J$k$G$7$g$&\e(B:
+
+@lisp
+(setq message-required-news-headers
+ (nconc message-required-news-headers
+ (list '(X-Face . (lambda ()
+ (gnus-x-face-from-file
+ "~/My-face.gif"))))))
+@end lisp
+
@node Toolbar
@subsection \e$B%D!<%k%P!<\e(B
@node Gnus Versions
@subsection Gnus Versions
-@cindex Pterodactyl Gnus
@cindex ding Gnus
@cindex September Gnus
+@cindex Red Gnus
@cindex Quassia Gnus
+@cindex Pterodactyl Gnus
+@cindex Oort Gnus
+@cindex No Gnus
\e$B:G=i$N\e(B ``\e$BE,@Z$J\e(B'' Gnus 5 \e$B$N%j%j!<%9$O\e(B 1995\e$BG/\e(B11\e$B7n$K\e(B Emacs 19.30 \e$B$NG[I[$K\e(B
\e$B4^$^$l$?$H$-$K$J$5$l$^$7$?\e(B (132 \e$B$N\e(B (ding) Gnus \e$B$N%j%j!<%9\e(B \e$BB-$9$3$H\e(B
\e$B$^$9$,!#\e(B
@table @strong
-@item RFC 822
+@item RFC (2)822
@cindex RFC 822
+@cindex RFC 2822
\e$B$3$NI8=`$X$NCN$i$l$F$$$k0cH?$O$"$j$^$;$s!#\e(B
@item RFC 1036
\e$B$m$$$m$JJQ99$rDs0F$7$?\e(B draft \e$B$r:n@.$7$^$7$?!#\e(BGnus \e$B%?%o!<\e(B
\e$B$O\e(B draft \e$B$,\e(B RFC \e$B$H$7$FG'$a$i$l$?$H$-$KJQ99$N<BAu$rD4$Y$k$3$H$K$J$k$G$7$g\e(B
\e$B$&!#\e(B
+
+@item MIME - RFC 2045-2049 etc
+@cindex MIME
+MIME \e$B4XO"$N$9$Y$F$N\e(B RFC \e$B$,%5%]!<%H$5$l$F$$$^$9!#\e(B
+
+@item Disposition Notifications - RFC 2289
+Message Mode \e$B$O<u?.<T$K3+Iu3NG'$rMW5a$9$k$3$H$,$G$-$^$9!#\e(B
+
+@ignore
+@item PGP - RFC 1991 and RFC 2440
+@cindex RFC 1991
+@cindex RFC 2440
+RFC 1991 is the original PGP message specification, published as a
+Information RFC. RFC 2440 was the follow-up, now called Open PGP, and
+put on the Standards Track. Both document a non-MIME aware PGP
+format. Gnus supports both encoding (signing and encryption) and
+decoding (verification and decryption).
+
+@item PGP/MIME - RFC 2015/3156
+RFC 2015 (superceded by 3156 which references RFC 2440 instead of RFC
+1991) describes the MIME-wrapping around the RF 1991/2440 format.
+Gnus supports both encoding and decoding.
+
+@item S/MIME - RFC 2633
+RFC 2633 describes the S/MIME format.
+
+@end ignore
+@item IMAP - RFC 1730/2060, RFC 2195, RFC 2086, RFC 2359, RFC 2595, RFC 1731
+RFC 1730 \e$B$O\e(B IMAP \e$B%P!<%8%g%s\e(B 4 \e$B$G!"\e(BRFC 2060 (IMAP 4 \e$B2~Dj\e(B 1) \e$B$GB?>/99?7$5\e(B
+\e$B$l$F$$$^$9!#\e(BRFC 2195 \e$B$O\e(B IMAP \e$B$N\e(B CRAM-MD5 \e$BG'>Z$K$D$$$F=R$Y$F$$$^$9!#\e(BRFC
+2086 \e$B$O\e(B IMAP \e$B$N;HMQ@)8B0lMw\e(B (ACL) \e$B$K$D$$$F=R$Y$F$$$^$9!#\e(BRFC
+2359 \e$B$O\e(B IMAP \e$B$N%W%m%H%3%k$N3HD%$K$D$$$F=R$Y$F$$$^$9!#\e(BRFC 2595 \e$B$O\e(B IMAP \e$B$K\e(B
+\e$B$*$1$kE,@Z$J\e(B TLS \e$B$NE}9g\e(B (STARTTLS) \e$B$K$D$$$F=R$Y$F$$$^$9!#\e(BRFC
+1731 \e$B$O\e(B IMAP \e$B$N\e(B GSSAPI/Kerberos4 \e$B$N<jK!$K$D$$$F=R$Y$F$$$^$9!#\e(B
@end table
\e$B>e$K=q$+$l$F$$$kJ8>O$K4X$9$k;v$G!"\e(BGnus \e$B$,$=$l$rK~$?$7$F$$$J$$$h$&$JF0:n\e(B
\e$B$3$l$,\e(B @code{nil} \e$B$G$J$1$l$P!"A4$F$N35N,%P%C%U%!$N%9%l%C%I$O=i$a$K1#$5$l\e(B
\e$B$^$9!#\e(B
+\e$B$3$l$O=R8l;X<(;R$G$"$k$3$H$b$G$-$^$9\e(B (@pxref{Predicate Specifiers})\e$B!#Mx\e(B
+\e$BMQ$G$-$k=R8l\e(B
+\e$B$O\e(B @code{gnus-article-unread-p} \e$B$H\e(B @code{gnus-article-unseen-p} \e$B$G$9!#\e(B
+
+\e$B$3$l$ONc$G$9\e(B:
+
+@lisp
+(setq gnus-thread-hide-subtree
+ '(or gnus-article-unread-p
+ gnus-article-unseen-p))
+@end lisp
+
+(\e$B$3$l$O$+$J$j$P$+$2$?Nc$G$9!#$J$<$J$i$9$Y$F$N$^$@FI$^$l$?$3$H$,L5$$5-;v\e(B
+\e$B$OL$FI$G$b$"$k$+$i$J$N$G$9$,!"<g;]$O5b$_<h$C$F2<$5$$!#\e(B)
+
@item gnus-updated-mode-lines
\e$B$3$l$,\e(B @code{nil} \e$B$G$"$k$H!"\e(Bgnus \e$B$O%P%C%U%!$N%b!<%I9T$K>pJs$rF~$l$^$;$s\e(B
\e$B$N$G!";~4V$r@aLs$G$-$k$G$7$g$&!#\e(B
@cindex @code{nnchoke}
@menu
-* Required Back End Functions:: \e$B<BAu$7$J$1$l$P$J$i$J$$4X?t\e(B
-* Optional Back End Functions:: \e$B<BAu$7$J$/$F$b$h$$4X?t\e(B
+* Required Back End Functions:: \e$B<BAu$7$J$1$l$P$J$i$J$$4X?t\e(B
+* Optional Back End Functions:: \e$B<BAu$7$J$/$F$b$h$$4X?t\e(B
* Error Messaging:: \e$B%a%C%;!<%8$d%(%i!<Js9p$rF@$kJ}K!\e(B
* Writing New Back Ends:: \e$B8E$$%P%C%/%(%s%I$N3HD%\e(B
* Hooking New Back Ends Into Gnus:: Gnus \e$BB&$G$7$J$1$l$P$J$i$J$$$3$H\e(B
\ifx\pdfoutput\undefined
\else
-\usepackage[pdftex,bookmarks]{hyperref}
+\usepackage[pdftex,bookmarks,colorlinks=true]{hyperref}
+\usepackage{thumbpdf}
\pdfcompresslevel=9
\fi
\makeindex
\begin{document}
-\newcommand{\gnusversionname}{Oort Gnus v.}
+\newcommand{\gnusversionname}{Oort Gnus v0.05}
\newcommand{\gnuschaptername}{}
\newcommand{\gnussectionname}{}
Group Topics
-* Topic Variables:: How to customize the topics the Lisp Way.
* Topic Commands:: Interactive E-Z commands.
+* Topic Variables:: How to customize the topics the Lisp Way.
* Topic Sorting:: Sorting each topic individually.
* Topic Topology:: A map of the world.
* Topic Parameters:: Parameters that apply to all groups in a topic.
* Choosing Articles:: Reading articles.
* Paging the Article:: Scrolling the current article.
* Reply Followup and Post:: Posting articles.
-* Delayed Articles::
+* Delayed Articles::
* Marking Articles:: Marking articles as read, expirable, etc.
* Limiting:: You can limit the summary buffer.
* Threading:: How threads are made.
* Summary Mail Commands:: Sending mail.
* Summary Post Commands:: Sending news.
* Summary Message Commands:: Other Message-related commands.
-* Canceling and Superseding::
+* Canceling and Superseding::
Marking Articles
* Unread Articles:: Marks for unread articles.
* Read Articles:: Marks for read articles.
* Other Marks:: Marks that do not affect readedness.
-* Setting Marks::
-* Generic Marking Commands::
-* Setting Process Marks::
+* Setting Marks::
+* Generic Marking Commands::
+* Setting Process Marks::
Marking Articles
* Article Fontisizing:: Making emphasized text look nice.
* Article Hiding:: You also want to make certain info go away.
* Article Washing:: Lots of way-neat functions to make life better.
+* Article Header:: Doing various header transformations.
* Article Buttons:: Click on URLs, Message-IDs, addresses and the like.
* Article Date:: Grumble, UT!
+* Article Display:: Display various stuff---X-Face, Picons, Smileys
* Article Signature:: What is a signature?
* Article Miscellania:: Various other stuff.
* Summary Group Information:: Information oriented commands.
* Searching for Articles:: Multiple article commands.
-* Summary Generation Commands::
+* Summary Generation Commands::
* Really Various Summary Commands:: Those pesky non-conformant commands.
Article Buffer
* Posting Styles:: An easier way to specify who you are.
* Drafts:: Postponing messages and rejected messages.
* Rejected Articles:: What happens if the server doesn't like your article?
-* Using GPG:: How to use GPG and MML to sign and encrypt messages
+* Signing and encrypting:: How to compose secure messages.
Select Methods
* Duplicates:: Dealing with duplicated mail.
* Not Reading Mail:: Using mail back ends for reading other files.
* Choosing a Mail Back End:: Gnus can read a variety of mail formats.
-* Archiving Mail:: How to backup your mail.
Mail Sources
Browsing the Web
+* Archiving Mail::
* Web Searches:: Creating groups from articles that match a string.
* Slashdot:: Reading the Slashdot comments.
* Ultimate:: The Ultimate Bulletin Board systems.
Agent Commands
-* Group Agent Commands::
-* Summary Agent Commands::
-* Server Agent Commands::
+* Group Agent Commands::
+* Summary Agent Commands::
+* Server Agent Commands::
Scoring
* Daemons:: Gnus can do things behind your back.
* NoCeM:: How to avoid spam and other fatty foods.
* Undo:: Some actions can be undone.
+* Predicate Specifiers:: Specifying predicates.
* Moderation:: What to do if you're a moderator.
-* Image Enhancements:: There are more pictures and stuff under XEmacs.
+* Image Enhancements:: Modern versions of Emacs/XEmacs can display images.
* Fuzzy Matching:: What's the big fuzz?
* Thwarting Email Spam:: A how-to on avoiding unsolicited commercial email.
* Various Various:: Things that are really various.
* Tabulation:: Tabulating your output.
* Wide Characters:: Dealing with wide characters.
-XEmacs Enhancements
+Image Enhancements
-* Picons:: How to display pictures of what your reading.
+* Picons:: How to display pictures of what you're reading.
* Smileys:: Show all those happy faces the way they were meant to be shown.
+* X-Face:: Display a funky, teensy black-and-white image.
* Toolbar:: Click'n'drool.
* XVarious:: Other XEmacsy Gnusey variables.
Appendices
+* XEmacs:: Requirements for installing under XEmacs.
* History:: How Gnus got where it is today.
* On Writing Manuals:: Why this is not a beginner's guide.
* Terminology:: We use really difficult, like, words here.
* Troubleshooting:: What you might try if things do not work.
* Gnus Reference Guide:: Rilly, rilly technical stuff.
* Emacs for Heathens:: A short introduction to Emacsian terms.
+* Frequently Asked Questions::
History
Back End Interface
-* Required Back End Functions:: Functions that must be implemented.
-* Optional Back End Functions:: Functions that need not be implemented.
+* Required Back End Functions:: Functions that must be implemented.
+* Optional Back End Functions:: Functions that need not be implemented.
* Error Messaging:: How to get messages and report errors.
* Writing New Back Ends:: Extending old back ends.
* Hooking New Back Ends Into Gnus:: What has to be done on the Gnus end.
List all groups that gnus knows about in a topics-ified way
(@code{gnus-topic-list-active}).
+@item T M-n
+@kindex T M-n (Topic)
+@findex gnus-topic-goto-next-topic
+Go to the next topic (@code{gnus-topic-goto-next-topic}).
+
+@item T M-p
+@kindex T M-p (Topic)
+@findex gnus-topic-goto-previous-topic
+Go to the next topic (@code{gnus-topic-goto-previous-topic}).
+
@item G p
@kindex G p (Topic)
@findex gnus-topic-edit-parameters
"%M\%S\%p\%P\%5y: %(%-40,40g%) %6,6~(cut 2)d\n")
@end lisp
+If you would like greater control of the time format, you can use a
+user-defined format spec. Something like the following should do the
+trick:
+
+@lisp
+(setq gnus-group-line-format
+ "%M\%S\%p\%P\%5y: %(%-40,40g%) %Ud\n")
+(defun gnus-user-format-function-d (headers)
+ (let ((time (gnus-group-timestamp gnus-tmp-group)))
+ (format-time-string "%b %d %H:%M" time)))
+@end lisp
+
@node File Commands
@subsection File Commands
* Choosing Articles:: Reading articles.
* Paging the Article:: Scrolling the current article.
* Reply Followup and Post:: Posting articles.
-* Delayed Articles::
+* Delayed Articles::
* Marking Articles:: Marking articles as read, expirable, etc.
* Limiting:: You can limit the summary buffer.
* Threading:: How threads are made.
"Your Name Here")
@end lisp
+(The values listed above are the default values in Gnus. Alter them
+to fit your needs.)
+
Now, this is mostly useful for mail groups, where you have control over
the @sc{nov} files that are created. However, if you can persuade your
nntp admin to add:
* Summary Mail Commands:: Sending mail.
* Summary Post Commands:: Sending news.
* Summary Message Commands:: Other Message-related commands.
-* Canceling and Superseding::
+* Canceling and Superseding::
@end menu
@findex gnus-thread-sort-by-author
@findex gnus-thread-sort-by-number
@vindex gnus-thread-sort-functions
+@findex gnus-thread-sort-by-most-recent-thread
If you are using a threaded summary display, you can sort the threads by
setting @code{gnus-thread-sort-functions}, which can be either a single
function, a list of functions, or a list containing functions and
By default, sorting is done on article numbers. Ready-made sorting
predicate functions include @code{gnus-thread-sort-by-number},
@code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject},
-@code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score}, and
+@code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score},
+@code{gnus-thread-sort-by-most-recent-number},
+@code{gnus-thread-sort-by-most-recent-date} and
@code{gnus-thread-sort-by-total-score}.
Each function takes two threads and returns non-@code{nil} if the first
these articles easier.
@menu
-* Article Highlighting:: You want to make the article look like fruit salad.
-* Article Fontisizing:: Making emphasized text look nice.
-* Article Hiding:: You also want to make certain info go away.
-* Article Washing:: Lots of way-neat functions to make life better.
-* Article Buttons:: Click on URLs, Message-IDs, addresses and the like.
-* Article Date:: Grumble, UT!
-* Article Display:: Display various stuff---X-Face, Picons, Smileys
-* Article Signature:: What is a signature?
-* Article Miscellania:: Various other stuff.
+* Article Highlighting:: You want to make the article look like fruit salad.
+* Article Fontisizing:: Making emphasized text look nice.
+* Article Hiding:: You also want to make certain info go away.
+* Article Washing:: Lots of way-neat functions to make life better.
+* Article Header:: Doing various header transformations.
+* Article Buttons:: Click on URLs, Message-IDs, addresses and the like.
+* Article Date:: Grumble, UT!
+* Article Display:: Display various stuff---X-Face, Picons, Smileys
+* Article Signature:: What is a signature?
+* Article Miscellania:: Various other stuff.
@end menu
@kindex W s (Summary)
@findex gnus-summary-force-verify-and-decrypt
Verify a signed (PGP, PGP/MIME or S/MIME) message
-(@code{gnus-summary-force-verify-and-decrypt}).
-
-@item W u
-@kindex W u (Summary)
-@findex gnus-article-treat-unfold-headers
-Unfold folded header lines (@code{gnus-article-treat-unfold-headers}).
-
-@item W n
-@kindex W n (Summary)
-@findex gnus-article-treat-fold-newsgroups
-Fold the @code{Newsgroups} and @code{Followup-To} headers
-(@code{gnus-article-treat-fold-newsgroups}).
+(@code{gnus-summary-force-verify-and-decrypt}). @xref{Security}.
@item W W H
@kindex W W H (Summary)
@xref{Customizing Articles}, for how to wash articles automatically.
+@node Article Header
+@subsection Article Header
+
+These commands perform various transformations of article header.
+
+@table @kbd
+
+@item W G u
+@kindex W G u (Summary)
+@findex gnus-article-treat-unfold-headers
+Unfold folded header lines (@code{gnus-article-treat-unfold-headers}).
+
+@item W G n
+@kindex W G n (Summary)
+@findex gnus-article-treat-fold-newsgroups
+Fold the @code{Newsgroups} and @code{Followup-To} headers
+(@code{gnus-article-treat-fold-newsgroups}).
+
+@item W G f
+@kindex W G f (Summary)
+@findex gnus-article-treat-fold-header
+Fold all the message headers
+(@code{gnus-article-treat-fold-headers}).
+
+@end table
+
+
@node Article Buttons
@subsection Article Buttons
@cindex buttons
@item W D s
@kindex W D s (Summary)
-@findex gnus-article-toggle-smiley
-Toggle whether to display smileys
-(@code{gnus-article-toggle-smiley}).
+@findex gnus-treat-smiley
+Display smileys (@code{gnus-treat-smiley}).
@item W D f
@kindex W D f (Summary)
Piconify all news headers (i. e., @code{Newsgroups} and
@code{Followup-To}) (@code{gnus-treat-from-picon}).
+@item W D D
+@kindex W D D (Summary)
+@findex gnus-article-remove-images
+Remove all images from the article buffer
+(@code{gnus-article-remove-images}).
+
@end table
@menu
* Summary Group Information:: Information oriented commands.
* Searching for Articles:: Multiple article commands.
-* Summary Generation Commands::
+* Summary Generation Commands::
* Really Various Summary Commands:: Those pesky non-conformant commands.
@end menu
@section Security
Gnus is able to verify signed messages or decrypt encrypted messages.
-The formats that are supported are PGP (plain text, RFC 1991 format),
-PGP/MIME (RFC 2015/3156) and S/MIME, however you need some external
-programs to get things to work:
+The formats that are supported are PGP, PGP/MIME and S/MIME, however
+you need some external programs to get things to work:
@enumerate
@item
-To verify or decrypt PGP messages, you have to install mailcrypt or
-gpg.el as well as a OpenPGP implementation (such as GnuPG). @xref{Using GPG}.
+To handle PGP messages, you have to install mailcrypt or gpg.el as
+well as a OpenPGP implementation (such as GnuPG).
@item
-To verify or decrypt S/MIME message, you need to install OpenSSL.
-OpenSSL 0.9.6 or newer is recommended.
+To handle S/MIME message, you need to install OpenSSL. OpenSSL 0.9.6
+or newer is recommended.
@end enumerate
More information on how to set things up can be found in the message
-manual. @xref{Security, ,Security, message, The Message Manual}.
+manual (@pxref{Security, ,Security, message, Message Manual}).
@table @code
@item mm-verify-option
@item mm-decrypt-option
@vindex mm-decrypt-option
Option of decrypting encrypted parts. @code{never}, no decryption;
-@code{always}, always decrypt @code{known}, only decrypt known
+@code{always}, always decrypt; @code{known}, only decrypt known
protocols. Otherwise, ask user.
@end table
@table @code
@item gnus-treat-buttonize (t, integer)
@item gnus-treat-buttonize-head (head)
+
+@xref{Article Buttons}.
+
@item gnus-treat-capitalize-sentences (t, integer)
+@item gnus-treat-overstrike (t, integer)
+@item gnus-treat-strip-cr (t, integer)
+@item gnus-treat-strip-headers-in-body (t, integer)
+@item gnus-treat-strip-leading-blank-lines (t, integer)
+@item gnus-treat-strip-multiple-blank-lines (t, integer)
+@item gnus-treat-strip-pem (t, last, integer)
+@item gnus-treat-strip-pgp (t, last, integer)
+@item gnus-treat-strip-trailing-blank-lines (t, last, integer)
+
+@xref{Article Washing}.
+
@item gnus-treat-date-english (head)
@item gnus-treat-date-iso8601 (head)
@item gnus-treat-date-lapsed (head)
@item gnus-treat-date-original (head)
@item gnus-treat-date-user-defined (head)
@item gnus-treat-date-ut (head)
-@item gnus-treat-display-picons (head)
+
+@xref{Article Date}.
+
+@item gnus-treat-from-picon (head)
+@item gnus-treat-mail-picon (head)
+@item gnus-treat-newsgroups-picon (head)
+
+@xref{Picons}.
+
@item gnus-treat-display-smileys (t, integer)
+
+@item gnus-treat-body-boundary (head)
+
+@vindex gnus-body-boundary-delimiter
+Adds a delimiter between header and body, the string used as delimiter
+is controlled by @code{gnus-body-boundary-delimiter}.
+
+@xref{Smileys}.
+
@item gnus-treat-display-xface (head)
+
+@xref{X-Face}.
+
@item gnus-treat-emphasize (t, head, integer)
@item gnus-treat-fill-article (t, integer)
@item gnus-treat-fill-long-lines (t, integer)
@item gnus-treat-hide-citation-maybe (t, integer)
@item gnus-treat-hide-headers (head)
@item gnus-treat-hide-signature (t, last)
+
+@xref{Article Hiding}.
+
@item gnus-treat-highlight-citation (t, integer)
@item gnus-treat-highlight-headers (head)
@item gnus-treat-highlight-signature (t, last, integer)
-@item gnus-treat-overstrike (t, integer)
+
+@xref{Article Highlighting}.
+
@item gnus-treat-play-sounds
-@item gnus-treat-strip-cr (t, integer)
-@item gnus-treat-strip-headers-in-body (t, integer)
-@item gnus-treat-strip-leading-blank-lines (t, integer)
-@item gnus-treat-strip-multiple-blank-lines (t, integer)
-@item gnus-treat-strip-pem (t, last, integer)
-@item gnus-treat-strip-pgp (t, last, integer)
-@item gnus-treat-strip-trailing-blank-lines (t, last, integer)
@item gnus-treat-translate
@item gnus-treat-x-pgp-sig (head)
-@item gnus-treat-from-picon (head)
-@item gnus-treat-mail-picon (head)
-@item gnus-treat-newsgroups-picon (head)
+
@item gnus-treat-unfold-headers (head)
+@item gnus-treat-fold-headers (head)
@item gnus-treat-fold-newsgroups (head)
-@item gnus-treat-body-boundary (head)
+
@item gnus-treat-decode-article-as-default-mime-charset
@end table
@findex gnus-article-prev-button
Go to the previous button, if any (@code{gnus-article-prev-button}).
+@item R
+@kindex R (Article)
+@findex gnus-article-reply-with-original
+Send a reply to the current article and yank the current article
+(@code{gnus-article-reply-with-original}). If given a prefix, make a
+wide reply. If the region is active, only yank the text in the
+region.
+
+@item F
+@kindex F (Article)
+@findex gnus-article-followup-with-original
+Send a followup to the current article and yank the current article
+(@code{gnus-article-followup-with-original}). If given a prefix, make
+a wide reply. If the region is active, only yank the text in the
+region.
+
+
@end table
@cindex followup
@cindex post
@cindex using gpg
+@cindex using s/mime
+@cindex using smime
@kindex C-c C-c (Post)
All commands for posting and mailing will put you in a message buffer
where you can edit the article all you like, before you send the
-article by pressing @kbd{C-c C-c}. @xref{Top, , Top, message, The
+article by pressing @kbd{C-c C-c}. @xref{Top, , Overview, message,
Message Manual}. Where the message will be posted/mailed to depends
on your setup (@pxref{Posting Server}).
* Posting Styles:: An easier way to specify who you are.
* Drafts:: Postponing messages and rejected messages.
* Rejected Articles:: What happens if the server doesn't like your article?
-* Using GPG:: How to use GPG and MML to sign and encrypt messages
+* Signing and encrypting:: How to compose secure messages.
@end menu
Also see @pxref{Canceling and Superseding} for information on how to
This variable can be used instead of @code{gnus-message-archive-group},
but the latter is the preferred method.
-@item gnus-inews-mark-gcc-as-read
-@vindex gnus-inews-mark-gcc-as-read
+@item gnus-gcc-mark-as-read
+@vindex gnus-gcc-mark-as-read
If non-@code{nil}, automatically mark @code{Gcc} articles as read.
@end table
(@pxref{Drafts}). When the server comes back up again, you'd then
typically enter that group and send all the articles off.
-@node Using GPG
-@section Using GPG
+@node Signing and encrypting
+@section Signing and encrypting
@cindex using gpg
+@cindex using s/mime
+@cindex using smime
-Gnus has an ALPHA support to GPG that's provided by @file{gpg.el}. See
-@code{mm-verify-option} and @code{mm-decrypt-option} to enable Gnus to
-verify or decrypt messages accordingly.
+Gnus can digitally sign and encrypt your messages, using vanilla PGP
+format or PGP/MIME or S/MIME. For decoding such messages, see the
+@code{mm-verify-option} and @code{mm-decrypt-option} options
+(@pxref{Security}).
-To use this correctly with GPG, you'll need the following lisp code in your
-@file{~/.emacs} or @file{~/.gnus}:
+For PGP, Gnus supports two external libraries, @sc{gpg.el} and
+@sc{Mailcrypt}, you need to install at least one of them. The S/MIME
+support in Gnus requires the external program OpenSSL.
-@lisp
-(require 'gpg)
-(setq mml2015-use 'gpg)
-(setq mml1991-use 'gpg)
-(setq gpg-temp-directory (expand-file-name "~/.gnupg/tmp"))
-@end lisp
+Instructing MML to perform security operations on a MIME part is done
+using the @code{C-c C-m s} key map for signing and the @code{C-c C-m
+c} key map for encryption, as follows.
+
+@table @kbd
+
+@item C-c C-m s s
+@kindex C-c C-m s s
+@findex mml-secure-sign-smime
+
+Digitally sign current MIME part using S/MIME.
+
+@item C-c C-m s o
+@kindex C-c C-m s o
+@findex mml-secure-sign-pgp
+
+Digitally sign current MIME part using PGP.
+
+@item C-c C-m s p
+@kindex C-c C-m s p
+@findex mml-secure-sign-pgp
-The @code{gpg-temp-directory} need to point to a directory with permissions set
-to 700, for your own safety.
+Digitally sign current MIME part using PGP/MIME.
-To sign or encrypt your message you may choose to use the MML Security
-menu or @kbd{C-c C-m s p} to sign your message using PGP/MIME,
-@kbd{C-c C-m s s} to sign your message using S/MIME. There's also
-@kbd{C-c C-m c p} to encrypt your message with PGP/MIME and @kbd{C-c
-C-m c s} to encrypt using S/MIME. @xref{Security, ,Security, message,
-The Message Manual}.
+@item C-c C-m c s
+@kindex C-c C-m c s
+@findex mml-secure-encrypt-smime
-Gnus will ask for your passphrase and then it will send your message, if
-you've typed it correctly.
+Digitally encrypt current MIME part using S/MIME.
+
+@item C-c C-m c o
+@kindex C-c C-m c o
+@findex mml-secure-encrypt-pgp
+
+Digitally encrypt current MIME part using PGP.
+
+@item C-c C-m c p
+@kindex C-c C-m c p
+@findex mml-secure-encrypt-pgpmime
+
+Digitally encrypt current MIME part using PGP/MIME.
+
+@end table
+
+Also @xref{Security, ,Security, message, Message Manual}.
@node Select Methods
@chapter Select Methods
* Duplicates:: Dealing with duplicated mail.
* Not Reading Mail:: Using mail back ends for reading other files.
* Choosing a Mail Back End:: Gnus can read a variety of mail formats.
-* Archiving Mail:: How to backup your mail.
@end menu
interfaces to these sources.
@menu
+* Archiving Mail::
* Web Searches:: Creating groups from articles that match a string.
* Slashdot:: Reading the Slashdot comments.
* Ultimate:: The Ultimate Bulletin Board systems.
@sc{html} in the Gnus article buffers will use @code{browse-url} to
follow the link.
+
@node IMAP
@section @sc{imap}
@cindex nnimap
specify the network address of the server.
@sc{imap} has two properties. First, @sc{imap} can do everything that
-POP can, it can hence be viewed as POP++. Secondly, @sc{imap} is a
+POP can, it can hence be viewed as a POP++. Secondly, @sc{imap} is a
mail storage protocol, similar to @sc{nntp} being a news storage
-protocol. (@sc{imap} offers more features than @sc{nntp} because news
-is more or less read-only whereas mail is read-write.)
+protocol -- however, @sc{imap} offers more features than @sc{nntp}
+because news is more or less read-only whereas mail is read-write.
-If you want to use @sc{imap} as POP++, use an imap entry in
-mail-sources. With this, Gnus will fetch mails from the @sc{imap}
-server and store them on the local disk. This is not the usage
-described in this section. @xref{Mail Sources}.
+If you want to use @sc{imap} as a POP++, use an imap entry in
+@code{mail-sources}. With this, Gnus will fetch mails from the
+@sc{imap} server and store them on the local disk. This is not the
+usage described in this section--@xref{Mail Sources}.
If you want to use @sc{imap} as a mail storage protocol, use an nnimap
-entry in gnus-secondary-select-methods. With this, Gnus will
+entry in @code{gnus-secondary-select-methods}. With this, Gnus will
manipulate mails stored on the @sc{imap} server. This is the kind of
usage explained in this section.
A server configuration in @code{~/.gnus} with a few @sc{imap} servers
-might look something like this:
+might look something like the following. (Note that for SSL/TLS, you
+need external programs and libraries, see below.)
@lisp
(setq gnus-secondary-select-methods
(nnimap-stream ssl))))
@end lisp
-(Note that for SSL/TLS to work, you need the external library
-@samp{ssl.el}, see below.)
-
The following variables can be used to create a virtual @code{nnimap}
server:
@itemize @bullet
@item
-@dfn{gssapi:} Connect with GSSAPI (usually kerberos 5). Requires the
+@dfn{gssapi:} Connect with GSSAPI (usually Kerberos 5). Requires the
@samp{imtest} program.
@item
-@dfn{kerberos4:} Connect with kerberos 4. Requires the @samp{imtest} program.
+@dfn{kerberos4:} Connect with Kerberos 4. Requires the @samp{imtest} program.
@item
@dfn{starttls:} Connect via the STARTTLS extension (similar to
SSL). Requires the external library @samp{starttls.el} and program
@itemize @bullet
@item
-@dfn{gssapi:} GSSAPI (usually kerberos 5) authentication. Require
+@dfn{gssapi:} GSSAPI (usually kerberos 5) authentication. Requires
external program @code{imtest}.
@item
-@dfn{kerberos4:} Kerberos authentication. Require external program
+@dfn{kerberos4:} Kerberos 4 authentication. Requires external program
@code{imtest}.
@item
-@dfn{digest-md5:} Encrypted username/password via DIGEST-MD5. Require
+@dfn{digest-md5:} Encrypted username/password via DIGEST-MD5. Requires
external library @code{digest-md5.el}.
@item
@dfn{cram-md5:} Encrypted username/password via CRAM-MD5.
@kbd{C-c C-n} in the message buffer will insert the @code{Newsgroups}
line from the article you respond to in these cases.
+@code{nnvirtual} groups do not inherit anything but articles and marks
+from component groups---group parameters, for instance, are not
+inherited.
@node Kibozed Groups
@menu
-* Group Agent Commands::
-* Summary Agent Commands::
-* Server Agent Commands::
+* Group Agent Commands::
+* Summary Agent Commands::
+* Server Agent Commands::
@end menu
You can run a complete batch fetch from the command line with the
particularly fast or efficient, and it's not a particularly good idea to
interrupt it (with @kbd{C-g} or anything else) once you've started it.
+@code{gnus-agent-expire-days} can also be a list of regexp/day pairs.
+The regexps will be matched against group names to allow differing
+expiry in different groups.
+
+@lisp
+(setq gnus-agent-expire-days
+ '(("alt\\." 7)
+ (".*binary" 1)
+ ("." 21)))
+@end lisp
+
+If you use the list form, the last element must always be the default
+method---it must always match all groups.
+
@vindex gnus-agent-expire-all
if @code{gnus-agent-expire-all} is non-@code{nil}, this command will
expire all articles---unread, read, ticked and dormant. If @code{nil}
@vindex gnus-agent-unplugged-hook
Hook run when disconnecting from the network.
+@item gnus-agent-fetched-hook
+@vindex gnus-agent-fetched-hook
+Hook run when after finishing fetching articles.
+
@end table
@item gnus-update-score-entry-dates
@vindex gnus-update-score-entry-dates
-If this variable is non-@code{nil}, matching score entries will have
-their dates updated. (This is how Gnus controls expiry---all
-non-matching entries will become too old while matching entries will
-stay fresh and young.) However, if you set this variable to @code{nil},
-even matching entries will grow old and will have to face that oh-so
-grim reaper.
+If this variable is non-@code{nil}, temporary score entries that have
+been triggered (matched) will have their dates updated. (This is how Gnus
+controls expiry---all non-matched-entries will become too old while
+matched entries will stay fresh and young.) However, if you set this
+variable to @code{nil}, even matched entries will grow old and will
+have to face that oh-so grim reaper.
@item gnus-score-after-write-file-function
@vindex gnus-score-after-write-file-function
@chapter Various
@menu
-* Process/Prefix:: A convention used by many treatment commands.
-* Interactive:: Making Gnus ask you many questions.
-* Symbolic Prefixes:: How to supply some Gnus functions with options.
-* Formatting Variables:: You can specify what buffers should look like.
-* Window Layout:: Configuring the Gnus buffer windows.
-* Faces and Fonts:: How to change how faces look.
-* Compilation:: How to speed Gnus up.
-* Mode Lines:: Displaying information in the mode lines.
-* Highlighting and Menus:: Making buffers look all nice and cozy.
-* Buttons:: Get tendinitis in ten easy steps!
-* Daemons:: Gnus can do things behind your back.
-* NoCeM:: How to avoid spam and other fatty foods.
-* Undo:: Some actions can be undone.
-* Moderation:: What to do if you're a moderator.
-* Image Enhancements:: Modern versions of Emacs/XEmacs can display images.
-* Fuzzy Matching:: What's the big fuzz?
-* Thwarting Email Spam:: A how-to on avoiding unsolicited commercial email.
-* Various Various:: Things that are really various.
+* Process/Prefix:: A convention used by many treatment commands.
+* Interactive:: Making Gnus ask you many questions.
+* Symbolic Prefixes:: How to supply some Gnus functions with options.
+* Formatting Variables:: You can specify what buffers should look like.
+* Window Layout:: Configuring the Gnus buffer windows.
+* Faces and Fonts:: How to change how faces look.
+* Compilation:: How to speed Gnus up.
+* Mode Lines:: Displaying information in the mode lines.
+* Highlighting and Menus:: Making buffers look all nice and cozy.
+* Buttons:: Get tendinitis in ten easy steps!
+* Daemons:: Gnus can do things behind your back.
+* NoCeM:: How to avoid spam and other fatty foods.
+* Undo:: Some actions can be undone.
+* Predicate Specifiers:: Specifying predicates.
+* Moderation:: What to do if you're a moderator.
+* Image Enhancements:: Modern versions of Emacs/XEmacs can display images.
+* Fuzzy Matching:: What's the big fuzz?
+* Thwarting Email Spam:: A how-to on avoiding unsolicited commercial email.
+* Various Various:: Things that are really various.
@end menu
Also Gnus supports some extended format specifications, such as
@samp{%&user-date;}.
+
@node Mode Line Formatting
@subsection Mode Line Formatting
@item form
Use the specified form as the field value when the @samp{@@} spec is
used.
+
+Here's an example:
+
+@lisp
+"~(form (current-time-string))@@"
+@end lisp
+
@end table
Let's take an example. The @samp{%o} spec in the summary mode lines
command.
+@node Predicate Specifiers
+@section Predicate Specifiers
+@cindex predicate specifiers
+
+Some Gnus variables are @dfn{predicate specifiers}. This is a special
+form that allows flexible specification of predicates without having
+to type all that much.
+
+These specifiers are lists consisting of functions, symbols and lists.
+
+Here's an example:
+
+@lisp
+(or gnus-article-unseen-p
+ gnus-article-unread-p)
+@end lisp
+
+The available symbols are @code{or}, @code{and} and @code{not}. The
+functions all take one parameter.
+
+@findex gnus-make-predicate
+Internally, Gnus calls @code{gnus-make-predicate} on these specifiers
+to create a function that can be called. This input parameter to this
+function will be passed along to all the functions in the predicate
+specifier.
+
+
@node Moderation
@section Moderation
@cindex moderation
Gnus has taken advantage of that.
@menu
-* Picons:: How to display pictures of what you're reading.
-* Smileys:: Show all those happy faces the way they were meant to be shown.
-* X-Face:: Display a funky, teensy black-and-white image.
-* Toolbar:: Click'n'drool.
-* XVarious:: Other XEmacsy Gnusey variables.
+* Picons:: How to display pictures of what you're reading.
+* Smileys:: Show all those happy faces the way they were meant to be shown.
+* X-Face:: Display a funky, teensy black-and-white image.
+* Toolbar:: Click'n'drool.
+* XVarious:: Other XEmacsy Gnusey variables.
@end menu
@subsection X-Face
@cindex x-face
-@code{X-Face} headers describe a 48x48 pixel black-and-white image
-that's supposed to represent the author of the message. It seems to
-be supported by an ever-growing number of mail and news readers.
+@code{X-Face} headers describe a 48x48 pixel black-and-white (1 bit
+depth) image that's supposed to represent the author of the message.
+It seems to be supported by an ever-growing number of mail and news
+readers.
@cindex x-face
@findex gnus-article-display-x-face
(NOTE: @code{x-face} is used in the variable/function names, not
@code{xface}).
+Gnus provides a few convenience functions and variables to allow
+easier insertion of X-Face headers in outgoing messages.
+
+@findex gnus-random-x-face
+@code{gnus-random-x-face} goes through all the @samp{pbm} files
+in @code{gnus-x-face-directory} and picks one at random, and then
+converts it to the X-Face format by using the
+@code{gnus-convert-pbm-to-x-face-command} shell command. The
+@samp{pbm} files should be 48x48 pixels big.
+
+@code{gnus-x-face-from-file} takes a file as the parameter, and then
+converts the file to X-Face format by using the
+@code{gnus-convert-image-to-x-face-command} shell command.
+
+Here's how you would typically use the former function. Put something
+like the folllowing in your @file{.gnus.el} file:
+
+@lisp
+(setq message-required-news-headers
+ (nconc message-required-news-headers
+ (list '(X-Face . gnus-random-x-face))))
+@end lisp
+
+Using the latter function would be something like this:
+
+@lisp
+(setq message-required-news-headers
+ (nconc message-required-news-headers
+ (list '(X-Face . (lambda ()
+ (gnus-x-face-from-file
+ "~/My-face.gif"))))))
+@end lisp
+
@node Toolbar
@subsection Toolbar
@node Gnus Versions
@subsection Gnus Versions
-@cindex Pterodactyl Gnus
@cindex ding Gnus
@cindex September Gnus
+@cindex Red Gnus
@cindex Quassia Gnus
+@cindex Pterodactyl Gnus
+@cindex Oort Gnus
+@cindex No Gnus
The first ``proper'' release of Gnus 5 was done in November 1995 when it
was included in the Emacs 19.30 distribution (132 (ding) Gnus releases
@table @strong
-@item RFC 822
+@item RFC (2)822
@cindex RFC 822
+@cindex RFC 2822
There are no known breaches of this standard.
@item RFC 1036
various changes to the format of news articles. The Gnus towers will
look into implementing the changes when the draft is accepted as an RFC.
+@item MIME - RFC 2045-2049 etc
+@cindex MIME
+All the various MIME RFCs are supported.
+
+@item Disposition Notifications - RFC 2289
+Message Mode is able to request notifications from the receiver.
+
+@item PGP - RFC 1991 and RFC 2440
+@cindex RFC 1991
+@cindex RFC 2440
+RFC 1991 is the original PGP message specification, published as a
+Information RFC. RFC 2440 was the follow-up, now called Open PGP, and
+put on the Standards Track. Both document a non-MIME aware PGP
+format. Gnus supports both encoding (signing and encryption) and
+decoding (verification and decryption).
+
+@item PGP/MIME - RFC 2015/3156
+RFC 2015 (superceded by 3156 which references RFC 2440 instead of RFC
+1991) describes the MIME-wrapping around the RF 1991/2440 format.
+Gnus supports both encoding and decoding.
+
+@item S/MIME - RFC 2633
+RFC 2633 describes the S/MIME format.
+
+@item IMAP - RFC 1730/2060, RFC 2195, RFC 2086, RFC 2359, RFC 2595, RFC 1731
+RFC 1730 is IMAP version 4, updated somewhat by RFC 2060 (IMAP 4
+revision 1). RFC 2195 describes CRAM-MD5 authentication for IMAP. RFC
+2086 describes access control lists (ACLs) for IMAP. RFC 2359
+describes a IMAP protocol enhancement. RFC 2595 describes the proper
+TLS integration (STARTTLS) with IMAP. RFC 1731 describes the
+GSSAPI/Kerberos4 mechanisms for IMAP.
+
@end table
If you ever notice Gnus acting non-compliant with regards to the texts
If this is non-@code{nil}, all threads in the summary buffer will be
hidden initially.
+This can also be a predicate specifier (@pxref{Predicate Specifiers}).
+Avaliable predicates are @code{gnus-article-unread-p} and
+@code{gnus-article-unseen-p}.
+
+Here's an example:
+
+@lisp
+(setq gnus-thread-hide-subtree
+ '(or gnus-article-unread-p
+ gnus-article-unseen-p))
+@end lisp
+
+(It's a pretty nonsensical example, since all unseen articles are also
+unread, but you get my drift.)
+
+
@item gnus-updated-mode-lines
If this is @code{nil}, Gnus will not put information in the buffer mode
lines, which might save some time.
@cindex @code{nnchoke}
@menu
-* Required Back End Functions:: Functions that must be implemented.
-* Optional Back End Functions:: Functions that need not be implemented.
+* Required Back End Functions:: Functions that must be implemented.
+* Optional Back End Functions:: Functions that need not be implemented.
* Error Messaging:: How to get messages and report errors.
* Writing New Back Ends:: Extending old back ends.
* Hooking New Back Ends Into Gnus:: What has to be done on the Gnus end.
@item C-c ?
@kindex C-c ?
-@findex message-goto-to
+@findex describe-mode
\e$B%a%C%;!<%8%b!<%I$N5-=R$G$9!#\e(B
@item C-c C-r C-t
@findex message-goto-to
@code{To} \e$B%X%C%@!<$K9T$-$^$9\e(B (@code{message-goto-to})\e$B!#\e(B
+@item C-c C-f C-o
+@kindex C-c C-f C-o
+@findex message-goto-from
+@code{From} \e$B%X%C%@!<$K9T$-$^$9\e(B (@code{message-goto-from})\e$B!#\e(B(\e$B%-!<%P%$%s%I\e(B
+\e$BCf$N\e(B ``o'' \e$B$OAO:n<T\e(B (Originator) \e$B$KM3Mh$7$F$$$^$9!#\e(B)
+
@item C-c C-f C-b
@kindex C-c C-f C-b
@findex message-goto-bcc
@kindex C-c M-h
@findex message-insert-headers
\e$B%a%C%;!<%8$N%X%C%@!<$rA^F~$7$^$9\e(B (@code{message-insert-headers})\e$B!#\e(B
+
+@item C-c M-n
+@kindex C-c M-n
+@findex message-insert-disposition-notification-to
+\e$B3+Iu3NG'MW5a$rA^F~$7$^$9!#\e(B
+(@code{message-insert-disposition-notification-to})\e$B!#$3$l$O!"$b$7<u?.<T\e(B
+\e$B$,\e(B RFC 2298 \e$B$r%5%]!<%H$7$F$$$?$i!"H`=w$K$=$N%a%C%;!<%8$r<u$1<h$C$?$3$H$r\e(B
+\e$BCN$i$;$FM_$7$$$3$H$r0UL#$7$^$9!#\e(B
@end table
@c FIXTGNUS We should provide MIME manual.
@uref{http://www.nb.net/~lbudney/linux/software/mailcrypt.html}) or
Florian Weimer's @code{gpg.el}.
+@vindex gpg-temp-directory
+Note, if you are using the @code{gpg.el} you must make sure that the
+path specified by @code{gpg-temp-directory} have permissions 0700.
+
Creating your own OpenPGP key is described in detail in the
documentation of your OpenPGP implementation, so we refer to it.
@end ignore
@item C-c ?
@kindex C-c ?
-@findex message-goto-to
+@findex describe-mode
Describe the message mode.
@item C-c C-f C-t
@findex message-goto-to
Go to the @code{To} header (@code{message-goto-to}).
+@item C-c C-f C-o
+@kindex C-c C-f C-o
+@findex message-goto-from
+Go to the @code{From} header (@code{message-goto-from}). (The ``o''
+in the key binding is for Originator.)
+
@item C-c C-f C-b
@kindex C-c C-f C-b
@findex message-goto-bcc
@findex message-insert-headers
Insert the message headers (@code{message-insert-headers}).
+@item C-c M-n
+@kindex C-c M-n
+@findex message-insert-disposition-notification-to
+Insert a request for a disposition
+notification. (@code{message-insert-disposition-notification-to}).
+This means that if the recipient support RFC 2298 she might send you a
+notification that she received the message.
+
@end table
@uref{http://www.nb.net/~lbudney/linux/software/mailcrypt.html}) or
Florian Weimer's @code{gpg.el}.
+@vindex gpg-temp-directory
+Note, if you are using the @code{gpg.el} you must make sure that the
+path specified by @code{gpg-temp-directory} have permissions 0700.
+
Creating your own OpenPGP key is described in detail in the
documentation of your OpenPGP implementation, so we refer to it.