User: youngs
Date: 05/11/15 04:46:40
Modified: packages/xemacs-packages/gnus/texi ChangeLog.upstream
doclicense.texi emacs-mime.texi gnus-faq.texi
gnus.texi infohack.el message.texi
Added: packages/xemacs-packages/gnus/texi gnus-logo.eps
gnus-refcard.tex xml2texi.scm xml2texi.sh
Removed: packages/xemacs-packages/gnus/lisp gnus-util.el.upstream
packages/xemacs-packages/gnus/texi bk-a4.tex bk-lt.tex
booklet.tex gnuslogo-booklet.eps
gnuslogo-refcard.eps gnusref.tex refcard.tex
Log:
2005-11-15 Steve Youngs <steve(a)sxemacs.org>
* Sync with upstream stable branch.
Please see the ChangeLog.upstream files for details.
Revision Changes Path
1.94 +5 -0 XEmacs/packages/xemacs-packages/gnus/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/ChangeLog,v
retrieving revision 1.93
retrieving revision 1.94
diff -u -p -r1.93 -r1.94
--- ChangeLog 2005/10/12 08:11:15 1.93
+++ ChangeLog 2005/11/15 03:45:37 1.94
@@ -1,3 +1,8 @@
+2005-11-15 Steve Youngs <steve(a)sxemacs.org>
+
+ * Sync with upstream stable branch.
+ Please see the ChangeLog.upstream files for details.
+
2005-10-12 Norbert Koch <viteno(a)xemacs.org>
* Makefile (VERSION): XEmacs package 1.86 released.
1.4 +3 -3 XEmacs/packages/xemacs-packages/gnus/etc/gnus-tut.txt
Index: gnus-tut.txt
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/etc/gnus-tut.txt,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-tut.txt 2004/01/04 22:49:21 1.3
+++ gnus-tut.txt 2005/11/15 03:45:40 1.4
@@ -25,7 +25,7 @@ Ingebrigtsen. If you have a WWW browser
heart's delight at <
URL:http://www.gnus.org/> and
<
URL:http://quimby.gnus.org/lmi/>.
-;; Copyright (C) 1995 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)ifi.uio.no>
;; Keywords: news
@@ -44,8 +44,8 @@ heart's delight at <URL:http://www.gnus.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
From lars Thu Feb 23 23:20:38 1995
From: larsi(a)gnus.org (ding)
1.7 +1556 -13 XEmacs/packages/xemacs-packages/gnus/lisp/ChangeLog.upstream
Index: ChangeLog.upstream
===================================================================
RCS file:
/pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/ChangeLog.upstream,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- ChangeLog.upstream 2005/03/13 00:23:21 1.6
+++ ChangeLog.upstream 2005/11/15 03:45:41 1.7
@@ -1,15 +1,1559 @@
+2005-11-13 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-start.el (gnus-dribble-read-file): Use make-local-variable
+ rather than make-variable-buffer-local for file-precious-flag.
+
+2005-11-13 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-start.el (gnus-dribble-read-file): Quote file-precious-flag.
+
+2005-11-11 Jan Nieuwenhuizen <janneke(a)gnu.org>
+
+ * gnus-start.el (gnus-dribble-read-file): Set file-precious-flag,
+ as a buffer-local variable. This avoids creating truncated
+ dribble files as a result of a hang up, eg.
+
+2005-11-04 Ken Manheimer <ken.manheimer(a)gmail.com>
+
+ * pgg-pgp.el (pgg-pgp-encrypt-region, pgg-pgp-decrypt-region)
+ (pgg-pgp-encrypt-symmetric-region, pgg-pgp-encrypt-symmetric)
+ (pgg-pgp-encrypt, pgg-pgp-decrypt-region, pgg-pgp-decrypt)
+ (pgg-pgp-sign-region, pgg-pgp-sign): Add optional 'passphrase'
+ argument to all these routines, so the passphrase can be managed
+ externally and passed in to the system.
+ (pgg-pgp-decrypt-region, pgg-pgp-sign-region): Use new name for
+ pgg-add-passphrase-to-cache function.
+
+ * pgg-pgp5.el (pgg-pgp5-encrypt-region, pgg-pgp5-decrypt-region)
+ (pgg-pgp5-encrypt-symmetric-region, pgg-pgp5-encrypt-symmetric)
+ (pgg-pgp5-encrypt, pgg-pgp5-decrypt-region, pgg-pgp5-decrypt)
+ (pgg-pgp5-sign-region, pgg-pgp5-sign): Add optional 'passphrase'
+ argument to all these routines, so the passphrase can be managed
+ externally and passed in to the system.
+ (pgg-pgp5-sign-region): Use new name of pgg-add-passphrase-to-cache
+ function.
+
+2005-10-30 Chong Yidong <cyd(a)stupidchicken.com>
+
+ * imap.el (imap-open): Handle case where buffer is a buffer
+ object.
+
+2005-10-29 Ken Manheimer <ken.manheimer(a)gmail.com>
+
+ * pgg-gpg.el (pgg-gpg-select-matching-key): Fix: look at the right
+ part of the decoded armor to find the key-identifier.
+ (pgg-gpg-lookup-key-owner): New function to return the
+ human-readable identifier of a key owner.
+ (pgg-gpg-lookup-id-from-key-owner): Make it easy to identify the
+ key itself.
+ (pgg-gpg-decrypt-region): Prompt with the key owner (rather than
+ the key value) if we have a key and can match it against a secret
+ key. Also, added a note pointing out fact that the prompt only
+ indicates the first matching key.
+
+ * pgg.el (pgg-decrypt): Passing along 'passphrase' in call to
+ pgg-decrypt-region.
+ (pgg-pending-timers): A new hash for tracking the passphrase cache
+ timers, so that new ones supercede old ones.
+ (pgg-add-passphrase-to-cache): Rename from
+ `pgg-add-passphrase-cache' to reduce confusion (all callers
+ changed). Modified to cancel old timers when new ones are added.
+ (pgg-remove-passphrase-from-cache): Rename from
+ `pgg-remove-passphrase-cache' to reduce confusion (all callers
+ changed). Modified to cancel old timers when their keys are
+ removed from the cache.
+ (pgg-cancel-timer): In Emacs, an alias for cancel-timer; in
+ XEmacs, an indirection to delete-itimer.
+ (pgg-read-passphrase-from-cache, pgg-read-passphrase):
+ Extract pgg-read-passphrase-from-cache from pgg-read-passphrase so
+ users can only check cache without risk of prompting. Correct bug in
+ notruncate behavior.
+ (pgg-read-passphrase-from-cache, pgg-read-passphrase)
+ (pgg-add-passphrase-cache, pgg-remove-passphrase-cache):
+ Add informative docstrings.
+ (pgg-decrypt): Convey provided passphrase in subordinate call to
+ pgg-decrypt-region.
+
+2005-10-20 Ken Manheimer <ken.manheimer+emacs(a)gmail.com>
+
+ * pgg.el (pgg-encrypt-region, pgg-encrypt-symmetric-region)
+ (pgg-encrypt-symmetric, pgg-encrypt, pgg-decrypt-region)
+ (pgg-decrypt, pgg-sign-region, pgg-sign): Add optional
+ 'passphrase' argument, so the passphrase can be managed externally
+ and then passed in to the system.
+
+ * pgg.el (pgg-read-passphrase, pgg-add-passphrase-cache)
+ (pgg-remove-passphrase-cache): Add optional 'notruncate' argument,
+ so the passphrase cache can be used reliably with identifiers
+ besides a pgp packet's key id.
+
+ * pgg-gpg.el (pgg-pgp-encrypt-region)
+ (pgg-pgp-encrypt-symmetric-region, pgg-pgp-encrypt-symmetric)
+ (pgg-pgp-encrypt, pgg-pgp-decrypt-region, pgg-pgp-decrypt)
+ (pgg-pgp-sign-region, pgg-pgp-sign): Add optional 'passphrase'
+ argument to all these routines, so the passphrase can be managed
+ externally and passed in to the system.
+
+ * pgg-gpg.el (pgg-gpg-possibly-cache-passphrase): Add optional
+ 'notruncate' argument, so the passphrase cache can be used
+ reliably with identifiers besides a pgp packet's key id.
+
+2005-10-29 Sascha Wilde <swilde(a)sha-bang.de>
+
+ * pgg-gpg.el (pgg-gpg-encrypt-symmetric-region): New function for
+ symmetric encryption.
+ (pgg-gpg-symmetric-key-p): New function to check for an symmetric
+ encrypted session key.
+ (pgg-gpg-decrypt-region): When decrypting a symmetric encrypted
+ message ask for the passphrase in a proper way.
+
+ * pgg.el (pgg-encrypt-symmetric, pgg-encrypt-symmetric-region):
+ New user commands for symmetric encryption.
+
+2005-11-10 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * messagexmas.el (message-use-toolbar): Change the valid values
+ into default, top, bottom, left, and right.
+ (message-toolbar-thickness): New variable.
+ (message-xmas-setup-toolbar): Locate gnus-xmas-glyph-directory as
+ well.
+ (message-setup-toolbar): Make it work.
+
+ * gnus-xmas.el (gnus-xmas-update-toolbars): New function.
+ (gnus-use-toolbar): Change the valid values into default, top,
+ bottom, left, and right.
+ (gnus-toolbar-thickness): New variable.
+ (gnus-xmas-setup-toolbar): New function.
+ (gnus-xmas-setup-group-toolbar): Use it.
+ (gnus-xmas-setup-summary-toolbar): Use it.
+
+2005-11-09 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * message.el (message-generate-headers): Downcase the argument
+ given to message-check-element.
+
+2005-11-01 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.el (gnus-parameters-case-fold-search): New variable.
+ (gnus-parameters-get-parameter): Use it.
+
+ * gnus-score.el (gnus-home-score-file): Doc fix.
+
+2005-11-01 Xavier Maillard <zedek(a)gnu-rox.org> (tiny change)
+
+ * gnus-score.el (gnus-update-score-entry-dates): Doc fix.
+
+2005-10-31 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * mml.el (mml-preview): Doc fix.
+
+2005-10-27 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * flow-fill.el (fill-flowed-encode-tests): Restore trailing
+ whitespace removed in revision 7.8. Use concatenated string to
+ protect trailing whitespace.
+
+2005-10-27 Jouni K Seppanen <jks(a)iki.fi> (tiny change)
+
+ * nnimap.el (nnimap-search-uids-not-since-is-evil): Add variable.
+ (nnimap-request-expire-articles): Use it to avoid sending 'UID
+ SEARCH UID ... NOT SINCE' queries, for inefficient servers like
+ Courier IMAP ("some version from 2004"). Mostly based on similar
+ code in the same function.
+
+2005-10-26 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * message.el (message-display-completion-list): New function.
+ (message-expand-group): Use it; make sure the Completions buffer
+ is modifiable.
+
+2005-10-23 Chong Yidong <cyd(a)stupidchicken.com>
+
+ * gnus-sum.el (gnus-ignored-from-addresses): Handle case where
+ user-mail-name is an empty string.
+
+2005-10-25 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * gnus-score.el (gnus-default-adaptive-score-alist): Set defaults
+ depending on gnus-score-decay-constant.
+
+2005-10-25 Lars Magne Ingebrigtsen <larsi(a)gnus.org>
+
+ * nnslashdot.el (nnslashdot-request-article)
+ (nnslashdot-retrieve-headers-1): Update to new HTML.
+
+2005-10-23 Simon Josefsson <jas(a)extundo.com>
+
+ * imap.el (imap-gssapi-program): Align command line parameters
+ with latest GNU SASL.
+ (imap-gssapi-open): Ignore 'Trying ...' messages from GNU SASL.
+
+2005-10-20 Hiroshi Fujishima <hiroshi.fujishima(a)gmail.com> (tiny change)
+
+ * mail-source.el (mail-source-fetch-pop): Require pop3.
+ (mail-source-check-pop): Ditto.
+
+2005-10-20 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * rfc2047.el (rfc2047-decode-encoded-words): Fix the handling of
+ errors.
+
+2005-10-19 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * gnus-art.el (gnus-treat-strip-trailing-blank-lines)
+ (gnus-treat-strip-leading-blank-lines): Improve doc string.
+
+ * message.el (message-tool-bar-local-item-from-menu): Fix comment.
+
+2005-10-19 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * rfc2047.el (rfc2047-allow-incomplete-encoded-text): New variable.
+ (rfc2047-charset-to-coding-system): New function.
+ (rfc2047-decode-encoded-words): New function.
+ (rfc2047-decode-region): Use them.
+ (rfc2047-decode-cte): Remove.
+ (rfc2047-parse-and-decode): Remove.
+ (rfc2047-decode): Remove.
+
+2005-10-15 Kenichi Handa <handa(a)m17n.org>
+
+ * rfc2047.el (rfc2047-decode-cte): New function.
+ (rfc2047-decode-region): Change the way to decode successive
+ encoded-words: decode B- or Q-encoding in each encoded-word,
+ concatenate them, and decode it as charset.
+
+2005-10-17 Chong Yidong <cyd(a)stupidchicken.com>
+
+ * gnus-cus.el (gnus-custom-map): New variable. Bind mouse-1 to
+ widget-move-and-invoke.
+ (gnus-custom-mode): Use gnus-custom-map.
+
+2005-10-15 Bill Wohler <wohler(a)newt.com>
+
+ * message.el (message-tool-bar-map): Renamed image file from
+ mail_send to mail/send.
+
+2005-10-16 Masatake YAMATO <jet(a)gyve.org>
+
+ * message.el (message-expand-group): Pass the common
+ prefix substring of completion to `display-completion-list'.
+
+2005-10-09 Daniel Brockman <daniel(a)brockman.se>
+
+ * format-spec.el (format-spec): Propagate text properties of % spec.
+
+2005-01-21 Derek Atkins <warlord(a)MIT.EDU> (tiny change)
+
+ * pgg-pgp.el (pgg-pgp-decrypt-region): Use passphrase cache.
+
+2005-10-08 Simon Josefsson <jas(a)extundo.com>
+
+ * pgg-parse.el (top-level): Don't require custom, it is
+ autoloaded. (To sync with No Gnus.)
+
+2005-05-09 Simon Josefsson <jas(a)extundo.com>
+
+ * pgg-gpg.el (pgg-gpg-possibly-cache-passphrase): Fix PIN caching,
+ tiny patch from "Georg C. F. Greve" <greve(a)gnu.org>.
+
+2005-10-08 Simon Josefsson <jas(a)extundo.com>
+
+ * pgg-def.el (top-level): Don't require custom, it is
+ autoloaded. (To sync with No Gnus.)
+
+2005-10-07 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * Makefile.in (list-installed-shadows): New entry.
+ (install): Use it.
+ (remove-installed-shadows): New entry.
+
+ * dgnushack.el (dgnushack-default-load-path): New variable.
+ (dgnushack-find-lisp-shadows): New function.
+ (dgnushack-remove-lisp-shadows): New function.
+
+2005-10-04 David Hansen <david.hansen(a)gmx.net>
+
+ * nnrss.el (nnrss-request-article): Add support for the comments tag.
+ (nnrss-check-group): Ditto.
+
+2005-10-04 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * mm-url.el (mm-url-predefined-programs): Add switches for curl.
+
+ * gnus-util.el (gnus-remove-duplicates): Remove.
+
+ * nnmail.el (nnmail-article-group): Use mm-delete-duplicates
+ instead of gnus-remove-duplicates.
+
+ * message.el (message-remove-duplicates): Remove.
+ (message-idna-to-ascii-rhs-1): Use mm-delete-duplicates instead of
+ message-remove-duplicates.
+
+ * mm-util.el (mm-delete-duplicates): Use `delete-dups' if
+ available, else use implementation from `delete-dups'.
+
+2005-10-02 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * Makefile.in (install-el-elc): New entry.
+ (install): Use it so that .el files are necessarily installed.
+
+2005-09-30 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * time-date.el: Autoload parse-time-string, XEmacs needs it.
+
+2005-09-30 Stefan Monnier <monnier(a)iro.umontreal.ca>
+
+ * mm-decode.el (mm-inline-media-tests): Check presence of the diff-mode
+ function rather than the diff-mode.el package.
+ (mm-display-external): Use with-current-buffer.
+ (mm-viewer-completion-map, mm-viewer-completion-map):
+ Move initialization inside declaration.
+
+2005-09-28 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * message.el: Remove useless autoloads.
+
+2005-09-28 Simon Josefsson <jas(a)extundo.com>
+
+ * message.el (message-use-idna): Default to t.
+ (message-use-idna): Test whether encoding works too. Doc fix.
+
+2005-09-28 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * nntp.el (nntp-warn-about-losing-connection): Remove.
+
+2005-09-27 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * mm-uu.el (mm-uu-emacs-sources-regexp): Make variable
+ customizable. Change default value.
+ (mm-uu-diff-groups-regexp): Change default value.
+ (mm-uu-type-alist): Add doc string.
+ (mm-uu-configure): Add doc string. Make it interactive.
+ (mm-uu-diff-groups-regexp): Fix missing quotes from previous commit.
+
+2005-09-27 Simon Josefsson <jas(a)extundo.com>
+
+ * message.el (message-idna-to-ascii-rhs-1): Reformat.
+
+2005-09-27 Arne J,Ax(Brgensen <arne(a)arnested.dk>
+
+ * message.el (message-remove-duplicates): New function.
+ Implementation borrowed from `gnus-remove-duplicates'.
+ (message-idna-to-ascii-rhs): Also encode idna addresses in
+ Reply-To:, Mail-Reply-To: and Mail-Followup-To:.
+ (message-idna-to-ascii-rhs-1): When `message-use-idna' is 'ask
+ only ask about the same idna domain once per header and also tell
+ in what header to replace the idna domain.
+
+ * gnus-art.el (article-decode-idna-rhs): Also decode idna
+ addresses in Reply-To:, Mail-Reply-To: and Mail-Followup-To:.
+ (article-decode-idna-rhs): Fix regexp so that all idna-address in
+ a header is decoded and not just the last one.
+
+2005-09-27 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-art.el (gnus-mime-display-single): Don't modify text if it
+ has been decoded.
+
+ * mm-decode.el (mm-insert-part): Don't modify text if it has been
+ decoded.
+
+ * mm-view.el (mm-inline-text): Don't strip text props unless
+ decoding enriched or richtext parts.
+
+2005-09-25 Romain Francoise <romain(a)orebokech.com>
+
+ * gnus-agent.el (gnus-agent-expire-group, gnus-agent-expire):
+ * gnus-start.el (gnus-subscribe-interactively):
+ * gnus-uu.el (gnus-uu-grab-articles):
+ End `yes-or-no-p' and `y-or-n-p' prompts with question mark and
+ space.
+
+2005-09-24 Emilio C. Lopes <eclig(a)gmx.net>
+
+ * smime.el (smime-sign-buffer, smime-decrypt-buffer):
+ * mm-view.el (mm-view-pkcs7-decrypt):
+ * gnus-sum.el (gnus-summary-limit-to-extra)
+ (gnus-summary-respool-article, gnus-read-move-group-name):
+ * gnus-score.el (gnus-summary-increase-score):
+ * gnus-util.el (gnus-completing-read-with-default):
+ * gnus-art.el (gnus-read-save-file-name)
+ (gnus-summary-save-in-rmail, gnus-summary-save-in-mail)
+ (gnus-summary-save-in-file, gnus-summary-save-body-in-file):
+ * message.el (message-check-news-header-syntax):
+ Follow convention for reading with the minibuffer.
+
+2005-09-22 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * spam-report.el (spam-report-url-ping-plain):
+ Use gnus-extended-version as User-Agent.
+
+ * gnus-agent.el (gnus-agent-synchronize-flags): Explain why the
+ default value is nil.
+
+2005-09-20 Lars Magne Ingebrigtsen <larsi(a)gnus.org>
+
+ * gnus-agent.el (gnus-agent-synchronize-flags): Switch the
+ default to nil, to be able to use Gnus at all. If the default
+ switches to something else, then the function should be fixed not
+ be exceedingly slow.
+
+2005-09-19 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * mm-url.el (mm-url-decode-entities): Fix regexp.
+
+2005-09-18 Deepak Goel <deego(a)gnufans.org>
+
+ * sieve.el (sieve-help): Fix `message' call: first arg should be a
+ format spec.
+
+2005-09-16 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.el (gnus-group-startup-message): Bind image-load-path.
+
+2005-09-14 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-art.el (gnus-mime-display-part): Protect against broken
+ MIME messages.
+
+2005-09-13 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-sum.el (gnus-summary-edit-article-done): Remove text props
+ before parsing header.
+
+2005-09-10 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * spam-report.el (spam-report-gmane): Fix generation of spam
+ report URL.
+
+2005-09-10 Simon Josefsson <jas(a)extundo.com>
+
+ * gnus-agent.el (gnus-agent-synchronize-flags): Make the default
+ t, based on discussion on the ding list with Robert Epprecht
+ <epprecht(a)solnet.ch>.
+
+2005-09-07 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * spam-report.el (spam-report-gmane): Make it work without
+ X-Report-Spam header. Gmane now only provides Archived-At.
+ This is only used if `spam-report-gmane-use-article-number' is nil.
+ (spam-report-gmane-spam-header): Remove. Not used anymore.
+
+ * nnweb.el (nnweb-google-wash-article): Print a message if article
+ is not available.
+
+2005-09-07 TSUCHIYA Masatoshi <tsuchiya(a)namazu.org>
+
+ * gnus-art.el (gnus-mime-display-single): Decode text/* parts
+ content before displaying.
+
+2005-09-06 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * mml-smime.el: Remove defvar of gnus-extract-address-components.
+
+2005-09-06 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * mm-view.el (mm-display-inline-fontify): Disable support modes.
+
+ * lpath.el: Don't bind mc-pgp-always-sign, url-current-object,
+ url-package-name, url-package-version,
+ w3m-cid-retrieve-function-alist, w3m-current-buffer,
+ w3m-display-inline-images, and w3m-minor-mode-map.
+
+2005-09-05 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * message.el (message-tab-body-function): Fixed mismatched custom
+ type.
+
+ * gnus.el (gnus-group-change-level-function): Ditto.
+
+ * gnus-msg.el (gnus-outgoing-message-group): Ditto.
+
+ * gnus-art.el (gnus-signature-limit)
+ (gnus-article-mime-part-function): Ditto.
+
+2005-09-04 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * nnweb.el (nnweb-type-definition, nnweb-google-wash-article):
+ Make fetching article by MID work again for Google Groups. Added
+ FIXME concerning gnus-group-make-web-group.
+
+ * mml-smime.el (mml-smime-sign-query, mml-smime-get-dns-cert):
+ Don't depend on Gnus by using mail-extract-address-components if
+ gnus-extract-address-components is not bound.
+
+ * gnus.el (gnus-user-agent): Use list of symbols instead of
+ symbols. Display full version number for (S)XEmacs. Optionally
+ display (S)XEmacs codename.
+
+ * gnus-util.el (gnus-emacs-version): Update for new
+ `gnus-user-agent'.
+
+ * gnus-msg.el (gnus-extended-version): Make it possible to omit
+ Gnus version.
+
+2005-09-02 Hrvoje Niksic <hniksic(a)xemacs.org>
+
+ * mm-encode.el (mm-encode-content-transfer-encoding): Likewise
+ when encoding.
+
+ * mm-bodies.el (mm-decode-content-transfer-encoding):
+ De-canonicalize CRLF for all text content types, not just
+ text/plain.
+
+2005-09-02 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-sum.el (gnus-thread-hide-subtree): Doc fix.
+
+ * gnus-msg.el (gnus-inews-insert-gcc): Fix the mistake of using
+ list, not listp.
+
+2005-08-29 Romain Francoise <romain(a)orebokech.com>
+
+ * gnus-fun.el (gnus-convert-image-to-face-command): Fix typo in
+ docstring.
+ (gnus-face-from-file): Likewise.
+
+2005-08-31 Juanma Barranquero <lekktu(a)gmail.com>
+
+ * gnus-art.el (w3m-minor-mode-map):
+ * gnus-spec.el (gnus-newsrc-file-version):
+ * gnus-util.el (nnmail-active-file-coding-system)
+ (gnus-original-article-buffer, gnus-user-agent):
+ * gnus.el (gnus-ham-process-destinations)
+ (gnus-parameter-ham-marks-alist)
+ (gnus-parameter-spam-marks-alist, gnus-spam-autodetect)
+ (gnus-spam-autodetect-methods, gnus-spam-newsgroup-contents)
+ (gnus-spam-process-destinations, gnus-spam-process-newsgroups):
+ * mm-decode.el (gnus-current-window-configuration):
+ * mm-extern.el (gnus-article-mime-handles):
+ * mm-url.el (url-current-object, url-package-name)
+ (url-package-version):
+ * mm-view.el (gnus-article-mime-handles, gnus-newsgroup-charset)
+ (smime-keys, w3m-cid-retrieve-function-alist)
+ (w3m-current-buffer, w3m-display-inline-images)
+ (w3m-minor-mode-map):
+ * mml-smime.el (gnus-extract-address-components):
+ * mml.el (gnus-article-mime-handles, gnus-mouse-2)
+ (gnus-newsrc-hashtb, message-default-charset)
+ (message-deletable-headers, message-options)
+ (message-posting-charset, message-required-mail-headers)
+ (message-required-news-headers):
+ * mml1991.el (mc-pgp-always-sign):
+ * mml2015.el (mc-pgp-always-sign):
+ * nnheader.el (nnmail-extra-headers):
+ * rfc1843.el (gnus-decode-encoded-word-function)
+ (gnus-decode-header-function, gnus-newsgroup-name):
+ * spam-stat.el (gnus-original-article-buffer): Add defvars.
+
+2005-08-22 Karl Chen <quarl(a)cs.berkeley.edu> (tiny change)
+
+ * gnus-art.el (gnus-treatment-function-alist): Move date-lapsed to
+ the end of the date treatments.
+
+2005-08-15 Simon Josefsson <jas(a)extundo.com>
+
+ * pgg.el (url-insert-file-contents): Don't autoload it, Emacs has
+ it in url-handlers.el and XEmacs in url.el. Reported by Luca
+ Capello and Romain Francoise.
+ (pgg-fetch-key-function): Removed, not used?
+ (pgg-insert-url-with-w3): Require url, to get
+ url-insert-file-contents regardless of where it is defined.
+
+2005-08-08 Simon Josefsson <jas(a)extundo.com>
+
+ * pgg.el: Autoload url-insert-file-contents instead of loading
+ w3/url.
+ (pgg-insert-url-with-w3): Don't load url here.
+
+2005-08-05 Daiki Ueno <ueno(a)unixuser.org>
+
+ * mml2015.el (mml2015-pgg-sign): Make sure micalg is correct.
+
+ * pgg-parse.el (pgg-parse-hash-algorithm-alist): Add SHA-2.
+
+2005-08-06 Romain Francoise <romain(a)orebokech.com>
+
+ * message.el: Fix typo in docstring.
+
+2005-08-05 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * mm-bodies.el (mm-encode-body): Use coding system rather than
+ charset to encode text.
+
+ * mm-util.el (mm-find-mime-charset-region): Attempt to reduce the
+ number of charsets if utf-8 is available (XEmacs).
+
+2005-08-04 Lars Magne Ingebrigtsen <larsi(a)gnus.org>
+
+ * gnus-art.el (article-unsplit-urls): Don't anchor urls to the
+ start of the lines.
+ (gnus-picon-databases): Add /usr/share/picons.
+
+2005-08-04 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * gnus-art.el (gnus-button-valid-localpart-regexp): New variable
+ taken from `gnus-button-mid-or-mail-regexp'.
+ (gnus-button-mid-or-mail-regexp, gnus-button-alist): Use it.
+ (gnus-button-alist): Improve regexp for domain part of the MIDs
+ for news:localpart@domain buttons.
+ (gnus-button-ctan-directory-regexp): Update.
+
+ * message.el (message-kill-buffer): Raise the current frame.
+ (message-bury): Use `window-dedicated-p'.
+
+2005-08-02 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * sieve-manage.el (sieve-manage-interactive-login): Use
+ make-local-variable rather than make-variable-buffer-local.
+ (sieve-manage-open): Ditto.
+ (sieve-manage-authenticate): Ditto.
+
+ * mml.el (mml-generate-mime-1): Make the content type default to
+ text/plain if the filename is not specified.
+
+2005-08-01 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-uu.el (gnus-uu-save-article): Use insert-buffer-substring
+ instead of insert-buffer.
+
+ * message.el (message-yank-original): Ditto; set the mark at the
+ end of the yanked message.
+
+2005-07-29 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-art.el (gnus-article-next-page-1): Reduce the number of
+ lines to scroll rather than to stop it.
+
+ * mml.el (mml-generate-default-type): Add doc string.
+ (mml-generate-mime-1): Use mm-default-file-encoding or make it
+ default to application/octet-stream when determining the content
+ type if it is not specified for the part or the mml contents; add
+ a comment about mml-generate-default-type.
+
+2005-07-29 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * mml.el (mml-generate-mime-1): Use mm-default-file-encoding or
+ make it default to application/octet-stream when determining the
+ content type if it is not specified for the external contents.
+
+2005-07-28 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * rfc2231.el (rfc2231-parse-string): Take care that not only a
+ segmented parameter but also other parameters might be there.
+
+2005-07-27 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * mm-decode.el (mm-display-external): Delete temp file, directory
+ and buffer immediately if the external process is exited.
+
+2005-07-26 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-art.el (gnus-article-next-page-1): Don't scroll if there're
+ fewer lines than that of scroll-margin.
+ (gnus-article-prev-page): Narrow the range to bind scroll-in-place.
+
+2005-07-25 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-art.el (gnus-article-next-page): Revert.
+ (gnus-article-beginning-of-window): New macro.
+ (gnus-article-next-page-1): Use it.
+ (gnus-article-prev-page): Ditto.
+ (gnus-mime-save-part-and-strip): Use insert-buffer-substring
+ instead of insert-buffer.
+ (gnus-mime-delete-part): Ditto.
+ (gnus-article-edit-exit): Ditto.
+
+ * gnus-util.el (gnus-beginning-of-window): Remove.
+ (gnus-end-of-window): Remove.
+
+ * lpath.el: Don't bind scroll-margin.
+
+2005-07-25 Simon Josefsson <jas(a)extundo.com>
+
+ * pgg.el (pgg-insert-url-with-w3): Don't load w3, it is possible
+ to have the url package without w3. Reported by Daiki Ueno
+ <ueno(a)unixuser.org> and Luigi Panzeri <matley(a)muppetslab.org>.
+
+2005-07-21 Stefan Monnier <monnier(a)iro.umontreal.ca>
+
+ * mml.el (mml-minibuffer-read-disposition): Don't use inline by default
+ for text/rtf. Display default in prompt. Pass default for M-n.
+
+ * mm-uu.el (mm-uu-copy-to-buffer): Use with-current-buffer.
+
+2005-07-16 Romain Francoise <romain(a)orebokech.com>
+
+ * gnus-uu.el (gnus-uu-save-article): Use `message-make-date'
+ instead of `current-time-string' as the latter creates a time
+ string that is not RFC 2822 compliant (it lacks the zone).
+
+2005-07-16 Lars Magne Ingebrigtsen <larsi(a)gnus.org>
+
+ * gnus-msg.el (gnus-button-mailto): Remove
+ save-selected-window-window hackery because it relies on
+ save-selected-window internals.
+
+2005-07-15 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-art.el (gnus-article-next-page): Use gnus-end-of-window.
+ (gnus-article-next-page-1): Use gnus-beginning-of-window.
+ (gnus-article-prev-page): Ditto.
+
+ * gnus-util.el (gnus-beginning-of-window): New function.
+ (gnus-end-of-window): New function.
+
+ * lpath.el: Bind scroll-margin for XEmacs.
+
+2005-07-13 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-salt.el (gnus-pick-mode): Remove the 5th arg of
+ gnus-add-minor-mode.
+ (gnus-binary-mode): Ditto.
+
+ * gnus-topic.el (gnus-topic-mode): Ditto.
+
+2005-07-08 Ralf Angeli <angeli(a)iwi.uni-sb.de> (tiny change)
+
+ * gnus-art.el (gnus-article-next-page, gnus-article-next-page-1)
+ (gnus-article-prev-page): Take scroll-margin into consideration.
+
+2005-07-04 Lute Kamstra <lute(a)gnu.org>
+
+ Update FSF's address in GPL notices.
+
+2005-07-04 Juanma Barranquero <lekktu(a)gmail.com>
+
+ * gnus.el (gnus-exit):
+ * gnus-group.el (gnus-group-icons):
+ * nnmail.el (nnmail-prepare): Fix typos in docstrings.
+
+ * gnus-nocem.el (gnus-nocem):
+ * message.el (message-various, message-buffers, message-sending)
+ (message-interface, message-forwarding, message-insertion)
+ (message-headers, message-news, message-mail):
+ * pgg-gpg.el (pgg-gpg):
+ * pgg-parse.el (pgg-parse):
+ * pgg-pgp.el (pgg-pgp):
+ * pgg-pgp5.el (pgg-pgp5):
+ * pop3.el (pop3): Finish `defgroup' description with period.
+
+2005-07-01 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-art.el (article-display-face): Improve the efficiency.
+ (article-display-x-face): Ditto; remove grey x-face stuff.
+
+2005-06-30 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-art.el (article-display-face): Correct the position in
+ which Faces are inserted; use dolist.
+
+2005-06-29 Didier Verna <didier(a)xemacs.org>
+
+ * gnus-art.el (article-display-face): Display faces in correct
+ order.
+
+2005-06-29 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-nocem.el (gnus-nocem-verifyer): Default to pgg-verify.
+ (gnus-nocem-check-article): Fetch the Type header.
+ (gnus-nocem-message-wanted-p): Fix the way to examine types.
+ (gnus-nocem-verify-issuer): Use functionp instead of fboundp.
+ (gnus-nocem-enter-article): Make sure gnus-nocem-hashtb is initialized.
+
+ * pgg.el (pgg-verify): Return the verification result.
+
+2005-06-24 Juanma Barranquero <lekktu(a)gmail.com>
+
+ * gnus-art.el (gnus-article-mode): Set `nobreak-char-display', not
+ `show-nonbreak-escape'.
+
+2005-06-23 Lute Kamstra <lute(a)gnu.org>
+
+ * gnus-art.el (gnus-article-mode): Use kill-all-local-variables.
+
+ * dig.el (dig-mode):
+ * smime.el (smime-mode): Use gnus-run-mode-hooks.
+
+2005-06-21 Juanma Barranquero <lekktu(a)gmail.com>
+
+ * nnimap.el (nnimap-split-download-body): Fix spellings.
+
+2005-06-16 Juanma Barranquero <lekktu(a)gmail.com>
+
+ * gnus-art.el (gnus-article-encrypt-body):
+ * gnus-cus.el (gnus-score-customize):
+ * mm-extern.el (mm-extern-local-file, mm-inline-external-body):
+ * pop3.el (pop3-user): Don't use `format' on `error' arguments.
+
+2005-06-16 Miles Bader <miles(a)gnu.org>
+
+ * spam.el (spam): Remove "-face" suffix from face name.
+ (spam-face): New backward-compatibility alias for renamed face.
+ (spam-face, spam-initialize): Use renamed spam face.
+
+ * message.el (message-header-to, message-header-cc)
+ (message-header-subject, message-header-newsgroups)
+ (message-header-other, message-header-name)
+ (message-header-xheader, message-separator, message-cited-text)
+ (message-mml): Remove "-face" suffix from face names.
+ (message-header-to-face, message-header-cc-face)
+ (message-header-subject-face, message-header-newsgroups-face)
+ (message-header-other-face, message-header-name-face)
+ (message-header-xheader-face, message-separator-face)
+ (message-cited-text-face, message-mml-face):
+ New backward-compatibility aliases for renamed faces.
+ (message-font-lock-keywords): Use renamed message faces.
+
+ * sieve-mode.el (sieve-control-commands, sieve-action-commands)
+ (sieve-test-commands, sieve-tagged-arguments):
+ Remove "-face" suffix from face names.
+ (sieve-control-commands-face, sieve-action-commands-face)
+ (sieve-test-commands-face, sieve-tagged-arguments-face):
+ New backward-compatibility aliases for renamed faces.
+ (sieve-control-commands-face, sieve-action-commands-face)
+ (sieve-test-commands-face, sieve-tagged-arguments-face):
+ Use renamed sieve faces.
+
+ * gnus.el (gnus-group-news-1, gnus-group-news-1-empty)
+ (gnus-group-news-2, gnus-group-news-2-empty, gnus-group-news-3)
+ (gnus-group-news-3-empty, gnus-group-news-4)
+ (gnus-group-news-4-empty, gnus-group-news-5)
+ (gnus-group-news-5-empty, gnus-group-news-6)
+ (gnus-group-news-6-empty, gnus-group-news-low)
+ (gnus-group-news-low-empty, gnus-group-mail-1)
+ (gnus-group-mail-1-empty, gnus-group-mail-2)
+ (gnus-group-mail-2-empty, gnus-group-mail-3)
+ (gnus-group-mail-3-empty, gnus-group-mail-low)
+ (gnus-group-mail-low-empty, gnus-summary-selected)
+ (gnus-summary-cancelled, gnus-summary-high-ticked)
+ (gnus-summary-low-ticked, gnus-summary-normal-ticked)
+ (gnus-summary-high-ancient, gnus-summary-low-ancient)
+ (gnus-summary-normal-ancient, gnus-summary-high-undownloaded)
+ (gnus-summary-low-undownloaded)
+ (gnus-summary-normal-undownloaded, gnus-summary-high-unread)
+ (gnus-summary-low-unread, gnus-summary-normal-unread)
+ (gnus-summary-high-read, gnus-summary-low-read)
+ (gnus-summary-normal-read, gnus-splash):
+ Remove "-face" suffix from face names.
+ (gnus-group-news-1-face, gnus-group-news-1-empty-face)
+ (gnus-group-news-2-face, gnus-group-news-2-empty-face)
+ (gnus-group-news-3-face, gnus-group-news-3-empty-face)
+ (gnus-group-news-4-face, gnus-group-news-4-empty-face)
+ (gnus-group-news-5-face, gnus-group-news-5-empty-face)
+ (gnus-group-news-6-face, gnus-group-news-6-empty-face)
+ (gnus-group-news-low-face, gnus-group-news-low-empty-face)
+ (gnus-group-mail-1-face, gnus-group-mail-1-empty-face)
+ (gnus-group-mail-2-face, gnus-group-mail-2-empty-face)
+ (gnus-group-mail-3-face, gnus-group-mail-3-empty-face)
+ (gnus-group-mail-low-face, gnus-group-mail-low-empty-face)
+ (gnus-summary-selected-face, gnus-summary-cancelled-face)
+ (gnus-summary-high-ticked-face, gnus-summary-low-ticked-face)
+ (gnus-summary-normal-ticked-face)
+ (gnus-summary-high-ancient-face, gnus-summary-low-ancient-face)
+ (gnus-summary-normal-ancient-face)
+ (gnus-summary-high-undownloaded-face)
+ (gnus-summary-low-undownloaded-face)
+ (gnus-summary-normal-undownloaded-face)
+ (gnus-summary-high-unread-face, gnus-summary-low-unread-face)
+ (gnus-summary-normal-unread-face, gnus-summary-high-read-face)
+ (gnus-summary-low-read-face, gnus-summary-normal-read-face)
+ (gnus-splash-face):
+ New backward-compatibility aliases for renamed faces.
+ (gnus-group-startup-message): Use renamed gnus faces.
+
+ * gnus-srvr.el (gnus-server-agent, gnus-server-opened)
+ (gnus-server-closed, gnus-server-denied, gnus-server-offline)
+ (gnus-server-agent): Remove "-face" suffix from face names.
+ (gnus-server-agent-face, gnus-server-opened-face)
+ (gnus-server-closed-face, gnus-server-denied-face)
+ (gnus-server-offline-face):
+ New backward-compatibility aliases for renamed faces.
+ (gnus-server-agent-face, gnus-server-opened-face)
+ (gnus-server-closed-face, gnus-server-denied-face)
+ (gnus-server-offline-face): Use renamed gnus faces.
+
+ * gnus-picon.el (gnus-picon-xbm, gnus-picon):
+ Remove "-face" suffix from face names.
+ (gnus-picon-xbm-face, gnus-picon-face):
+ New backward-compatibility aliases for renamed faces.
+
+ * gnus-cite.el (gnus-cite-attribution, gnus-cite-1, gnus-cite-2)
+ (gnus-cite-3, gnus-cite-4, gnus-cite-5, gnus-cite-6)
+ (gnus-cite-7, gnus-cite-8, gnus-cite-9, gnus-cite-10)
+ (gnus-cite-11): Remove "-face" suffix from face names.
+ (gnus-cite-attribution-face, gnus-cite-face-1, gnus-cite-face-2)
+ (gnus-cite-face-3, gnus-cite-face-4, gnus-cite-face-5)
+ (gnus-cite-face-6, gnus-cite-face-7, gnus-cite-face-8)
+ (gnus-cite-face-9, gnus-cite-face-10, gnus-cite-face-11):
+ New backward-compatibility aliases for renamed faces.
+ (gnus-cite-attribution-face, gnus-cite-face-list)
+ (gnus-article-boring-faces): Use renamed gnus faces.
+
+ * gnus-art.el (gnus-signature, gnus-header-from)
+ (gnus-header-subject, gnus-header-newsgroups, gnus-header-name)
+ (gnus-header-content): Remove "-face" suffix from face names.
+ (gnus-signature-face, gnus-header-from-face)
+ (gnus-header-subject-face, gnus-header-newsgroups-face)
+ (gnus-header-name-face, gnus-header-content-face):
+ New backward-compatibility aliases for renamed faces.
+ (gnus-signature-face, gnus-header-face-alist): Use renamed gnus faces.
+
+ * gnus-sum.el (gnus-summary-selected-face)
+ (gnus-summary-highlight): Use renamed gnus faces.
+ * gnus-group.el (gnus-group-highlight): Likewise.
+
+2005-06-14 Juanma Barranquero <lekktu(a)gmail.com>
+
+ * gnus-sieve.el (gnus-sieve-article-add-rule):
+ * legacy-gnus-agent.el (gnus-agent-unlist-expire-days):
+ * spam-stat.el (spam-stat-buffer-change-to-spam)
+ (spam-stat-buffer-change-to-non-spam): Follow error conventions.
+
+ * message.el (message-is-yours-p):
+ * gnus-sum.el (gnus-auto-select-subject): Fix quoting in docstring.
+
+2005-06-14 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * mm-view.el (mm-inline-text): Withdraw the last change.
+
+2005-06-09 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * mm-view.el (mm-inline-text): Turn off adaptive-fill-mode while
+ executing enriched-decode.
+
+2005-06-04 Luc Teirlinck <teirllm(a)auburn.edu>
+
+ * gnus-art.el (article-update-date-lapsed): Use `save-match-data'.
+
+2005-06-04 Lute Kamstra <lute(a)gnu.org>
+
+ * nnfolder.el (nnfolder-read-folder): Make sure that undo
+ information is never recorded.
+
+2005-06-03 Stefan Monnier <monnier(a)iro.umontreal.ca>
+
+ * gnus-art.el (gnus-emphasis-alist): Disable the strikethru thingy.
+
+2005-06-02 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * pop3.el (pop3-md5): Run md5 in the binary mode.
+ (pop3-md5-program-args): New variable.
+
+ * starttls.el (starttls-set-process-query-on-exit-flag):
+ Use eval-and-compile.
+
+2005-05-31 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-art.el (article-display-x-face): Replace
+ process-kill-without-query by gnus-set-process-query-on-exit-flag.
+
+ * gnus-group.el: Bind gnus-cache-active-hashtb when compiling.
+
+ * gnus-util.el (gnus-set-process-query-on-exit-flag): Alias to
+ set-process-query-on-exit-flag or process-kill-without-query.
+
+ * html2text.el (html2text-fix-paragraphs): Use `while - re-search'
+ loop instead of replace-regexp.
+
+ * imap.el (imap-ssl-open): Use set-process-query-on-exit-flag
+ instead of process-kill-without-query if it is available.
+
+ * mm-util.el (mm-insert-file-contents): Bind find-file-hook
+ instead of find-file-hooks if it is available.
+
+ * mml1991.el: Bind pgg-default-user-id when compiling.
+
+ * mml2015.el: Bind pgg-default-user-id when compiling.
+
+ * nndraft.el (nndraft-request-associate-buffer):
+ Use write-contents-functions instead of write-contents-hooks if it is
+ available.
+
+ * nnheader.el (nnheader-find-file-noselect): Bind find-file-hook
+ instead of find-file-hooks if it is available.
+
+ * nntp.el (nntp-open-connection): Replace
+ process-kill-without-query by gnus-set-process-query-on-exit-flag.
+ (nntp-open-ssl-stream): Ditto.
+ (nntp-open-tls-stream): Ditto.
+
+ * pgg.el: Don't bind itimer vars; don't autoload itimer functions.
+ (pgg-run-at-time-1): New macro.
+ (pgg-run-at-time): Use it.
+
+ * starttls.el (starttls-set-process-query-on-exit-flag): Alias to
+ set-process-query-on-exit-flag or process-kill-without-query.
+ (starttls-open-stream-gnutls): Use it instead of
+ process-kill-without-query.
+ (starttls-open-stream): Ditto.
+
+2005-05-31 Simon Josefsson <jas(a)extundo.com>
+
+ * imap.el (imap-ssl-open): Use imap-process-connection-type,
+ instead of hard coding to nil.
+
+2005-05-31 Kevin Greiner <kgreiner(a)xpediantsolutions.com>
+
+ * gnus-group.el: Require gnus-sum and autoload functions to
+ resolve warnings when gnus-group.el compiled alone.
+
+2005-05-30 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * gnus-agent.el (gnus-agent-regenerate-group)
+ (gnus-agent-fetch-articles): Replace `string-to-int' by
+ `string-to-number'.
+ * gnus-art.el (gnus-button-fetch-group): Ditto.
+ * gnus-cache.el (gnus-cache-generate-active)
+ (gnus-cache-articles-in-group): Ditto.
+ * gnus-group.el (gnus-group-set-current-level)
+ (gnus-group-insert-group-line): Ditto.
+ * gnus-score.el (gnus-score-set-expunge-below)
+ (gnus-score-set-mark-below, gnus-summary-score-effect)
+ (gnus-summary-score-entry): Ditto.
+ * gnus-soup.el (gnus-soup-send-packet, gnus-soup-parse-areas)
+ (gnus-soup-pack): Ditto.
+ * gnus-spec.el (gnus-xmas-format): Ditto.
+ * gnus-start.el (gnus-newsrc-to-gnus-format): Ditto.
+ * gnus-sum.el (gnus-create-xref-hashtb): Ditto.
+ * gnus-uu.el (gnus-uu-expand-numbers): Ditto.
+ * nnbabyl.el (nnbabyl-article-group-number): Ditto.
+ * nndb.el (nndb-get-remote-expire-response): Ditto.
+ * nndiary.el (nndiary-parse-schedule-value)
+ (nndiary-string-to-number, nndiary-request-replace-article)
+ (nndiary-request-article): Ditto.
+ * nndoc.el (nndoc-rnews-body-end, nndoc-mbox-body-end): Ditto.
+ * nndraft.el (nndraft-articles, nndraft-request-group): Ditto.
+ * nneething.el (nneething-make-head): Ditto.
+ * nnfolder.el (nnfolder-request-article)
+ (nnfolder-retrieve-headers): Ditto.
+ * nnheader.el (nnheader-file-to-number): Ditto.
+ * nnkiboze.el (nnkiboze-request-article): Ditto.
+ * nnmail.el (nnmail-process-unix-mail-format)
+ (nnmail-process-babyl-mail-format): Ditto.
+ * nnmbox.el (nnmbox-read-mbox, nnmbox-article-group-number): Ditto.
+ * nnmh.el (nnmh-update-gnus-unreads, nnmh-active-number)
+ (nnmh-request-create-group, nnmh-request-list-1)
+ (nnmh-request-group, nnmh-request-article): Ditto.
+ * nnml.el (nnml-request-replace-article, nnml-request-article): Ditto.
+ * nnrss.el (nnrss-find-rss-via-syndic8): Ditto.
+ * nnsoup.el (nnsoup-make-active): Ditto.
+ * nnspool.el (nnspool-find-id, nnspool-request-group): Ditto.
+ * nntp.el (nntp-find-group-and-number)
+ (nntp-retrieve-headers-with-xover): Ditto.
+ * pgg-gpg.el (pgg-gpg-snarf-keys-region): Ditto.
+ * pgg-parse.el (pgg-read-body, pgg-read-bytes)
+ (pgg-format-key-identifier): Ditto.
+ * pop3.el (pop3-last, pop3-stat): Ditto.
+ * qp.el (quoted-printable-decode-region): Ditto.
+
+ * spam-report.el (spam-report-url-ping-mm-url): Use format instead
+ of concat.
+
+2005-05-30 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-agent.el (gnus-category-mode): Use gnus-run-mode-hooks.
+
+ * gnus-art.el (gnus-article-mode): Use gnus-run-mode-hooks.
+
+ * gnus-cus.el (gnus-custom-mode): Use gnus-run-mode-hooks.
+
+ * gnus-eform.el (gnus-edit-form-mode): Use gnus-run-mode-hooks.
+
+ * gnus-group.el (gnus-group-mode): Use gnus-run-mode-hooks.
+
+ * gnus-kill.el (gnus-kill-file-mode): Use gnus-run-mode-hooks.
+
+ * gnus-salt.el (gnus-tree-mode): Use gnus-run-mode-hooks.
+ (gnus-carpal-mode): Ditto.
+
+ * gnus-srvr.el (gnus-server-mode): Use gnus-run-mode-hooks.
+ (gnus-browse-mode): Ditto.
+
+ * gnus-sum.el (gnus-summary-mode): Use gnus-run-mode-hooks.
+
+ * gnus-util.el (gnus-run-mode-hooks): Save current buffer.
+
+2005-05-29 Richard M. Stallman <rms(a)gnu.org>
+
+ * gnus-cite.el (gnus-cite-add-face): Set overlay's evaporate property.
+
+2005-05-27 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-util.el (gnus-run-mode-hooks): New function.
+
+ * score-mode.el (gnus-score-mode): Use gnus-run-mode-hooks.
+
+ * dgnushack.el: Advise byte-optimize-form-code-walker to avoid the
+ ``...called for effect'' warnings for Emacs 21.4 as well as 21.3.
+
+2005-05-26 Luc Teirlinck <teirllm(a)auburn.edu>
+
+ * gnus-agent.el (gnus-agent-make-mode-line-string):
+ Use mode-line-highlight as mouse-face.
+
+2005-05-17 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * canlock.el (canlock): Change the parent group to news.
+
+ * deuglify.el (gnus-outlook-deuglify): Add :group.
+
+ * dig.el (dig): Add :group.
+
+ * gnus-art.el (gnus-inhibit-mime-unbuttonizing): Add :group.
+
+ * gnus-cite.el (gnus-cite-attribution-face): Add :group.
+ (gnus-cite-face-1, gnus-cite-face-2, gnus-cite-face-3): Ditto.
+ (gnus-cite-face-4, gnus-cite-face-5, gnus-cite-face-6): Ditto.
+ (gnus-cite-face-7, gnus-cite-face-8, gnus-cite-face-9): Ditto.
+ (gnus-cite-face-10, gnus-cite-face-11): Ditto.
+
+ * gnus-diary.el (gnus-diary): Add :group.
+
+ * gnus.el (gnus-group-news-1-face): Add :group.
+ (gnus-group-news-1-empty-face): Ditto.
+ (gnus-group-news-2-face, gnus-group-news-2-empty-face): Ditto.
+ (gnus-group-news-3-face, gnus-group-news-3-empty-face): Ditto.
+ (gnus-group-news-4-face, gnus-group-news-4-empty-face): Ditto.
+ (gnus-group-news-5-face, gnus-group-news-5-empty-face): Ditto.
+ (gnus-group-news-6-face, gnus-group-news-6-empty-face): Ditto.
+ (gnus-group-news-low-face, gnus-group-news-low-empty-face): Ditto.
+ (gnus-group-mail-1-face, gnus-group-mail-1-empty-face): Ditto.
+ (gnus-group-mail-2-face, gnus-group-mail-2-empty-face): Ditto.
+ (gnus-group-mail-3-face, gnus-group-mail-3-empty-face): Ditto.
+ (gnus-group-mail-low-face, gnus-group-mail-low-empty-face): Ditto.
+ (gnus-summary-selected-face, gnus-summary-cancelled-face): Ditto.
+ (gnus-summary-high-ticked-face): Ditto.
+ (gnus-summary-low-ticked-face): Ditto.
+ (gnus-summary-normal-ticked-face): Ditto.
+ (gnus-summary-high-ancient-face): Ditto.
+ (gnus-summary-low-ancient-face): Ditto.
+ (gnus-summary-normal-ancient-face): Ditto.
+ (gnus-summary-high-undownloaded-face): Ditto.
+ (gnus-summary-low-undownloaded-face): Ditto.
+ (gnus-summary-normal-undownloaded-face): Ditto.
+ (gnus-summary-high-unread-face): Ditto.
+ (gnus-summary-low-unread-face): Ditto.
+ (gnus-summary-normal-unread-face): Ditto.
+ (gnus-summary-high-read-face, gnus-summary-low-read-face): Ditto.
+ (gnus-summary-normal-read-face, gnus-splash-face): Ditto.
+
+ * message.el (message-minibuffer-local-map): Add :group.
+
+ * sieve-manage.el (sieve-manage-log): Add :group.
+ (sieve-manage-default-user): Diito.
+ (sieve-manage-server-eol, sieve-manage-client-eol): Ditto.
+ (sieve-manage-streams, sieve-manage-stream-alist): Ditto.
+ (sieve-manage-authenticators): Ditto.
+ (sieve-manage-authenticator-alist): Ditto.
+ (sieve-manage-default-port): Ditto.
+
+ * sieve-mode.el (sieve-control-commands-face): Add :group.
+ (sieve-action-commands-face): Ditto.
+ (sieve-test-commands-face): Ditto.
+ (sieve-tagged-arguments-face): Ditto.
+
+ * smime.el (smime): Add :group.
+
+ * spam-report.el (spam-report): Add :group.
+
+ * spam.el (spam, spam-face): Add :group.
+
+2005-05-26 Lute Kamstra <lute(a)gnu.org>
+
+ * score-mode.el (gnus-score-mode): Use run-mode-hooks.
+
+2005-05-16 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * dgnushack.el: Autoload mail-extract-address-components for XEmacs.
+
+ * gnus-art.el: Don't autoload mail-extract-address-components.
+
+ * gnus.el: Use eval-and-compile to autoload message-y-or-n-p.
+
+ * nndb.el: Don't declare the nndb back end two or more times; don't
+ autoload news-reply-mode, news-setup, cancel-timer and telnet.
+
+ * nntp.el: Autoload format-spec instead of format; use
+ eval-and-compile to evaluate autoload forms.
+
+ * spam-report.el (spam-report-process-queue): Use gnus-point-at-eol.
+
+2005-04-28 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-art.el (article-date-ut): Support converting date in
+ forwarded parts as well.
+ (gnus-article-save-original-date): New macro.
+ (gnus-display-mime): Use it.
+
+2005-04-28 David Hansen <david.hansen(a)physik.fu-berlin.de>
+
+ * nnrss.el (nnrss-check-group, nnrss-request-article): Support the
+ enclosure element of <item>.
+
+2005-04-24 Teodor Zlatanov <tzz(a)lifelogs.com>
+
+ * spam-report.el (spam-report-unplug-agent)
+ (spam-report-plug-agent, spam-report-deagentize)
+ (spam-report-agentize, spam-report-url-ping-temp-agent-function):
+ support for the Agent in spam-report: when unplugged, report to a
+ file; when plugged, submit all the requests.
+ [Added missing offline functionality from trunk.]
+
+2005-04-24 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * spam-report.el (spam-report-url-to-file)
+ (spam-report-requests-file): New function and variable for offline
+ reporting.
+ (spam-report-url-ping-function): Add `spam-report-url-to-file'
+ and user defined function.
+ (spam-report-process-queue): New function.
+ Process requests from `spam-report-requests-file'.
+ (spam-report-url-ping-mm-url): Autoload.
+ [Added missing offline functionality from trunk.]
+
+2005-04-18 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * qp.el (quoted-printable-encode-region): Save excursion.
+
+2005-04-13 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-art.el (gnus-mime-inline-part): Use mm-string-to-multibyte.
+
+ * lpath.el: Fbind display-time-event-handler; don't fbind
+ string-to-multibyte.
+
+ * qp.el (quoted-printable-encode-region): Use mm-string-to-multibyte.
+
+2005-04-13 Miles Bader <miles(a)gnu.org>
+
+ * mm-util.el (mm-string-to-multibyte): Use Gnus trunk definition.
+
+2005-04-12 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * nnrss.el (nnrss-node-text): Replace CRLFs (which might be
+ contained in text because xml.el decodes entities) with LFs.
+
+2005-04-11 Lute Kamstra <lute(a)gnu.org>
+
+ * message.el (message-make-date): Handle byte-compiler warnings
+ differently.
+ * nnimap.el (nnimap-date-days-ago): Ditto.
+
+2005-04-10 Stefan Monnier <monnier(a)iro.umontreal.ca>
+
+ * mm-util.el (mm-string-to-multibyte): New function.
+ (mm-detect-coding-region): Typo.
+
+2005-04-11 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-art.el (gnus-article-read-summary-keys): Fix misplaced parens.
+
+2005-04-06 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * mm-util.el (mm-coding-system-p): Don't return binary for the nil
+ argument in XEmacs.
+
+ * nnrss.el (nnrss-compatible-encoding-alist): New variable.
+ (nnrss-request-group): Decode group name first.
+ (nnrss-request-article): Make a text/plain article if mml-to-mime
+ failed.
+ (nnrss-get-encoding): Return a compatible encoding according to
+ nnrss-compatible-encoding-alist.
+ (nnrss-opml-export): Use dolist.
+ (nnrss-find-el): Use consp instead of listp.
+ (nnrss-order-hrefs): Use dolist.
+
+2005-04-06 Arne J,Ax(Brgensen <arne(a)arnested.dk>
+
+ * nnrss.el (nnrss-verbose): Remove.
+ (nnrss-request-group): Use `nnheader-message' instead.
+
+2005-04-06 Mark Plaksin <happy(a)usg.edu> (tiny change)
+
+ * nnrss.el (nnrss-verbose): New variable.
+ (nnrss-request-group): Make it say nnrss is requesting a group.
+
+2005-04-06 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * dgnushack.el: Autoload sgml-mode for XEmacs.
+
+ * gnus-agent.el (gnus-agent-group-path): Decode group name.
+ (gnus-agent-group-pathname): Ditto.
+
+ * gnus-cache.el (gnus-cache-file-name): Decode group name.
+
+ * gnus-group.el (gnus-group-line-format-alist): Use decoded group
+ name for only %g and %c.
+ (gnus-group-insert-group-line): Bind gnus-tmp-decoded-group
+ instead of gnus-tmp-group to decoded group name.
+ (gnus-group-make-group): Decode group name.
+ (gnus-group-delete-group): Ditto.
+ (gnus-group-make-rss-group): Exclude `/'s from group names;
+ register the group data after opening the nnrss group; unify
+ non-ASCII group names; encode group name.
+ (gnus-group-catchup-current): Decode group name.
+ (gnus-group-expire-articles-1): Ditto.
+ (gnus-group-set-current-level): Ditto.
+ (gnus-group-kill-group): Ditto.
+
+ * gnus-spec.el (gnus-update-format-specifications): Flush the
+ group format spec cache if it doesn't support decoded group names.
+
+ * lpath.el: Fbind detect-coding-string.
+
+ * mm-url.el (mm-url-predefined-programs): Add --silent arg to curl.
+
+ * nnrss.el: Require rfc2047 and mml.
+ (nnrss-file-coding-system): New variable.
+ (nnrss-format-string): Redefine it as an inline function.
+ (nnrss-decode-group-name): New function.
+ (nnrss-string-as-multibyte): Remove.
+ (nnrss-retrieve-headers): Decode group name; don't use
+ nnrss-format-string.
+ (nnrss-request-group): Decode group name.
+ (nnrss-request-article): Decode group name; allow a Message-ID as
+ well as an article number; don't use nnrss-format-string; encode a
+ Message-ID string which may contain non-ASCII characters; use
+ mml-to-mime to compose a MIME article; use search-forward instead
+ of re-search-forward.
+ (nnrss-request-expire-articles): Decode group name.
+ (nnrss-request-delete-group): Delete entries in nnrss-group-alist
+ as well; decode group name.
+ (nnrss-get-encoding): Fix regexp.
+ (nnrss-fetch): Clarify error message.
+ (nnrss-read-server-data): Use insert-file-contents instead of load;
+ bind file-name-coding-system; use multibyte buffer.
+ (nnrss-save-server-data): Insert newline; bind
+ coding-system-for-write to the value of nnrss-file-coding-system;
+ bind file-name-coding-system; add coding cookie.
+ (nnrss-read-group-data): Use insert-file-contents instead of load;
+ bind file-name-coding-system; use multibyte buffer.
+ (nnrss-save-group-data): Bind coding-system-for-write to the
+ value of nnrss-file-coding-system; bind file-name-coding-system.
+ (nnrss-decode-entities-string): Rename from n-d-e-unibyte-string;
+ make it work with non-ASCII text.
+ (nnrss-opml-export): Use mm-set-buffer-file-coding-system instead
+ of set-buffer-file-coding-system.
+ (nnrss-find-el): Check carefully whether there's a list of string
+ which old xml.el may return rather than a string; make it work
+ with old xml.el as well.
+
+ * time-date.el (time-to-seconds): Don't use the #xhhhh syntax
+ which Emacs 20 doesn't support.
+ (seconds-to-time, days-to-time, time-subtract, time-add): Ditto.
+
+2005-04-06 Tsuyoshi AKIHO <akiho(a)kawachi.zaq.ne.jp>
+
+ * gnus-sum.el (gnus-summary-walk-group-buffer): Decode group name.
+
+ * nnrss.el (nnrss-get-encoding): New function.
+ (nnrss-fetch): Use unibyte buffer initially; bind
+ coding-system-for-read while performing mm-url-insert; remove ^Ms;
+ decode contents according to the encoding attribute.
+ (nnrss-save-group-data): Add coding cookie.
+ (nnrss-mime-encode-string): New function.
+ (nnrss-check-group): Use it to encode subject and author.
+
+2005-04-06 Maciek Pasternacki <maciekp(a)japhy.fnord.org> (tiny change)
+
+ * nnrss.el (nnrss-fetch): Signal an error if w3-parse-buffer also
+ failed.
+
+2005-04-06 Jesper Harder <harder(a)ifa.au.dk>
+
+ * mm-util.el (mm-subst-char-in-string): Support inplace.
+
+ * nnrss.el: Pedantic docstring and whitespace fixes (courtesy of
+ checkdoc.el).
+ (nnrss-request-article): Cleanup.
+ (nnrss-request-delete-group): Use nnrss-make-filename.
+ (nnrss-read-server-data): Use nnrss-make-filename; use load.
+ (nnrss-save-server-data): Use nnrss-make-filename; use gnus-prin1.
+ (nnrss-read-group-data): Fix off-by-one error. From Joakim Verona
+ <joakim(a)verona.se>; hash on description if link is missing; use
+ nnrss-make-filename; use load.
+ (nnrss-save-group-data): Use nnrss-make-filename; use gnus-prin1.
+ (nnrss-make-filename): New function.
+ (nnrss-close): New function.
+ (nnrss-check-group): Hash on description if link is missing.
+ (nnrss-get-namespace-prefix): Use string= to compare strings!
+ Reported by David D. Smith <davidsmith(a)acm.org>.
+ (nnrss-opml-export): Turn on sgml-mode.
+
+2005-04-06 Mark A. Hershberger <mah(a)everybody.org>
+
+ * nnrss.el (nnrss-opml-import, nnrss-opml-export): New functions.
+
+2005-04-04 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * message.el (message-make-date): Add defvars in order to silence
+ the byte compiler inside the defun.
+
+ * nnimap.el (nnimap-date-days-ago): Ditto.
+
+ * gnus-demon.el (parse-time-string): Add autoload.
+
+ * gnus-delay.el (parse-time-string): Add autoload.
+
+ * gnus-art.el (parse-time-string): Add autoload.
+
+ * nnultimate.el (parse-time): Require for `parse-time-string'.
+
+2005-04-03 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus-sum.el (gnus-summary-make-menu-bar): Avoid the
+ "Unrecognized menu descriptor" error in XEmacs.
+
+2005-03-25 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * message.el (message-resend): Bind rfc2047-encode-encoded-words.
+
+ * mm-util.el (mm-replace-in-string): New function.
+ (mm-xemacs-find-mime-charset-1): Ignore errors while loading
+ latin-unity, which cannot be used with XEmacs 21.1.
+
+ * rfc2047.el (rfc2047-encode-function-alist): Rename from
+ rfc2047-encoding-function-alist in order to avoid conflicting with
+ the old version.
+ (rfc2047-encode-message-header): Remove useless goto-char.
+ (rfc2047-encodable-p): Don't move point.
+ (rfc2047-syntax-table): Treat `(' and `)' as is.
+ (rfc2047-encode-region): Concatenate words containing non-ASCII
+ characters in structured fields; don't encode space-delimited
+ ASCII words even in unstructured fields; don't break words at
+ char-category boundaries; encode encoded words in structured
+ fields; treat text within parentheses as special; show the
+ original text when error has occurred; move point to the end of
+ the region after encoding, suggested by IRIE Tetsuya
+ <irie(a)t.email.ne.jp>; treat backslash-quoted characters as
+ non-special; check carefully whether to encode special characters;
+ fix some kind of misconfigured headers; signal a real error if
+ debug-on-quit or debug-on-error is non-nil; don't infloop,
+ suggested by Hiroshi Fujishima <pooh(a)nature.tsukuba.ac.jp>; assume
+ the close parenthesis may be included in the encoded word; encode
+ bogus delimiters.
+ (rfc2047-encode-string): Use mm-with-multibyte-buffer.
+ (rfc2047-encode-max-chars): New variable.
+ (rfc2047-encode-1): New function.
+ (rfc2047-encode): Use it; encode text so that it occupies the
+ maximum width within 76-column; work correctly on Q encoding for
+ iso-2022-* charsets; fold the line before encoding; don't append a
+ space if the encoded word includes close parenthesis.
+ (rfc2047-fold-region): Use existing whitespace for LWSP; make it
+ sure not to break a line just after the header name.
+ (rfc2047-b-encode-region): Remove.
+ (rfc2047-b-encode-string): New function.
+ (rfc2047-q-encode-region): Remove.
+ (rfc2047-q-encode-string): New function.
+ (rfc2047-encode-parameter): New function.
+ (rfc2047-encoded-word-regexp): Don't use shy group.
+ (rfc2047-decode-region): Follow rfc2047-encoded-word-regexp change.
+ (rfc2047-parse-and-decode): Ditto.
+ (rfc2047-decode): Treat the ascii coding-system as raw-text by default.
+
+2005-03-25 Lars Magne Ingebrigtsen <larsi(a)gnus.org>
+
+ * rfc2047.el (rfc2047-encode-encoded-words): New variable.
+ (rfc2047-field-value): Strip props.
+ (rfc2047-encode-message-header): Disable header folding -- not
+ all headers can be folded, and this should be done by the message
+ composition mode. Probably. I think.
+ (rfc2047-encodable-p): Say that =? needs encoding.
+ (rfc2047-encode-region): Encode =? strings.
+
+2005-03-25 Jesper Harder <harder(a)ifa.au.dk>
+
+ * rfc2047.el (rfc2047-encoded-word-regexp): Support RFC 2231
+ language tags; remove unnecessary '+'. Reported by Stefan Wiens
+ <s.wi(a)gmx.net>.
+ (rfc2047-decode-string): Don't cons a string unnecessarily.
+ (rfc2047-parse-and-decode, rfc2047-decode): Use a character for
+ the encoding to avoid consing a string.
+ (rfc2047-decode): Use mm-subst-char-in-string instead of
+ mm-replace-chars-in-string.
+
+2005-03-25 TSUCHIYA Masatoshi <tsuchiya(a)namazu.org>
+
+ * rfc2047.el (rfc2047-encode): Use uppercase letters to specify
+ encodings of MIME-encoded words, in order to improve
+ interoperability with several broken MUAs.
+
+2005-03-21 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * gnus-srvr.el (gnus-browse-select-group): Add NUMBER argument and
+ pass it to `gnus-browse-read-group'.
+ (gnus-browse-read-group): Add NUMBER argument and pass it to
+ `gnus-group-read-ephemeral-group'.
+
+ * gnus-group.el (gnus-group-read-ephemeral-group): Add NUMBER
+ argument and pass it to `gnus-group-read-group'.
+
+2005-03-19 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * mm-util.el (mm-xemacs-find-mime-charset): Only call
+ mm-xemacs-find-mime-charset-1 if we have the mule feature
+ available at runtime.
+
+2005-03-25 Werner Lemberg <wl(a)gnu.org>
+
+ * nnmaildir.el: Replace `illegal' with `invalid'.
+
+2005-03-23 Lute Kamstra <lute(a)gnu.org>
+
+ * time-date.el: Add comment on time value formats.
+ Don't require parse-time.
+ (with-decoded-time-value): New macro.
+ (encode-time-value): New function.
+ (time-to-seconds, time-less-p, time-subtract, time-add): Use them.
+ (days-to-time): Return a valid time value when arg is huge.
+ (time-since): Use time-subtract.
+ (time-to-number-of-days): Use time-to-seconds.
+
+2005-03-22 Stefan Monnier <monnier(a)iro.umontreal.ca>
+
+ * gnus-start.el (gnus-display-time-event-handler):
+ Check display-time-timer at runtime rather than only at load time
+ in case display-time-mode is turned off in the mean time.
+
+2005-03-16 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * nnimap.el (nnimap-open-connection): Print which authinfo file is
+ used.
+
+ * nneething.el (nneething-map-file-directory): Derive from
+ `gnus-directory'.
+
+ * gnus-art.el (gnus-header-button-alist): Use `gnus-msg-mail' for
+ the To/Cc button.
+
+2005-03-15 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * nnmaildir.el (nnmaildir-request-accept-article):
+ Use `nnheader-cancel-timer' for compatibility with current XEmacs.
+
+2005-03-13 Steve Youngs <steve(a)sxemacs.org>
+
+ * gnus.el: Don't try and mark `gnus-agent-save-groups' as an
+ autoloaded function.
+ From: Andrey Slusar <anrays(a)gmail.com>.
+
2005-03-13 Steve Youngs <steve(a)sxemacs.org>
* mm-url.el: Require timer-funcs at compile time when in XEmacs
for `with-timeout'.
* mail-source.el: Require timer-funcs at compile time when in
- XEmacs for `run-with-idle-timer'.
+ XEmacs for `run-with-idle-timer'.
* gnus-async.el: Ditto.
* dgnushack.el: No need to ignore `run-with-idle-timer', XEmacs
- has this function now.
+ has this function now.
+
+2005-03-16 Lute Kamstra <lute(a)gnu.org>
+
+ * message.el (message-make-date): Require parse-time.
2005-03-10 Stefan Monnier <monnier(a)iro.umontreal.ca>
@@ -17,8 +1561,7 @@
2005-03-10 Arne J,Ax(Brgensen <arne(a)arnested.dk> (tiny change)
- * nnimap.el (nnimap-retrieve-headers-from-server): Fix off-by-one
- flaw.
+ * nnimap.el (nnimap-retrieve-headers-from-server): Fix off-by-one flaw.
2005-03-08 Bjorn Solberg <bjorn_ding(a)hekneby.org> (tiny change)
@@ -359,7 +1902,7 @@
2004-11-04 Katsumi Yamaoka <yamaoka(a)jpl.org>
- * gnus-art. (gnus-article-edit-article): Don't associate the
+ * gnus-art.el (gnus-article-edit-article): Don't associate the
article buffer with a draft file. This is a temporary measure
against the 2004-08-22 change to gnus-article-edit-mode.
@@ -585,7 +2128,7 @@
unless plugged. Disable the agent so that an open failure causes
an error.
-2004-10-18 Kevin Greiner <kevin.greiner(a)compsol.cc> for Reiner Steib
<Reiner.Steib(a)gmx.de>
+2004-10-18 Reiner Steib <Reiner.Steib(a)gmx.de>
* gnus-agent.el (gnus-agent-fetched-hook): Add :version.
(gnus-agent-go-online): Change :version.
@@ -627,21 +2170,21 @@
(gnus-convert-mark-converter-prompt)
(gnus-convert-converter-needs-prompt): Fix use of property list.
-2004-10-18 Kevin Greiner <kevin.greiner(a)compsol.cc> for Katsumi Yamaoka
<yamaoka(a)jpl.org>
+2004-10-18 Katsumi Yamaoka <yamaoka(a)jpl.org>
* gnus-agent.el (gnus-agent-restore-gcc): Use ^ and regexp-quote.
-2004-10-18 Kevin Greiner <kevin.greiner(a)compsol.cc> for Lars Magne Ingebrigtsen
<larsi(a)gnus.org>
+2004-10-18 Lars Magne Ingebrigtsen <larsi(a)gnus.org>
* gnus-start.el (gnus-get-unread-articles-in-group): Don't do
stuff for non-living groups.
-2004-10-18 Kevin Greiner <kevin.greiner(a)compsol.cc> for Lars Magne Ingebrigtsen
<larsi(a)gnus.org>
+2004-10-18 Lars Magne Ingebrigtsen <larsi(a)gnus.org>
* gnus-agent.el (gnus-agent-synchronize-flags): Default to nil.
(gnus-agent-regenerate-group): Using nil messages aren't valid.
-2004-10-18 Kevin Greiner <kevin.greiner(a)compsol.cc> for Lars Magne Ingebrigtsen
<larsi(a)gnus.org>
+2004-10-18 Lars Magne Ingebrigtsen <larsi(a)gnus.org>
* gnus-agent.el (gnus-agent-read-agentview):
Inline gnus-uncompress-range.
@@ -658,7 +2201,7 @@
message-send-mail-function. The change makes the agent real-time
responsive to user changes to message-send-mail-function.
-2004-10-18 Kevin Greiner <kevin.greiner(a)compsol.cc> for Reiner Steib
<Reiner.Steib(a)gmx.de>
+2004-10-18 Reiner Steib <Reiner.Steib(a)gmx.de>
* gnus-start.el (gnus-get-unread-articles): Fix last commit.
@@ -699,12 +2242,12 @@
* gnus-util.el (gnus-rename-file): New function.
-2004-10-18 Kevin Greiner <kevin.greiner(a)compsol.cc> for Katsumi Yamaoka
<yamaoka(a)jpl.org>
+2004-10-18 Katsumi Yamaoka <yamaoka(a)jpl.org>
* gnus-agent.el (gnus-agent-regenerate-group): Activate the group
when the group's active is not available.
-2004-10-18 Kevin Greiner <kevin.greiner(a)compsol.cc> for Katsumi Yamaoka
<yamaoka(a)jpl.org>
+2004-10-18 Katsumi Yamaoka <yamaoka(a)jpl.org>
* gnus-agent.el (gnus-agent-read-agentview): Add a missing arg to
error.
1.6 +24 -13 XEmacs/packages/xemacs-packages/gnus/lisp/GNUS-NEWS
Index: GNUS-NEWS
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/GNUS-NEWS,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- GNUS-NEWS 2004/06/07 02:39:30 1.5
+++ GNUS-NEWS 2005/11/15 03:45:41 1.6
@@ -1,11 +1,21 @@
GNUS NEWS -- history of user-visible changes.
-Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005 Free Software Foundation, Inc.
See the end for copying conditions.
Please send Gnus bug reports to bugs(a)gnus.org.
For older news, see Gnus info node "New Features".
+* Installation Changes
+
+** Lisp files are now installed in .../site-lisp/gnus/ by default.
+It defaulted to .../site-lisp/ formerly. In addition to this, the new
+installer issues a warning if the other Gnus installations which will
+shadow the latest one are detected. You can then remove those shadows
+manually or remove them using `make remove-installed-shadows'.
+
+
* Changes in Oort Gnus
** `F' (`gnus-article-followup-with-original') and `R'
@@ -62,7 +72,7 @@ picons, install the picons database from
and point `gnus-picon-databases' to that location.
-** If the new option `gnus-treat-body-boundary' is `head', a boundary
+** If the new option `gnus-treat-body-boundary' is `head', a boundary
line is drawn at the end of the headers.
** Retrieval of charters and control messages
@@ -77,7 +87,7 @@ for sending yourself reminders. Setup w
** If `auto-compression-mode' is enabled, attachments are automatically
decompressed when activated.
-** If the new option `nnml-use-compressed-files' is non-nil,
+** If the new option `nnml-use-compressed-files' is non-nil,
the nnml back end allows compressed message files.
** Signed article headers (X-PGP-Sig) can be verified with `W p'.
@@ -91,24 +101,24 @@ Do you often find yourself replying to n
the new option `gnus-confirm-mail-reply-to-news' is just the thing for
you.
-** If the new option `gnus-summary-display-while-building' is non-nil,
+** If the new option `gnus-summary-display-while-building' is non-nil,
the summary buffer is shown and updated as it's being built.
** The new `recent' mark "." indicates newly arrived messages (as
opposed to old but unread messages).
-** The new option `gnus-gcc-mark-as-read' automatically marks
+** The new option `gnus-gcc-mark-as-read' automatically marks
Gcc articles as read.
** The nndoc back end now supports mailman digests and exim bounces.
-** Gnus supports RFC 2369 mailing list headers, and adds a number of
+** Gnus supports RFC 2369 mailing list headers, and adds a number of
related commands in mailing list groups.
** The Date header can be displayed in a format that can be read aloud
in English, see `gnus-treat-date-english'.
-** The envelope sender address can be customized when using Sendmail, see
+** The envelope sender address can be customized when using Sendmail, see
`message-sendmail-envelope-from'.
** diffs are automatically highlighted in groups matching
@@ -141,10 +151,10 @@ The new make.bat makes make-x.bat superf
** Support for non-ASCII domain names
Message supports non-ASCII domain names in From:, To: and Cc: and will
-query you whether to perform encoding when you try to send a message.
-The variable `message-use-idna' controls this. Gnus will also decode
-non-ASCII domain names in From:, To: and Cc: when you view a message.
-The variable `gnus-use-idna' controls this.
+encode them when you try to send a message. The variable
+`message-use-idna' controls this. Gnus will also decode non-ASCII
+domain names in From:, To: and Cc: when you view a message. The
+variable `gnus-use-idna' controls this.
** Better handling of Microsoft citation styles
@@ -488,7 +498,7 @@ If you used procmail like in
(setq nnmail-procmail-directory "~/mail/incoming/")
(setq nnmail-procmail-suffix "\\.in")
-this now has changed to
+this now has changed to
(setq mail-sources
'((directory :path "~/mail/incoming/"
@@ -527,7 +537,8 @@ ever-changing layouts.
----------------------------------------------------------------------
Copyright information:
-Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005 Free Software Foundation, Inc.
Permission is granted to anyone to make or distribute verbatim copies
of this document as received, in any medium, provided that the
1.4 +6 -4 XEmacs/packages/xemacs-packages/gnus/lisp/binhex.el
Index: binhex.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/binhex.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- binhex.el 2004/09/28 02:21:02 1.3
+++ binhex.el 2005/11/15 03:45:41 1.4
@@ -1,6 +1,8 @@
;;; binhex.el --- elisp native binhex decode
-;; Copyright (c) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Shenghuo Zhu <zsh(a)cs.rochester.edu>
;; Keywords: binhex news
@@ -18,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -50,7 +52,7 @@ input and write the converted data to it
(defcustom binhex-use-external
(executable-find binhex-decoder-program)
"*Use external binhex program."
- :version "21.4"
+ :version "22.1"
:group 'gnus-extract
:type 'boolean)
1.5 +5 -5 XEmacs/packages/xemacs-packages/gnus/lisp/canlock.el
Index: canlock.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/canlock.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- canlock.el 2005/03/13 00:23:22 1.4
+++ canlock.el 2005/11/15 03:45:42 1.5
@@ -1,7 +1,7 @@
;;; canlock.el --- functions for Cancel-Lock feature
-;; Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Katsumi Yamaoka <yamaoka(a)jpl.org>
;; Keywords: news, cancel-lock, hmac, sha1, rfc2104
@@ -18,8 +18,8 @@
;; You should have received a copy of the GNU General Public License
;; along with this program; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -50,7 +50,7 @@
(defgroup canlock nil
"The Cancel-Lock feature."
- :group 'applications)
+ :group 'news)
(defcustom canlock-password nil
"Password to use when signing a Cancel-Lock or a Cancel-Key header."
1.3 +4 -3 XEmacs/packages/xemacs-packages/gnus/lisp/compface.el
Index: compface.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/compface.el,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- compface.el 2004/09/28 02:21:02 1.2
+++ compface.el 2005/11/15 03:45:42 1.3
@@ -1,6 +1,7 @@
;;; compface.el --- functions for converting X-Face headers
-;; Copyright (C) 2002 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -18,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.5 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/deuglify.el
Index: deuglify.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/deuglify.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- deuglify.el 2005/03/13 00:23:22 1.4
+++ deuglify.el 2005/11/15 03:45:42 1.5
@@ -1,6 +1,6 @@
;;; deuglify.el --- deuglify broken Outlook (Express) articles
-;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
;; Copyright (C) 2001, 2002 Raymond Scholz
;; Author: Raymond Scholz <rscholz(a)zonix.de>
@@ -22,8 +22,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -231,7 +231,8 @@
(defgroup gnus-outlook-deuglify nil
"Deuglify articles generated by broken user agents like MS Outlook
(Express)."
- :version "22.1")
+ :version "22.1"
+ :group 'gnus)
;;;###autoload
(defcustom gnus-outlook-deuglify-unwrap-min 45
1.7 +86 -4 XEmacs/packages/xemacs-packages/gnus/lisp/dgnushack.el
Index: dgnushack.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/dgnushack.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- dgnushack.el 2005/03/13 00:23:22 1.6
+++ dgnushack.el 2005/11/15 03:45:42 1.7
@@ -1,5 +1,6 @@
;;; dgnushack.el --- a hack to set the load path for byte-compiling
-;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003
+;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003,
+;; 2004, 2005
;; Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
@@ -20,13 +21,15 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
;;; Code:
+(defvar dgnushack-default-load-path (copy-sequence load-path))
+
(defalias 'facep 'ignore)
(require 'cl)
@@ -127,7 +130,7 @@
(when (and (not (featurep 'xemacs))
(= emacs-major-version 21)
- (= emacs-minor-version 3)
+ (>= emacs-minor-version 3)
(condition-case code
(let ((byte-compile-error-on-warn t))
(byte-optimize-form (quote (pop x)) t)
@@ -202,6 +205,7 @@ than subr.el."
(autoload 'dolist "cl-macs" nil nil 'macro)
(autoload 'enriched-decode "enriched")
(autoload 'info "info" nil t)
+ (autoload 'mail-extract-address-components "mail-extr")
(autoload 'mail-fetch-field "mail-utils")
(autoload 'make-annotation "annotations")
(autoload 'make-display-table "disp-table")
@@ -215,6 +219,7 @@ than subr.el."
(if (emacs-version>= 21 5)
(autoload 'setenv "process" nil t)
(autoload 'setenv "env" nil t))
+ (autoload 'sgml-mode "psgml" nil t)
(autoload 'smtpmail-send-it "smtpmail")
(autoload 'sort-numeric-fields "sort" nil t)
(autoload 'sort-subr "sort")
@@ -421,6 +426,83 @@ Modify to suit your needs."))
;;; no-update-autoloads: t
;;; End:
;;; gnus-load.el ends here"))))
+
+(defun dgnushack-find-lisp-shadows (&optional lispdir)
+ "Return a list of directories in which other Gnus installations exist.
+This function looks for the other Gnus installations which will shadow
+the new Gnus Lisp modules which have been installed in LISPDIR, using
+the default `load-path'. The return value will make sense only when
+LISPDIR is existent and is listed in the default `load-path'. Assume
+LISPDIR will be prepended to `load-path' by a user if the default
+`load-path' does not contain it."
+ (unless lispdir
+ (setq lispdir (getenv "lispdir")))
+ (when (and lispdir (file-directory-p lispdir))
+ (setq lispdir (file-truename (directory-file-name lispdir)))
+ (let ((indices '("gnus.elc" "gnus.el"
"gnus.el.bz2" "gnus.el.gz"
+ "message.elc" "message.el" "message.el.bz2"
+ "message.el.gz"))
+ (path (delq nil (mapcar
+ (lambda (p)
+ (condition-case nil
+ (when (and p (file-directory-p p))
+ (file-truename (directory-file-name p)))
+ (error nil)))
+ dgnushack-default-load-path)))
+ rest elcs)
+ (while path
+ (setq rest (cons (car path) rest)
+ path (delete (car rest) (cdr path))))
+ (setq path (nreverse (cdr (member lispdir rest)))
+ rest nil)
+ (while path
+ (setq elcs indices)
+ (while elcs
+ (when (file-exists-p (expand-file-name (pop elcs) (car path)))
+ (setq rest (cons (car path) rest)
+ elcs nil)))
+ (setq path (cdr path)))
+ (prog1
+ (setq path (nreverse rest))
+ (when path
+ (let (print-level print-length)
+ (princ (concat "\n\
+WARNING: The other Gnus installation" (if (cdr path) "s have" "
has") "\
+ been detected in:\n\n " (mapconcat 'identity path "\n ")
"\n\n\
+You will need to modify the run-time `load-path', remove them manually,
+or remove them using `make remove-installed-shadows'.\n\n"))))))))
+
+(defun dgnushack-remove-lisp-shadows (&optional lispdir)
+ "Remove the other Gnus installations which shadow the recent one."
+ (let ((path (with-temp-buffer
+ (let ((standard-output (current-buffer)))
+ (dgnushack-find-lisp-shadows lispdir))))
+ elcs files shadows file)
+ (when path
+ (unless (setq elcs (directory-files srcdir nil "\\.elc\\'"))
+ (error "You should build .elc files first."))
+ (setq files
+ (apply
+ 'append
+ (mapcar
+ (lambda (el)
+ (list (concat el "c") el (concat el ".bz2") (concat el
".gz")))
+ (append
+ (list (file-name-nondirectory dgnushack-gnus-load-file)
+ (file-name-nondirectory dgnushack-cus-load-file))
+ (mapcar (lambda (elc) (substring elc 0 -1)) elcs)))))
+ (while path
+ (setq shadows files)
+ (while shadows
+ (setq file (expand-file-name (pop shadows) (car path)))
+ (when (file-exists-p file)
+ (princ (concat " Removing " file "..."))
+ (condition-case nil
+ (progn
+ (delete-file file)
+ (princ "done\n"))
+ (error (princ "failed\n")))))
+ (setq path (cdr path))))))
;;; dgnushack.el ends here
1.4 +4 -3 XEmacs/packages/xemacs-packages/gnus/lisp/earcon.el
Index: earcon.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/earcon.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- earcon.el 2004/09/28 02:21:02 1.3
+++ earcon.el 2005/11/15 03:45:42 1.4
@@ -1,6 +1,7 @@
;;; earcon.el --- Sound effects for messages
-;; Copyright (C) 1996, 2000, 2001, 2003 Free Software Foundation
+;; Copyright (C) 1996, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Steven L. Baur <steve(a)miranova.com>
@@ -18,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
;; This file provides access to sound effects in Gnus.
1.6 +39 -33 XEmacs/packages/xemacs-packages/gnus/lisp/flow-fill.el
Index: flow-fill.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/flow-fill.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- flow-fill.el 2005/03/13 00:23:22 1.5
+++ flow-fill.el 2005/11/15 03:45:42 1.6
@@ -1,6 +1,7 @@
;;; flow-fill.el --- interpret RFC2646 "flowed" text
-;; Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Simon Josefsson <jas(a)pdc.kth.se>
;; Keywords: mail
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -160,38 +161,43 @@ RFC 2646 suggests 66 characters for read
(defvar show-trailing-whitespace))
(defvar fill-flowed-encode-tests
- '(
+ `(
;; The syntax of each list element is:
;; (INPUT . EXPECTED-OUTPUT)
- ("> Thou villainous ill-breeding spongy dizzy-eyed
-> reeky elf-skinned pigeon-egg!
->> Thou artless swag-bellied milk-livered
->> dismal-dreaming idle-headed scut!
->>> Thou errant folly-fallen spleeny reeling-ripe
->>> unmuzzled ratsbane!
->>>> Henceforth, the coding style is to be strictly
->>>> enforced, including the use of only upper case.
->>>>> I've noticed a lack of adherence to the coding
->>>>> styles, of late.
->>>>>> Any complaints?
-" . "> Thou villainous ill-breeding spongy dizzy-eyed reeky elf-skinned
-> pigeon-egg!
->> Thou artless swag-bellied milk-livered dismal-dreaming idle-headed
->> scut!
->>> Thou errant folly-fallen spleeny reeling-ripe unmuzzled ratsbane!
->>>> Henceforth, the coding style is to be strictly enforced,
->>>> including the use of only upper case.
->>>>> I've noticed a lack of adherence to the coding styles, of
late.
->>>>>> Any complaints?
-")
-; ("
-;> foo
-;>
-;>
-;> bar
-;" . "
-;> foo bar
-;")
+ (,(concat
+ "> Thou villainous ill-breeding spongy dizzy-eyed \n"
+ "> reeky elf-skinned pigeon-egg! \n"
+ ">> Thou artless swag-bellied milk-livered \n"
+ ">> dismal-dreaming idle-headed scut!\n"
+ ">>> Thou errant folly-fallen spleeny reeling-ripe \n"
+ ">>> unmuzzled ratsbane!\n"
+ ">>>> Henceforth, the coding style is to be strictly \n"
+ ">>>> enforced, including the use of only upper case.\n"
+ ">>>>> I've noticed a lack of adherence to the coding
\n"
+ ">>>>> styles, of late.\n"
+ ">>>>>> Any complaints?")
+ .
+ ,(concat
+ "> Thou villainous ill-breeding spongy dizzy-eyed reeky
elf-skinned\n"
+ "> pigeon-egg! \n"
+ ">> Thou artless swag-bellied milk-livered dismal-dreaming
idle-headed\n"
+ ">> scut!\n"
+ ">>> Thou errant folly-fallen spleeny reeling-ripe unmuzzled
ratsbane!\n"
+ ">>>> Henceforth, the coding style is to be strictly
enforced,\n"
+ ">>>> including the use of only upper case.\n"
+ ">>>>> I've noticed a lack of adherence to the coding
styles, of late.\n"
+ ">>>>>> Any complaints?\n"
+ ))
+ ;; (,(concat
+ ;; "\n"
+ ;; "> foo\n"
+ ;; "> \n"
+ ;; "> \n"
+ ;; "> bar\n")
+ ;; .
+ ;; ,(concat
+ ;; "\n"
+ ;; "> foo bar\n"))
))
(defun fill-flowed-test ()
1.4 +16 -6 XEmacs/packages/xemacs-packages/gnus/lisp/format-spec.el
Index: format-spec.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/format-spec.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- format-spec.el 2004/09/28 02:21:03 1.3
+++ format-spec.el 2005/11/15 03:45:43 1.4
@@ -1,6 +1,8 @@
;;; format-spec.el --- functions for formatting arbitrary formatting strings
-;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: tools
@@ -18,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -31,7 +33,8 @@
"Return a string based on FORMAT and SPECIFICATION.
FORMAT is a string containing `format'-like specs like \"bash %u %k\",
while SPECIFICATION is an alist mapping from format spec characters
-to values."
+to values. Any text properties on a %-spec itself are propagated to
+the text that it generates."
(with-temp-buffer
(insert format)
(goto-char (point-min))
@@ -45,10 +48,17 @@ to values."
(let* ((num (match-string 1))
(spec (string-to-char (match-string 2)))
(val (cdr (assq spec specification))))
- (delete-region (1- (match-beginning 0)) (match-end 0))
(unless val
(error "Invalid format character: %s" spec))
- (insert (format (concat "%" num "s") val))))
+ ;; Pad result to desired length.
+ (let ((text (format (concat "%" num "s") val)))
+ ;; Insert first, to preserve text properties.
+ (insert-and-inherit text)
+ ;; Delete the specifier body.
+ (delete-region (+ (match-beginning 0) (length text))
+ (+ (match-end 0) (length text)))
+ ;; Delete the percent sign.
+ (delete-region (1- (match-beginning 0)) (match-beginning 0)))))
;; Signal an error on bogus format strings.
(t
(error "Invalid format string"))))
1.8 +20 -14 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-agent.el
Index: gnus-agent.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-agent.el,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -p -r1.7 -r1.8
--- gnus-agent.el 2005/03/13 00:23:22 1.7
+++ gnus-agent.el 2005/11/15 03:45:43 1.8
@@ -1,7 +1,8 @@
;;; gnus-agent.el --- unplugged support for Gnus
-;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; This file is part of GNU Emacs.
@@ -17,8 +18,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -114,9 +115,11 @@ If nil, only read articles will be expir
:group 'gnus-agent
:type 'function)
-(defcustom gnus-agent-synchronize-flags nil
+(defcustom gnus-agent-synchronize-flags t
"Indicate if flags are synchronized when you plug in.
If this is `ask' the hook will query the user."
+ ;; If the default switches to something else than nil, then the function
+ ;; should be fixed not be exceedingly slow. See 2005-09-20 ChangeLog entry.
:version "21.1"
:type '(choice (const :tag "Always" t)
(const :tag "Never" nil)
@@ -561,7 +564,8 @@ manipulated as follows:
(if (and (fboundp 'propertize)
(fboundp 'make-mode-line-mouse-map))
(propertize string 'local-map
- (make-mode-line-mouse-map mouse-button mouse-func))
+ (make-mode-line-mouse-map mouse-button mouse-func)
+ 'mouse-face 'mode-line-highlight)
string))
(defun gnus-agent-toggle-plugged (set-to)
@@ -1371,7 +1375,7 @@ downloaded into the agent."
(nnheader-translate-file-chars
(nnheader-replace-duplicate-chars-in-string
(nnheader-replace-chars-in-string
- (gnus-group-real-name group)
+ (gnus-group-real-name (gnus-group-decoded-name group))
?/ ?_)
?. ?_)))
(if (or nnmail-use-long-file-names
@@ -1387,8 +1391,10 @@ downloaded into the agent."
;; unplugged. The agent must, therefore, use the same directory
;; while plugged.
(let ((gnus-command-method (or gnus-command-method
- (gnus-find-method-for-group group))))
- (nnmail-group-pathname (gnus-group-real-name group) (gnus-agent-directory))))
+ (gnus-find-method-for-group group))))
+ (nnmail-group-pathname (gnus-group-real-name
+ (gnus-group-decoded-name group))
+ (gnus-agent-directory))))
(defun gnus-agent-get-function (method)
(if (gnus-online method)
@@ -1537,7 +1543,7 @@ downloaded into the agent."
(while (looking-at "\\([^: \n]+\\):\\([0-9]+\\)
*")
(push (cons (buffer-substring (match-beginning 1)
(match-end 1))
- (string-to-int
+ (string-to-number
(buffer-substring (match-beginning 2)
(match-end 2))))
crosses)
@@ -2549,7 +2555,7 @@ The following commands are available:
(buffer-disable-undo)
(setq truncate-lines t)
(setq buffer-read-only t)
- (gnus-run-hooks 'gnus-category-mode-hook))
+ (gnus-run-mode-hooks 'gnus-category-mode-hook))
(defalias 'gnus-category-position-point 'gnus-goto-colon)
@@ -2930,7 +2936,7 @@ FORCE is equivalent to setting the expir
(if (or (not (eq articles t))
(yes-or-no-p
(concat "Are you sure that you want to "
- "expire all articles in " group ".")))
+ "expire all articles in " group "? ")))
(let ((gnus-command-method (gnus-find-method-for-group group))
(overview (gnus-get-buffer-create " *expire overview*"))
orig)
@@ -3304,7 +3310,7 @@ FORCE is equivalent to setting the expir
(gnus-agent-expire-group group articles force)
(if (or (not (eq articles t))
(yes-or-no-p "Are you sure that you want to expire all \
-articles in every agentized group."))
+articles in every agentized group? "))
(let ((methods (gnus-agent-covered-methods))
;; Bind gnus-agent-expire-current-dirs to enable tracking
;; of agent directories.
@@ -3700,7 +3706,7 @@ If REREAD is not nil, downloaded article
(dir (file-name-directory file))
point
(downloaded (if (file-exists-p dir)
- (sort (mapcar (lambda (name) (string-to-int name))
+ (sort (mapcar (lambda (name) (string-to-number name))
(directory-files dir nil
"^[0-9]+$" t))
'>)
(progn (gnus-make-directory dir) nil)))
1.7 +306 -214 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-art.el
Index: gnus-art.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-art.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- gnus-art.el 2005/03/13 00:23:22 1.6
+++ gnus-art.el 2005/11/15 03:45:43 1.7
@@ -1,7 +1,8 @@
;;; gnus-art.el --- article mode commands for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -28,7 +29,8 @@
(eval-when-compile
(require 'cl)
- (defvar tool-bar-map))
+ (defvar tool-bar-map)
+ (defvar w3m-minor-mode-map))
(require 'gnus)
(require 'gnus-sum)
@@ -46,6 +48,7 @@
(autoload 'gnus-msg-mail "gnus-msg" nil t)
(autoload 'gnus-button-mailto "gnus-msg")
(autoload 'gnus-button-reply "gnus-msg" nil t)
+(autoload 'parse-time-string "parse-time" nil nil)
(defgroup gnus-article nil
"Article display."
@@ -233,7 +236,8 @@ longer (in lines) than that number. If
will be called without any parameters, and if it returns nil, there is
no signature in the buffer. If it is a string, it will be used as a
regexp. If it matches, the text in question is not a signature."
- :type '(choice (integer :value 200)
+ :type '(choice (const nil)
+ (integer :value 200)
(number :value 4.0)
(function :value fun)
(regexp :value ".*"))
@@ -366,8 +370,12 @@ advertisements. For example:
(or (nth 4 spec) 3)
(intern (format "gnus-emphasis-%s" (nth 2 spec)))))
types))
-
'(("\\(\\s-\\|^\\)\\(-\\(\\(\\w\\|-[^-]\\)+\\)-\\)\\(\\s-\\|[?!.,;]\\)"
- 2 3 gnus-emphasis-strikethru)
+ '(;; I've never seen anyone use this strikethru convention whereas
I've
+ ;; several times seen it triggered by normal text. --Stef
+ ;; Miles suggests that this form is sometimes used but for italics,
+ ;; so maybe we should map it to `italic'.
+ ;;
("\\(\\s-\\|^\\)\\(-\\(\\(\\w\\|-[^-]\\)+\\)-\\)\\(\\s-\\|[?!.,;]\\)"
+ ;; 2 3 gnus-emphasis-strikethru)
("\\(\\s-\\|^\\)\\(_\\(\\(\\w\\|_[^_]\\)+\\)_\\)\\(\\s-\\|[?!.,;]\\)"
2 3 gnus-emphasis-underline))))
"*Alist that says how to fontify certain phrases.
@@ -480,9 +488,6 @@ be fed to `format-time-string'."
:link '(custom-manual "(gnus)Article Date")
:group 'gnus-article-washing)
-(eval-and-compile
- (autoload 'mail-extract-address-components "mail-extr"))
-
(defcustom gnus-save-all-headers t
"*If non-nil, don't remove any headers before saving."
:group 'gnus-article-saving
@@ -643,21 +648,23 @@ above them."
:type 'face
:group 'gnus-article-buttons)
-(defcustom gnus-signature-face 'gnus-signature-face
+(defcustom gnus-signature-face 'gnus-signature
"Face used for highlighting a signature in the article buffer.
-Obsolete; use the face `gnus-signature-face' for customizations instead."
+Obsolete; use the face `gnus-signature' for customizations instead."
:type 'face
:group 'gnus-article-highlight
:group 'gnus-article-signature)
-(defface gnus-signature-face
+(defface gnus-signature
'((t
(:italic t)))
"Face used for highlighting a signature in the article buffer."
:group 'gnus-article-highlight
:group 'gnus-article-signature)
+;; backward-compatibility alias
+(put 'gnus-signature-face 'face-alias 'gnus-signature)
-(defface gnus-header-from-face
+(defface gnus-header-from
'((((class color)
(background dark))
(:foreground "spring green"))
@@ -669,8 +676,10 @@ Obsolete; use the face `gnus-signature-f
"Face used for displaying from headers."
:group 'gnus-article-headers
:group 'gnus-article-highlight)
+;; backward-compatibility alias
+(put 'gnus-header-from-face 'face-alias 'gnus-header-from)
-(defface gnus-header-subject-face
+(defface gnus-header-subject
'((((class color)
(background dark))
(:foreground "SeaGreen3"))
@@ -682,8 +691,10 @@ Obsolete; use the face `gnus-signature-f
"Face used for displaying subject headers."
:group 'gnus-article-headers
:group 'gnus-article-highlight)
+;; backward-compatibility alias
+(put 'gnus-header-subject-face 'face-alias 'gnus-header-subject)
-(defface gnus-header-newsgroups-face
+(defface gnus-header-newsgroups
'((((class color)
(background dark))
(:foreground "yellow" :italic t))
@@ -697,8 +708,10 @@ In the default setup this face is only u
articles."
:group 'gnus-article-headers
:group 'gnus-article-highlight)
+;; backward-compatibility alias
+(put 'gnus-header-newsgroups-face 'face-alias 'gnus-header-newsgroups)
-(defface gnus-header-name-face
+(defface gnus-header-name
'((((class color)
(background dark))
(:foreground "SeaGreen"))
@@ -710,8 +723,10 @@ articles."
"Face used for displaying header names."
:group 'gnus-article-headers
:group 'gnus-article-highlight)
+;; backward-compatibility alias
+(put 'gnus-header-name-face 'face-alias 'gnus-header-name)
-(defface gnus-header-content-face
+(defface gnus-header-content
'((((class color)
(background dark))
(:foreground "forest green" :italic t))
@@ -722,12 +737,14 @@ articles."
(:italic t))) "Face used for displaying header content."
:group 'gnus-article-headers
:group 'gnus-article-highlight)
+;; backward-compatibility alias
+(put 'gnus-header-content-face 'face-alias 'gnus-header-content)
(defcustom gnus-header-face-alist
- '(("From" nil gnus-header-from-face)
- ("Subject" nil gnus-header-subject-face)
- ("Newsgroups:.*," nil gnus-header-newsgroups-face)
- ("" gnus-header-name-face gnus-header-content-face))
+ '(("From" nil gnus-header-from)
+ ("Subject" nil gnus-header-subject)
+ ("Newsgroups:.*," nil gnus-header-newsgroups)
+ ("" gnus-header-name gnus-header-content))
"*Controls highlighting of article headers.
An alist of the form (HEADER NAME CONTENT).
@@ -816,6 +833,7 @@ When nil (the default value), then some
as described by the variables `gnus-buttonized-mime-types' and
`gnus-unbuttonized-mime-types'."
:version "22.1"
+ :group 'gnus-article-mime
:type 'boolean)
(defcustom gnus-body-boundary-delimiter "_"
@@ -827,7 +845,8 @@ be controlled by `gnus-treat-body-bounda
:type '(choice (item :tag "None" :value nil)
string))
-(defcustom gnus-picon-databases '("/usr/lib/picon"
"/usr/local/faces")
+(defcustom gnus-picon-databases '("/usr/lib/picon"
"/usr/local/faces"
+ "/usr/share/picons")
"Defines the location of the faces database.
For information on obtaining this database of pretty pictures, please
see
http://www.cs.indiana.edu/picons/ftp/index.html"
@@ -851,7 +870,8 @@ see
http://www.cs.indiana.edu/picons/ftp
This is meant for people who want to do something automatic based
on parts -- for instance, adding Vcard info to a database."
:group 'gnus-article-mime
- :type 'function)
+ :type '(choice (const nil)
+ function))
(defcustom gnus-mime-multipart-functions nil
"An alist of MIME types to functions to display them."
@@ -1161,7 +1181,10 @@ See Info node `(gnus)Customizing Article
(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 Info node `(gnus)Customizing Articles' for details."
+See Info node `(gnus)Customizing Articles' for details.
+
+When set to t, it also strips trailing blanks in all MIME parts.
+Consider to use `last' instead."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-custom)
@@ -1169,7 +1192,9 @@ See Info node `(gnus)Customizing Article
(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 Info node `(gnus)Customizing Articles' for details."
+See Info node `(gnus)Customizing Articles' for details.
+
+When set to t, it also strips trailing blanks in all MIME parts."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-custom)
@@ -1464,10 +1489,10 @@ This requires GNU Libidn, and by default
(gnus-treat-date-ut gnus-article-date-ut)
(gnus-treat-date-local gnus-article-date-local)
(gnus-treat-date-english gnus-article-date-english)
- (gnus-treat-date-lapsed gnus-article-date-lapsed)
(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-date-lapsed gnus-article-date-lapsed)
(gnus-treat-display-x-face gnus-article-display-x-face)
(gnus-treat-display-face gnus-article-display-face)
(gnus-treat-hide-headers gnus-article-maybe-hide-headers)
@@ -2108,31 +2133,31 @@ unfolded."
;; read-only.
(if (and wash-face-p (memq 'face gnus-article-wash-types))
(gnus-delete-images 'face)
- (let (face faces)
- (save-excursion
+ (let (face faces from)
+ (save-current-buffer
(when (and wash-face-p
- (progn
- (goto-char (point-min))
- (not (re-search-forward "^Face:[\t ]*" nil t)))
- (gnus-buffer-live-p gnus-original-article-buffer))
+ (gnus-buffer-live-p gnus-original-article-buffer)
+ (not (re-search-forward "^Face:[\t ]*" nil t)))
(set-buffer gnus-original-article-buffer))
(save-restriction
(mail-narrow-to-head)
(while (gnus-article-goto-header "Face")
(push (mail-header-field-value) faces))))
- (while (setq face (pop faces))
- (let ((png (gnus-convert-face-to-png face))
- image)
- (when png
- (setq image (gnus-create-image png 'png t))
- (gnus-article-goto-header "from")
- (when (bobp)
- (insert "From: [no `from' set]\n")
- (forward-char -17))
- (gnus-add-wash-type 'face)
- (gnus-add-image 'face image)
- (gnus-put-image image nil 'face))))))
- )))
+ (when faces
+ (goto-char (point-min))
+ (let ((from (gnus-article-goto-header "from"))
+ png image)
+ (unless from
+ (insert "From:")
+ (setq from (point))
+ (insert "[no `from' set]\n"))
+ (while faces
+ (when (setq png (gnus-convert-face-to-png (pop faces)))
+ (setq image (gnus-create-image png 'png t))
+ (goto-char from)
+ (gnus-add-wash-type 'face)
+ (gnus-add-image 'face image)
+ (gnus-put-image image nil 'face))))))))))
(defun article-display-x-face (&optional force)
"Look for an X-Face header and display it if present."
@@ -2149,13 +2174,10 @@ unfolded."
(gnus-delete-images 'xface)
;; Display X-Faces.
(let (x-faces from face)
- (save-excursion
+ (save-current-buffer
(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))
+ (gnus-buffer-live-p gnus-original-article-buffer)
+ (not (re-search-forward "^X-Face:[\t ]*" nil t)))
;; If type `W f', use gnus-original-article-buffer,
;; otherwise use the current buffer because displaying
;; RFC822 parts calls this function too.
@@ -2169,34 +2191,36 @@ unfolded."
;; 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.
- (cond ((stringp 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")))
- ((functionp gnus-article-x-face-command)
- ;; The command is a lisp function, so we call it.
- (funcall gnus-article-x-face-command face))
- (t
- (error "%s is not a function"
- gnus-article-x-face-command)))))))))
+ (when (and x-faces
+ gnus-article-x-face-command
+ (or force
+ ;; Check whether this face is censored.
+ (not gnus-article-x-face-too-ugly)
+ (and from
+ (not (string-match gnus-article-x-face-too-ugly
+ from)))))
+ (while (setq face (pop x-faces))
+ ;; We display the face.
+ (cond ((stringp 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))
+ (gnus-set-process-query-on-exit-flag
+ (start-process
+ "article-x-face" nil shell-file-name
+ shell-command-switch gnus-article-x-face-command)
+ nil)
+ (with-temp-buffer
+ (insert face)
+ (process-send-region "article-x-face"
+ (point-min) (point-max)))
+ (process-send-eof "article-x-face")))
+ ((functionp gnus-article-x-face-command)
+ ;; The command is a lisp function, so we call it.
+ (funcall gnus-article-x-face-command face))
+ (t
+ (error "%s is not a function"
+ gnus-article-x-face-command))))))))))
(defun article-decode-mime-words ()
"Decode all MIME-encoded words in the article."
@@ -2314,20 +2338,22 @@ If PROMPT (the prefix), prompt for a cod
(autoload 'idna-to-unicode "idna")
(defun article-decode-idna-rhs ()
- "Decode IDNA strings in RHS in From:, To: and Cc: headers in current
buffer."
+ "Decode IDNA strings in RHS in various headers in current buffer.
+The following headers are decoded: From:, To:, Cc:, Reply-To:,
+Mail-Reply-To: and Mail-Followup-To:."
(when gnus-use-idna
(save-restriction
(let ((inhibit-point-motion-hooks t)
(inhibit-read-only t))
(article-narrow-to-head)
(goto-char (point-min))
- (while (re-search-forward "@.*\\(xn--[-A-Za-z0-9.]*\\)[ \t\n\r,>]" nil
t)
+ (while (re-search-forward "@[^ \t\n\r,>]*\\(xn--[-A-Za-z0-9.]*\\)[
\t\n\r,>]" nil t)
(let (ace unicode)
(when (save-match-data
(and (setq ace (match-string 1))
(save-excursion
(and (re-search-backward "^[^ \t]" nil t)
- (looking-at "From\\|To\\|Cc")))
+ (looking-at
"From\\|To\\|Cc\\|Reply-To\\|Mail-Reply-To\\|Mail-Followup-To")))
(setq unicode (idna-to-unicode ace))))
(unless (string= ace unicode)
(replace-match unicode nil nil nil 1)))))))))
@@ -2414,7 +2440,7 @@ If READ-CHARSET, ask for a coding system
(let ((inhibit-read-only t))
(goto-char (point-min))
(while (re-search-forward
- "^\\(\\(https?\\|ftp\\)://\\S-+\\) *\n\\(\\S-+\\)" nil t)
+ "\\(\\(https?\\|ftp\\)://\\S-+\\) *\n\\(\\S-+\\)" nil t)
(replace-match "\\1\\3" t)))
(when (interactive-p)
(gnus-treat-article nil))))
@@ -2823,72 +2849,76 @@ lines forward."
(forward-line 1)
(setq ended t)))))
-(defun article-date-ut (&optional type highlight header)
+(defun article-date-ut (&optional type highlight)
"Convert DATE date to universal time in the current article.
If TYPE is `local', convert to local time; if it is `lapsed', output
how much time has lapsed since DATE. For `lapsed', the value of
`gnus-article-date-lapsed-new-header' says whether the \"X-Sent:\"
header
should replace the \"Date:\" one, or should be added below it."
(interactive (list 'ut t))
- (let* ((header (or header
- (message-fetch-field "date")
- ""))
- (tdate-regexp "^Date:[ \t]\\|^X-Sent:[ \t]")
- (date-regexp
- (cond
- ((not gnus-article-date-lapsed-new-header)
- tdate-regexp)
- ((eq type 'lapsed)
- "^X-Sent:[ \t]")
- (t
- "^Date:[ \t]")))
- (date (if (vectorp header) (mail-header-date header)
- header))
+ (let* ((tdate-regexp "^Date:[ \t]\\|^X-Sent:[ \t]")
+ (date-regexp (cond ((not gnus-article-date-lapsed-new-header)
+ tdate-regexp)
+ ((eq type 'lapsed)
+ "^X-Sent:[ \t]")
+ (article-lapsed-timer
+ "^Date:[ \t]")
+ (t
+ tdate-regexp)))
+ (case-fold-search t)
+ (inhibit-read-only t)
(inhibit-point-motion-hooks t)
- pos
- bface eface)
+ pos date bface eface)
(save-excursion
(save-restriction
- (article-narrow-to-head)
- (when (re-search-forward tdate-regexp nil t)
- (setq bface (get-text-property (gnus-point-at-bol) 'face)
- date (or (get-text-property (gnus-point-at-bol)
- 'original-date)
- date)
- eface (get-text-property (1- (gnus-point-at-eol)) 'face))
- (forward-line 1))
- (when (and date (not (string= date "")))
+ (widen)
+ (goto-char (point-min))
+ (while (or (setq date (get-text-property (setq pos (point))
+ 'original-date))
+ (when (setq pos (next-single-property-change
+ (point) 'original-date))
+ (setq date (get-text-property pos 'original-date))
+ t))
+ (narrow-to-region pos (or (text-property-any pos (point-max)
+ 'original-date nil)
+ (point-max)))
(goto-char (point-min))
- (let ((inhibit-read-only t))
- ;; Delete any old Date headers.
- (while (re-search-forward date-regexp nil t)
- (if pos
- (delete-region (progn (beginning-of-line) (point))
- (progn (gnus-article-forward-header)
- (point)))
- (delete-region (progn (beginning-of-line) (point))
- (progn (gnus-article-forward-header)
- (forward-char -1)
- (point)))
- (setq pos (point))))
- (when (and (not pos)
- (re-search-forward tdate-regexp nil t))
- (forward-line 1))
- (when pos
- (goto-char pos))
- (insert (article-make-date-line date (or type 'ut)))
- (unless pos
- (insert "\n")
- (forward-line -1))
- ;; Do highlighting.
- (beginning-of-line)
- (when (looking-at "\\([^:]+\\): *\\(.*\\)$")
- (put-text-property (match-beginning 1) (1+ (match-end 1))
- 'original-date date)
- (put-text-property (match-beginning 1) (1+ (match-end 1))
- 'face bface)
- (put-text-property (match-beginning 2) (match-end 2)
- 'face eface))))))))
+ (when (re-search-forward tdate-regexp nil t)
+ (setq bface (get-text-property (gnus-point-at-bol) 'face)
+ eface (get-text-property (1- (gnus-point-at-eol)) 'face)))
+ (goto-char (point-min))
+ (setq pos nil)
+ ;; Delete any old Date headers.
+ (while (re-search-forward date-regexp nil t)
+ (if pos
+ (delete-region (gnus-point-at-bol)
+ (progn
+ (gnus-article-forward-header)
+ (point)))
+ (delete-region (gnus-point-at-bol)
+ (progn
+ (gnus-article-forward-header)
+ (forward-char -1)
+ (point)))
+ (setq pos (point))))
+ (when (and (not pos)
+ (re-search-forward tdate-regexp nil t))
+ (forward-line 1))
+ (gnus-goto-char pos)
+ (insert (article-make-date-line date (or type 'ut)))
+ (unless pos
+ (insert "\n")
+ (forward-line -1))
+ ;; Do highlighting.
+ (beginning-of-line)
+ (when (looking-at "\\([^:]+\\): *\\(.*\\)$")
+ (put-text-property (match-beginning 1) (1+ (match-end 1))
+ 'face bface)
+ (put-text-property (match-beginning 2) (match-end 2)
+ 'face eface))
+ (put-text-property (point-min) (1- (point-max)) 'original-date date)
+ (goto-char (point-max))
+ (widen))))))
(defun article-make-date-line (date type)
"Return a DATE line of TYPE."
@@ -3030,20 +3060,21 @@ function and want to see what the date w
(defun article-update-date-lapsed ()
"Function to be run from a timer to update the lapsed time line."
- (let (deactivate-mark)
- (save-excursion
- (ignore-errors
- (walk-windows
- (lambda (w)
- (set-buffer (window-buffer w))
- (when (eq major-mode 'gnus-article-mode)
- (let ((mark (point-marker)))
- (goto-char (point-min))
- (when (re-search-forward "^X-Sent:" nil t)
- (article-date-lapsed t))
- (goto-char (marker-position mark))
- (move-marker mark nil))))
- nil 'visible)))))
+ (save-match-data
+ (let (deactivate-mark)
+ (save-excursion
+ (ignore-errors
+ (walk-windows
+ (lambda (w)
+ (set-buffer (window-buffer w))
+ (when (eq major-mode 'gnus-article-mode)
+ (let ((mark (point-marker)))
+ (goto-char (point-min))
+ (when (re-search-forward "^X-Sent:" nil t)
+ (article-date-lapsed t))
+ (goto-char (marker-position mark))
+ (move-marker mark nil))))
+ nil 'visible))))))
(defun gnus-start-date-timer (&optional n)
"Start a timer to update the X-Sent header in the article buffers.
@@ -3074,6 +3105,27 @@ This format is defined by the `gnus-arti
(interactive (list t))
(article-date-ut 'iso8601 highlight))
+(defmacro gnus-article-save-original-date (&rest forms)
+ "Save the original date as a text property and evaluate FORMS."
+ `(let* ((case-fold-search t)
+ (start (progn
+ (goto-char (point-min))
+ (when (and (re-search-forward "^date:[\t\n ]+" nil t)
+ (not (bolp)))
+ (match-end 0))))
+ (date (when (and start
+ (re-search-forward "[\t ]*\n\\([^\t ]\\|\\'\\)"
+ nil t))
+ (buffer-substring-no-properties start
+ (match-beginning 0)))))
+ (goto-char (point-max))
+ (skip-chars-backward "\n")
+ (put-text-property (point-min) (point) 'original-date date)
+ ,@forms
+ (goto-char (point-max))
+ (skip-chars-backward "\n")
+ (put-text-property (point-min) (point) 'original-date date)))
+
;; (defun article-show-all ()
;; "Show all hidden text in the article buffer."
;; (interactive)
@@ -3210,7 +3262,7 @@ This format is defined by the `gnus-arti
((null split-name)
(read-file-name
(concat prompt " (default "
- (file-name-nondirectory default-name) ") ")
+ (file-name-nondirectory default-name) "): ")
(file-name-directory default-name)
default-name))
;; A single group name is returned.
@@ -3220,7 +3272,7 @@ This format is defined by the `gnus-arti
(symbol-value variable)))
(read-file-name
(concat prompt " (default "
- (file-name-nondirectory default-name) ") ")
+ (file-name-nondirectory default-name) "): ")
(file-name-directory default-name)
default-name))
;; A single split name was found
@@ -3233,7 +3285,7 @@ This format is defined by the `gnus-arti
((file-exists-p name) name)
(t gnus-article-save-directory))))
(read-file-name
- (concat prompt " (default " name ") ")
+ (concat prompt " (default " name "): ")
dir name)))
;; A list of splits was found.
(t
@@ -3244,7 +3296,7 @@ This format is defined by the `gnus-arti
(setq result
(expand-file-name
(read-file-name
- (concat prompt " (`M-p' for defaults) ")
+ (concat prompt " (`M-p' for defaults): ")
gnus-article-save-directory
(car split-name))
gnus-article-save-directory)))
@@ -3278,7 +3330,7 @@ This format is defined by the `gnus-arti
Optional argument FILENAME specifies file name.
Directory to save to is default to `gnus-article-save-directory'."
(setq filename (gnus-read-save-file-name
- "Save %s in rmail file:" filename
+ "Save %s in rmail file" filename
gnus-rmail-save-name gnus-newsgroup-name
gnus-current-headers 'gnus-newsgroup-last-rmail))
(gnus-eval-in-buffer-window gnus-save-article-buffer
@@ -3293,7 +3345,7 @@ Directory to save to is default to `gnus
Optional argument FILENAME specifies file name.
Directory to save to is default to `gnus-article-save-directory'."
(setq filename (gnus-read-save-file-name
- "Save %s in Unix mail file:" filename
+ "Save %s in Unix mail file" filename
gnus-mail-save-name gnus-newsgroup-name
gnus-current-headers 'gnus-newsgroup-last-mail))
(gnus-eval-in-buffer-window gnus-save-article-buffer
@@ -3312,7 +3364,7 @@ Directory to save to is default to `gnus
Optional argument FILENAME specifies file name.
Directory to save to is default to `gnus-article-save-directory'."
(setq filename (gnus-read-save-file-name
- "Save %s in file:" filename
+ "Save %s in file" filename
gnus-file-save-name gnus-newsgroup-name
gnus-current-headers 'gnus-newsgroup-last-file))
(gnus-eval-in-buffer-window gnus-save-article-buffer
@@ -3336,7 +3388,7 @@ The directory to save in defaults to `gn
Optional argument FILENAME specifies file name.
The directory to save in defaults to `gnus-article-save-directory'."
(setq filename (gnus-read-save-file-name
- "Save %s body in file:" filename
+ "Save %s body in file" filename
gnus-file-save-name gnus-newsgroup-name
gnus-current-headers 'gnus-newsgroup-last-file))
(gnus-eval-in-buffer-window gnus-save-article-buffer
@@ -3690,6 +3742,7 @@ commands:
\\[gnus-article-describe-briefly]\t Describe the current mode briefly
\\[gnus-info-find-node]\t Go to the Gnus info node"
(interactive)
+ (kill-all-local-variables)
(gnus-simplify-mode-line)
(setq mode-name "Article")
(setq major-mode 'gnus-article-mode)
@@ -3712,13 +3765,13 @@ commands:
(make-local-variable 'gnus-article-charset)
(make-local-variable 'gnus-article-ignored-charsets)
;; Prevent recent Emacsen from displaying non-break space as "\ ".
- (set (make-local-variable 'show-nonbreak-escape) nil)
+ (set (make-local-variable 'nobreak-char-display) nil)
(gnus-set-default-directory)
(buffer-disable-undo)
(setq buffer-read-only t)
(set-syntax-table gnus-article-mode-syntax-table)
(mm-enable-multibyte)
- (gnus-run-hooks 'gnus-article-mode-hook))
+ (gnus-run-mode-hooks 'gnus-article-mode-hook))
(defun gnus-article-setup-buffer ()
"Initialize the article buffer."
@@ -4076,7 +4129,7 @@ Deleting parts may malfunction or destro
',gnus-newsgroup-ignored-charsets))
(mbl mml-buffer-list))
(setq mml-buffer-list nil)
- (insert-buffer gnus-original-article-buffer)
+ (insert-buffer-substring gnus-original-article-buffer)
(mime-to-mml ',handles)
(setq gnus-article-mime-handles nil)
(let ((mbl1 mml-buffer-list))
@@ -4158,7 +4211,7 @@ Deleting parts may malfunction or destro
',gnus-newsgroup-ignored-charsets))
(mbl mml-buffer-list))
(setq mml-buffer-list nil)
- (insert-buffer gnus-original-article-buffer)
+ (insert-buffer-substring gnus-original-article-buffer)
(mime-to-mml ',handles)
(setq gnus-article-mime-handles nil)
(let ((mbl1 mml-buffer-list))
@@ -4357,21 +4410,16 @@ are decompressed."
(mm-read-coding-system "Charset: "))))
(t
(if (mm-handle-undisplayer handle)
- (mm-remove-part handle))
- (setq contents
- (if (fboundp 'string-to-multibyte)
- (string-to-multibyte contents)
- (mapconcat
- (lambda (ch) (mm-string-as-multibyte (char-to-string ch)))
- contents "")))))
+ (mm-remove-part handle))))
(forward-line 2)
- (mm-insert-inline handle
- (if (and charset
- (setq charset (mm-charset-to-coding-system
- charset))
- (not (eq charset 'ascii)))
- (mm-decode-coding-string contents charset)
- contents))
+ (mm-insert-inline
+ handle
+ (if (and charset
+ (setq charset (mm-charset-to-coding-system
+ charset))
+ (not (eq charset 'ascii)))
+ (mm-decode-coding-string contents charset)
+ (mm-string-to-multibyte contents)))
(goto-char b)))))
(defun gnus-mime-view-part-as-charset (&optional handle arg)
@@ -4690,7 +4738,8 @@ N is the numerical prefix."
(save-restriction
(article-goto-body)
(narrow-to-region (point-min) (point))
- (gnus-treat-article 'head))))))))
+ (gnus-article-save-original-date
+ (gnus-treat-article 'head)))))))))
(defcustom gnus-mime-display-multipart-as-mixed nil
"Display \"multipart\" parts as \"multipart/mixed\".
@@ -4719,6 +4768,8 @@ If displaying \"text/html\" is discourag
(defun gnus-mime-display-part (handle)
(cond
+ ;; Maybe a broken MIME message.
+ ((null handle))
;; Single part.
((not (stringp (car handle)))
(gnus-mime-display-single handle))
@@ -4820,7 +4871,17 @@ If displaying \"text/html\" is discourag
(forward-line -1)
(setq beg (point)))
(gnus-article-insert-newline)
- (mm-insert-inline handle (mm-get-part handle))
+ (mm-insert-inline
+ handle
+ (let ((charset (mail-content-type-get (mm-handle-type handle)
+ 'charset)))
+ (cond ((not charset)
+ (mm-string-as-multibyte (mm-get-part handle)))
+ ((eq charset 'gnus-decoded)
+ (with-current-buffer (mm-handle-buffer handle)
+ (buffer-string)))
+ (t
+ (mm-decode-string (mm-get-part handle) charset)))))
(goto-char (point-max))))
;; Do highlighting.
(save-excursion
@@ -5145,14 +5206,38 @@ Argument LINES specifies lines to be scr
(gnus-article-next-page-1 lines)
nil))
+(defmacro gnus-article-beginning-of-window ()
+ "Move point to the beginning of the window.
+In Emacs, the point is placed at the line number which `scroll-margin'
+specifies."
+ (if (featurep 'xemacs)
+ '(move-to-window-line 0)
+ '(move-to-window-line
+ (min (max 0 scroll-margin)
+ (max 1 (- (window-height)
+ (if mode-line-format 1 0)
+ (if (and (boundp 'header-line-format)
+ (symbol-value 'header-line-format))
+ 1 0)))))))
+
(defun gnus-article-next-page-1 (lines)
- (let ((scroll-in-place nil))
- (condition-case ()
- (scroll-up lines)
- (end-of-buffer
- ;; Long lines may cause an end-of-buffer error.
- (goto-char (point-max)))))
- (move-to-window-line 0))
+ (when (and (not (featurep 'xemacs))
+ (numberp lines)
+ (> lines 0)
+ (numberp (symbol-value 'scroll-margin))
+ (> (symbol-value 'scroll-margin) 0))
+ ;; Protect against the bug that Emacs 21.x hangs up when scrolling up for
+ ;; too many number of lines if `scroll-margin' is set as two or greater.
+ (setq lines (min lines
+ (max 0 (- (count-lines (window-start) (point-max))
+ (symbol-value 'scroll-margin))))))
+ (condition-case ()
+ (let ((scroll-in-place nil))
+ (scroll-up lines))
+ (end-of-buffer
+ ;; Long lines may cause an end-of-buffer error.
+ (goto-char (point-max))))
+ (gnus-article-beginning-of-window))
(defun gnus-article-prev-page (&optional lines)
"Show previous page of current article.
@@ -5166,13 +5251,13 @@ Argument LINES specifies lines to be scr
(gnus-narrow-to-page -1) ;Go to previous page.
(goto-char (point-max))
(recenter -1))
- (let ((scroll-in-place nil))
- (prog1
- (condition-case ()
- (scroll-down lines)
- (beginning-of-buffer
- (goto-char (point-min))))
- (move-to-window-line 0)))))
+ (prog1
+ (condition-case ()
+ (let ((scroll-in-place nil))
+ (scroll-down lines))
+ (beginning-of-buffer
+ (goto-char (point-min))))
+ (gnus-article-beginning-of-window))))
(defun gnus-article-only-boring-p ()
"Decide whether there is only boring text remaining in the article.
@@ -5308,7 +5393,7 @@ not have a face in `gnus-article-boring-
(when (eq win (selected-window))
(setq new-sum-point (point)
new-sum-start (window-start win)
- new-sum-hscroll (window-hscroll win))
+ new-sum-hscroll (window-hscroll win)))
(when (eq in-buffer (current-buffer))
(setq selected (gnus-summary-select-article))
(set-buffer obuf)
@@ -5324,7 +5409,7 @@ not have a face in `gnus-article-boring-
new-sum-point)
(set-window-point win new-sum-point)
(set-window-start win new-sum-start)
- (set-window-hscroll win new-sum-hscroll)))))
+ (set-window-hscroll win new-sum-hscroll))))
(set-window-configuration owin)
(ding))))))
@@ -5781,7 +5866,7 @@ groups."
(window-start (window-start)))
(erase-buffer)
(if (gnus-buffer-live-p gnus-original-article-buffer)
- (insert-buffer gnus-original-article-buffer))
+ (insert-buffer-substring gnus-original-article-buffer))
(let ((winconf gnus-prev-winconf))
(kill-all-local-variables)
(gnus-article-mode)
@@ -5825,6 +5910,14 @@ groups."
:group 'gnus-article-buttons
:type 'regexp)
+;; Regexp suggested by Felix Wiemann in <87oeuomcz9.fsf(a)news2.ososo.de>
+(defcustom gnus-button-valid-localpart-regexp
+ "[a-z0-9$%(*-=?[_][^<>\")!;:,{}\n\t ]*"
+ "Regular expression that matches a localpart of mail addresses or MIDs."
+ :version "22.1"
+ :group 'gnus-article-buttons
+ :type 'regexp)
+
(defcustom gnus-button-man-handler 'manual-entry
"Function to use for displaying man pages.
The function must take at least one argument with a string naming the
@@ -5864,12 +5957,11 @@ The function must take one argument, the
(regexp :tag "Other")))
(defcustom gnus-button-ctan-directory-regexp
- (concat
- "\\("; Cannot use `\(?: ... \)' (compatibility with Emacs 20).
- "biblio\\|digests\\|dviware\\|fonts\\|graphics\\|help\\|"
- "indexing\\|info\\|language\\|macros\\|support\\|systems\\|"
- "tds\\|tools\\|usergrps\\|web\\|nonfree\\|obsolete"
- "\\)")
+ (regexp-opt
+ (list "archive-tools" "biblio" "bibliography"
"digests" "documentation"
+ "dviware" "fonts" "graphics" "help"
"indexing" "info" "language"
+ "languages" "macros" "nonfree" "obsolete"
"support" "systems"
+ "tds" "tools" "usergrps" "web") t)
"Regular expression for ctan directories.
It should match all directories in the top level of `gnus-ctan-url'."
:version "22.1"
@@ -5877,8 +5969,7 @@ It should match all directories in the t
:type 'regexp)
(defcustom gnus-button-mid-or-mail-regexp
- (concat "\\b\\(<?[a-z0-9$%(*-=?[_][^<>\")!;:,{}\n\t ]*@"
- ;; Felix Wiemann in <87oeuomcz9.fsf(a)news2.ososo.de>
+ (concat "\\b\\(<?" gnus-button-valid-localpart-regexp "@"
gnus-button-valid-fqdn-regexp
">?\\)\\b")
"Regular expression that matches a message ID or a mail address."
@@ -6193,8 +6284,9 @@ positives are possible."
(defcustom gnus-button-alist
'(("<\\(url:[>\n\t ]*?\\)?\\(nntp\\|news\\):[>\n\t ]*\\([^>\n\t
]*@[^>\n\t ]*\\)>"
0 (>= gnus-button-message-level 0) gnus-button-handle-news 3)
- ("\\b\\(nntp\\|news\\):\\([^>\n\t ]*@[^>)!;:,\n\t ]*\\)" 0 t
- gnus-button-handle-news 2)
+ ((concat "\\b\\(nntp\\|news\\):\\("
+ gnus-button-valid-localpart-regexp "(a)[a-z0-9.-]+[a-z]\\)")
+ 0 t gnus-button-handle-news 2)
("\\(\\b<\\(url:[>\n\t ]*\\)?\\(nntp\\|news\\):[>\n\t
]*\\(//\\)?\\([^>\n\t ]*\\)>\\)"
1 (>= gnus-button-message-level 0) gnus-button-fetch-group 5)
("\\b\\(nntp\\|news\\):\\(//\\)?\\([^'\">\n\t ]+\\)"
@@ -6336,7 +6428,7 @@ variable it the real callback function."
("^\\(From\\|Reply-To\\):" ": *\\(.+\\)$"
1 (>= gnus-button-message-level 0) gnus-button-reply 1)
("^\\(Cc\\|To\\):" "[^ \t\n<>,()\"]+@[^
\t\n<>,()\"]+"
- 0 (>= gnus-button-message-level 0) gnus-button-mailto 0)
+ 0 (>= gnus-button-message-level 0) gnus-msg-mail 0)
("^X-[Uu][Rr][Ll]:" gnus-button-url-regexp
0 (>= gnus-button-browse-level 0) browse-url 0)
("^Subject:" gnus-button-url-regexp
@@ -6464,7 +6556,7 @@ do the highlighting. See the documentat
(defun gnus-article-highlight-signature ()
"Highlight the signature in an article.
It does this by highlighting everything after
-`gnus-signature-separator' using `gnus-signature-face'."
+`gnus-signature-separator' using the face `gnus-signature'."
(interactive)
(save-excursion
(set-buffer gnus-article-buffer)
@@ -6767,7 +6859,7 @@ specified by `gnus-button-alist'."
(match-string 3 address)
"nntp")))
nil nil nil
- (and (match-end 6) (list (string-to-int (match-string 6 address))))))))
+ (and (match-end 6) (list (string-to-number (match-string 6 address))))))))
(defun gnus-url-parse-query-string (query &optional downcase)
(let (retval pairs cur key val)
@@ -7031,7 +7123,7 @@ For example:
current-prefix-arg))
(let ((func (cdr (assoc protocol gnus-article-encrypt-protocol-alist))))
(unless func
- (error (format "Can't find the encrypt protocol %s" protocol)))
+ (error "Can't find the encrypt protocol %s" protocol))
(if (member gnus-newsgroup-name '("nndraft:delayed"
"nndraft:drafts"
"nndraft:queue"))
1.5 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-async.el
Index: gnus-async.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-async.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- gnus-async.el 2005/03/13 00:23:23 1.4
+++ gnus-async.el 2005/11/15 03:45:43 1.5
@@ -1,7 +1,8 @@
;;; gnus-async.el --- asynchronous support for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.4 +5 -3 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-audio.el
Index: gnus-audio.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-audio.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-audio.el 2004/09/28 02:21:04 1.3
+++ gnus-audio.el 2005/11/15 03:45:43 1.4
@@ -1,6 +1,8 @@
;;; gnus-audio.el --- Sound effects for Gnus
-;; Copyright (C) 1996, 2000, 2003 Free Software Foundation
+;; Copyright (C) 1996, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Steven L. Baur <steve(a)miranova.com>
;; Keywords: news, mail, multimedia
@@ -18,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.4 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-bcklg.el
Index: gnus-bcklg.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-bcklg.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-bcklg.el 2004/09/28 02:21:04 1.3
+++ gnus-bcklg.el 2005/11/15 03:45:44 1.4
@@ -1,7 +1,8 @@
;;; gnus-bcklg.el --- backlog functions for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.6 +9 -7 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-cache.el
Index: gnus-cache.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-cache.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- gnus-cache.el 2005/03/13 00:23:23 1.5
+++ gnus-cache.el 2005/11/15 03:45:44 1.6
@@ -1,7 +1,8 @@
;;; gnus-cache.el --- cache interface for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -357,7 +358,7 @@ Returns the list of articles removed."
(let ((alist (gnus-agent-load-alist gnus-newsgroup-name)))
(unless (cdr (assoc article alist))
(setq gnus-newsgroup-undownloaded
- (gnus-add-to-sorted-list
+ (gnus-add-to-sorted-list
gnus-newsgroup-undownloaded article)))))
(push article out))
(gnus-summary-update-download-mark article)
@@ -421,6 +422,7 @@ Returns the list of articles removed."
(and (not unread) (not ticked) (not dormant) (memq 'read class))))
(defun gnus-cache-file-name (group article)
+ (setq group (gnus-group-decoded-name group))
(expand-file-name
(if (stringp article) article (int-to-string article))
(file-name-as-directory
@@ -486,7 +488,7 @@ Returns the list of articles removed."
articles)
(when (file-exists-p dir)
(setq articles
- (sort (mapcar (lambda (name) (string-to-int name))
+ (sort (mapcar (lambda (name) (string-to-number name))
(directory-files dir nil "^[0-9]+$" t))
'<))
;; Update the cache active file, just to synch more.
@@ -680,7 +682,7 @@ If LOW, update the lower bound instead."
;; Separate articles from all other files and directories.
(while files
(if (string-match "^[0-9]+$" (file-name-nondirectory (car files)))
- (push (string-to-int (file-name-nondirectory (pop files))) nums)
+ (push (string-to-number (file-name-nondirectory (pop files))) nums)
(push (pop files) alphs)))
;; If we have nums, then this is probably a valid group.
(when (setq nums (sort nums '<))
1.6 +157 -123 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-cite.el
Index: gnus-cite.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-cite.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- gnus-cite.el 2005/03/13 00:23:23 1.5
+++ gnus-cite.el 2005/11/15 03:45:44 1.6
@@ -1,7 +1,7 @@
;;; gnus-cite.el --- parse citations in articles for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
;; Author: Per Abhiddenware
@@ -19,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -136,131 +136,165 @@ the envelope From line."
:group 'gnus-cite
:type 'boolean)
-(defface gnus-cite-attribution-face '((t
- (:italic t)))
- "Face used for attribution lines.")
+(defface gnus-cite-attribution '((t (:italic t)))
+ "Face used for attribution lines."
+ :group 'gnus-cite)
+;; backward-compatibility alias
+(put 'gnus-cite-attribution-face 'face-alias 'gnus-cite-attribution)
-(defcustom gnus-cite-attribution-face 'gnus-cite-attribution-face
+(defcustom gnus-cite-attribution-face 'gnus-cite-attribution
"Face used for attribution lines.
It is merged with the face for the cited text belonging to the attribution."
:version "22.1"
:group 'gnus-cite
:type 'face)
-(defface gnus-cite-face-1 '((((class color)
- (background dark))
- (:foreground "light blue"))
- (((class color)
- (background light))
- (:foreground "MidnightBlue"))
- (t
- (:italic t)))
- "Citation face.")
-
-(defface gnus-cite-face-2 '((((class color)
- (background dark))
- (:foreground "light cyan"))
- (((class color)
- (background light))
- (:foreground "firebrick"))
- (t
- (:italic t)))
- "Citation face.")
-
-(defface gnus-cite-face-3 '((((class color)
- (background dark))
- (:foreground "light yellow"))
- (((class color)
- (background light))
- (:foreground "dark green"))
- (t
- (:italic t)))
- "Citation face.")
-
-(defface gnus-cite-face-4 '((((class color)
- (background dark))
- (:foreground "light pink"))
- (((class color)
- (background light))
- (:foreground "OrangeRed"))
- (t
- (:italic t)))
- "Citation face.")
-
-(defface gnus-cite-face-5 '((((class color)
- (background dark))
- (:foreground "pale green"))
- (((class color)
- (background light))
- (:foreground "dark khaki"))
- (t
- (:italic t)))
- "Citation face.")
-
-(defface gnus-cite-face-6 '((((class color)
- (background dark))
- (:foreground "beige"))
- (((class color)
- (background light))
- (:foreground "dark violet"))
- (t
- (:italic t)))
- "Citation face.")
-
-(defface gnus-cite-face-7 '((((class color)
- (background dark))
- (:foreground "orange"))
- (((class color)
- (background light))
- (:foreground "SteelBlue4"))
- (t
- (:italic t)))
- "Citation face.")
-
-(defface gnus-cite-face-8 '((((class color)
- (background dark))
- (:foreground "magenta"))
- (((class color)
- (background light))
- (:foreground "magenta"))
- (t
- (:italic t)))
- "Citation face.")
-
-(defface gnus-cite-face-9 '((((class color)
- (background dark))
- (:foreground "violet"))
- (((class color)
- (background light))
- (:foreground "violet"))
- (t
- (:italic t)))
- "Citation face.")
-
-(defface gnus-cite-face-10 '((((class color)
- (background dark))
- (:foreground "medium purple"))
- (((class color)
- (background light))
- (:foreground "medium purple"))
- (t
- (:italic t)))
- "Citation face.")
-
-(defface gnus-cite-face-11 '((((class color)
- (background dark))
- (:foreground "turquoise"))
- (((class color)
- (background light))
- (:foreground "turquoise"))
- (t
- (:italic t)))
- "Citation face.")
+(defface gnus-cite-1 '((((class color)
+ (background dark))
+ (:foreground "light blue"))
+ (((class color)
+ (background light))
+ (:foreground "MidnightBlue"))
+ (t
+ (:italic t)))
+ "Citation face."
+ :group 'gnus-cite)
+;; backward-compatibility alias
+(put 'gnus-cite-face-1 'face-alias 'gnus-cite-1)
+
+(defface gnus-cite-2 '((((class color)
+ (background dark))
+ (:foreground "light cyan"))
+ (((class color)
+ (background light))
+ (:foreground "firebrick"))
+ (t
+ (:italic t)))
+ "Citation face."
+ :group 'gnus-cite)
+;; backward-compatibility alias
+(put 'gnus-cite-face-2 'face-alias 'gnus-cite-2)
+
+(defface gnus-cite-3 '((((class color)
+ (background dark))
+ (:foreground "light yellow"))
+ (((class color)
+ (background light))
+ (:foreground "dark green"))
+ (t
+ (:italic t)))
+ "Citation face."
+ :group 'gnus-cite)
+;; backward-compatibility alias
+(put 'gnus-cite-face-3 'face-alias 'gnus-cite-3)
+
+(defface gnus-cite-4 '((((class color)
+ (background dark))
+ (:foreground "light pink"))
+ (((class color)
+ (background light))
+ (:foreground "OrangeRed"))
+ (t
+ (:italic t)))
+ "Citation face."
+ :group 'gnus-cite)
+;; backward-compatibility alias
+(put 'gnus-cite-face-4 'face-alias 'gnus-cite-4)
+
+(defface gnus-cite-5 '((((class color)
+ (background dark))
+ (:foreground "pale green"))
+ (((class color)
+ (background light))
+ (:foreground "dark khaki"))
+ (t
+ (:italic t)))
+ "Citation face."
+ :group 'gnus-cite)
+;; backward-compatibility alias
+(put 'gnus-cite-face-5 'face-alias 'gnus-cite-5)
+
+(defface gnus-cite-6 '((((class color)
+ (background dark))
+ (:foreground "beige"))
+ (((class color)
+ (background light))
+ (:foreground "dark violet"))
+ (t
+ (:italic t)))
+ "Citation face."
+ :group 'gnus-cite)
+;; backward-compatibility alias
+(put 'gnus-cite-face-6 'face-alias 'gnus-cite-6)
+
+(defface gnus-cite-7 '((((class color)
+ (background dark))
+ (:foreground "orange"))
+ (((class color)
+ (background light))
+ (:foreground "SteelBlue4"))
+ (t
+ (:italic t)))
+ "Citation face."
+ :group 'gnus-cite)
+;; backward-compatibility alias
+(put 'gnus-cite-face-7 'face-alias 'gnus-cite-7)
+
+(defface gnus-cite-8 '((((class color)
+ (background dark))
+ (:foreground "magenta"))
+ (((class color)
+ (background light))
+ (:foreground "magenta"))
+ (t
+ (:italic t)))
+ "Citation face."
+ :group 'gnus-cite)
+;; backward-compatibility alias
+(put 'gnus-cite-face-8 'face-alias 'gnus-cite-8)
+
+(defface gnus-cite-9 '((((class color)
+ (background dark))
+ (:foreground "violet"))
+ (((class color)
+ (background light))
+ (:foreground "violet"))
+ (t
+ (:italic t)))
+ "Citation face."
+ :group 'gnus-cite)
+;; backward-compatibility alias
+(put 'gnus-cite-face-9 'face-alias 'gnus-cite-9)
+
+(defface gnus-cite-10 '((((class color)
+ (background dark))
+ (:foreground "medium purple"))
+ (((class color)
+ (background light))
+ (:foreground "medium purple"))
+ (t
+ (:italic t)))
+ "Citation face."
+ :group 'gnus-cite)
+;; backward-compatibility alias
+(put 'gnus-cite-face-10 'face-alias 'gnus-cite-10)
+
+(defface gnus-cite-11 '((((class color)
+ (background dark))
+ (:foreground "turquoise"))
+ (((class color)
+ (background light))
+ (:foreground "turquoise"))
+ (t
+ (:italic t)))
+ "Citation face."
+ :group 'gnus-cite)
+;; backward-compatibility alias
+(put 'gnus-cite-face-11 'face-alias 'gnus-cite-11)
(defcustom gnus-cite-face-list
- '(gnus-cite-face-1 gnus-cite-face-2 gnus-cite-face-3 gnus-cite-face-4
- gnus-cite-face-5 gnus-cite-face-6 gnus-cite-face-7 gnus-cite-face-8
- gnus-cite-face-9 gnus-cite-face-10 gnus-cite-face-11)
+ '(gnus-cite-1 gnus-cite-2 gnus-cite-3 gnus-cite-4 gnus-cite-5 gnus-cite-6
+ gnus-cite-7 gnus-cite-8 gnus-cite-9 gnus-cite-10 gnus-cite-11)
"*List of faces used for highlighting citations.
When there are citations from multiple articles in the same message,
@@ -286,8 +320,7 @@ This should make it easier to see who wr
;; This has to go here because its default value depends on
;; gnus-cite-face-list.
-(defcustom gnus-article-boring-faces (cons 'gnus-signature-face
- gnus-cite-face-list)
+(defcustom gnus-article-boring-faces (cons 'gnus-signature gnus-cite-face-list)
"List of faces that are not worth reading.
If an article has more pages below the one you are looking at, but
nothing on those pages is a word of at least three letters that is not
@@ -339,7 +372,7 @@ in a boring face, then the pages will be
Each citation in the article will be highlighted with a different face.
The faces are taken from `gnus-cite-face-list'.
Attribution lines are highlighted with the same face as the
-corresponding citation merged with `gnus-cite-attribution-face'.
+corresponding citation merged with the face `gnus-cite-attribution'.
Text is considered cited if at least `gnus-cite-minimum-match-count'
lines matches `message-cite-prefix-regexp' with the same prefix.
@@ -1004,6 +1037,7 @@ See also the documentation for `gnus-art
(when (< from to)
(push (setq overlay (gnus-make-overlay from to))
gnus-cite-overlay-list)
+ (gnus-overlay-put overlay 'evaporate t)
(gnus-overlay-put overlay 'face face))))))
(defun gnus-cite-toggle (prefix)
1.7 +23 -15 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-cus.el
Index: gnus-cus.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-cus.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- gnus-cus.el 2004/09/28 02:21:05 1.6
+++ gnus-cus.el 2005/11/15 03:45:44 1.7
@@ -1,8 +1,8 @@
;;; gnus-cus.el --- customization commands for Gnus
-;;
-;; Copyright (C) 1996, 1999, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Per Abrahamsen <abraham(a)dina.kvl.dk>
;; Keywords: news
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -36,6 +36,14 @@
;;; Widgets:
+(defvar gnus-custom-map
+ (let ((map (make-keymap)))
+ (set-keymap-parent map widget-keymap)
+ (suppress-keymap map)
+ (define-key map [mouse-1] 'widget-move-and-invoke)
+ map)
+ "Keymap for editing Gnus customization buffers.")
+
(defun gnus-custom-mode ()
"Major mode for editing Gnus customization buffers.
@@ -51,7 +59,7 @@ if that value is non-nil."
(kill-all-local-variables)
(setq major-mode 'gnus-custom-mode
mode-name "Gnus Customize")
- (use-local-map widget-keymap)
+ (use-local-map gnus-custom-map)
;; Emacs 21 stuff:
(when (and (facep 'custom-button-face)
(facep 'custom-button-pressed-face))
@@ -67,7 +75,7 @@ if that value is non-nil."
(set (make-local-variable 'widget-push-button-suffix) "")
(set (make-local-variable 'widget-link-prefix) "")
(set (make-local-variable 'widget-link-suffix) ""))
- (gnus-run-hooks 'gnus-custom-mode-hook))
+ (gnus-run-mode-hooks 'gnus-custom-mode-hook))
;;; Group Customization:
@@ -479,7 +487,7 @@ form, but who cares?"
(widget-create 'sexp
:tag "Method"
:value (gnus-info-method info))))
- (use-local-map widget-keymap)
+ (use-local-map gnus-custom-map)
(widget-setup)
(buffer-enable-undo)
(goto-char (point-min))))
@@ -772,8 +780,8 @@ When called interactively, FILE defaults
This can be changed using the `\\[gnus-score-change-score-file]' command."
(interactive (list gnus-current-score-file))
(unless file
- (error (format "No score file for %s"
- (gnus-group-decoded-name gnus-newsgroup-name))))
+ (error "No score file for %s"
+ (gnus-group-decoded-name gnus-newsgroup-name)))
(let ((scores (gnus-score-load file))
(types (mapcar (lambda (entry)
`(group :format "%v%h\n"
@@ -873,7 +881,7 @@ articles in the thread.
'(repeat :inline t
:tag "Unknown entries"
sexp)))
- (use-local-map widget-keymap)
+ (use-local-map gnus-custom-map)
(widget-setup)))
(defun gnus-score-customize-done (&rest ignore)
@@ -1014,9 +1022,9 @@ articles in the thread.
;; gnus-agent-cat-prepare-category-field as I don't want the
;; group list to appear when customizing a topic.
(widget-insert "\n")
-
- (let ((symb
- (set
+
+ (let ((symb
+ (set
(make-local-variable 'gnus-agent-cat-groups)
(widget-create
`(choice
@@ -1050,7 +1058,7 @@ articles in the thread.
(gnus-agent-cat-prepare-category-field agent-enable-undownloaded-faces)
- (use-local-map widget-keymap)
+ (use-local-map gnus-custom-map)
(widget-setup)
(buffer-enable-undo))))
1.4 +4 -3 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-delay.el
Index: gnus-delay.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-delay.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-delay.el 2005/03/13 00:23:24 1.3
+++ gnus-delay.el 2005/11/15 03:45:44 1.4
@@ -1,6 +1,6 @@
;;; gnus-delay.el --- Delayed posting of articles
-;; Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
;; Author: Kai Großjohann <Kai.Grossjohann(a)CS.Uni-Dortmund.DE>
;; Keywords: mail, news, extensions
@@ -19,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -37,6 +37,7 @@
(require 'nndraft)
(require 'gnus-draft)
+(autoload 'parse-time-string "parse-time" nil nil)
;;;###autoload
(defgroup gnus-delay nil
1.4 +6 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-demon.el
Index: gnus-demon.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-demon.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-demon.el 2004/09/28 02:21:05 1.3
+++ gnus-demon.el 2005/11/15 03:45:44 1.4
@@ -1,7 +1,7 @@
;;; gnus-demon.el --- daemonic Gnus behaviour
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -39,6 +39,8 @@
(if (featurep 'xemacs)
(require 'itimer)
(require 'timer)))
+
+(autoload 'parse-time-string "parse-time" nil nil)
(defgroup gnus-demon nil
"Demonic behaviour."
1.4 +5 -3 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-diary.el
Index: gnus-diary.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-diary.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-diary.el 2005/03/13 00:23:24 1.3
+++ gnus-diary.el 2005/11/15 03:45:45 1.4
@@ -1,6 +1,6 @@
;;; gnus-diary.el --- Wrapper around the NNDiary Gnus backend
-;; Copyright (c) 2001, 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
;; Copyright (C) 1999, 2000, 2001 Didier Verna.
;; Author: Didier Verna <didier(a)xemacs.org>
@@ -22,7 +22,8 @@
;; You should have received a copy of the GNU General Public License
;; along with this program; if not, write to the Free Software
-;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+;; MA 02110-1301, USA.
;;; Commentary:
@@ -103,7 +104,8 @@
(defgroup gnus-diary nil
"Utilities on top of the nndiary backend for Gnus."
- :version "22.1")
+ :version "22.1"
+ :group 'gnus)
(defcustom gnus-diary-summary-line-format "%U%R%z %uD: %(%s%) (%ud)\n"
"*Summary line format for nndiary groups."
1.4 +4 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-dired.el
Index: gnus-dired.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-dired.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-dired.el 2004/09/28 02:21:05 1.3
+++ gnus-dired.el 2005/11/15 03:45:45 1.4
@@ -1,7 +1,7 @@
;;; gnus-dired.el --- utility functions where gnus and dired meet
-;; Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Authors: Benjamin Rutt <brutt(a)bloomington.in.us>,
;; Shenghuo Zhu <zsh(a)cs.rochester.edu>
@@ -21,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.6 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-draft.el
Index: gnus-draft.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-draft.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- gnus-draft.el 2005/03/13 00:23:24 1.5
+++ gnus-draft.el 2005/11/15 03:45:45 1.6
@@ -1,7 +1,8 @@
;;; gnus-draft.el --- draft message support for Gnus
-;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.4 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-dup.el
Index: gnus-dup.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-dup.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-dup.el 2004/09/28 02:21:05 1.3
+++ gnus-dup.el 2005/11/15 03:45:45 1.4
@@ -1,7 +1,8 @@
;;; gnus-dup.el --- suppression of duplicate articles in Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.4 +6 -5 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-eform.el
Index: gnus-eform.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-eform.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-eform.el 2004/09/28 02:21:05 1.3
+++ gnus-eform.el 2005/11/15 03:45:45 1.4
@@ -1,7 +1,8 @@
;;; gnus-eform.el --- a mode for editing forms for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -83,7 +84,7 @@ It is a slightly enhanced emacs-lisp-mod
(use-local-map gnus-edit-form-mode-map)
(make-local-variable 'gnus-edit-form-done-function)
(make-local-variable 'gnus-prev-winconf)
- (gnus-run-hooks 'gnus-edit-form-mode-hook))
+ (gnus-run-mode-hooks 'gnus-edit-form-mode-hook))
(defun gnus-edit-form (form documentation exit-func)
"Edit FORM in a new buffer.
1.6 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-ems.el
Index: gnus-ems.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-ems.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- gnus-ems.el 2004/09/28 02:21:05 1.5
+++ gnus-ems.el 2005/11/15 03:45:45 1.6
@@ -1,7 +1,8 @@
;;; gnus-ems.el --- functions for making Gnus work under different Emacsen
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.6 +6 -5 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-fun.el
Index: gnus-fun.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-fun.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- gnus-fun.el 2005/03/13 00:23:24 1.5
+++ gnus-fun.el 2005/11/15 03:45:45 1.6
@@ -1,6 +1,7 @@
;;; gnus-fun.el --- various frivolous extension functions to Gnus
-;; Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -18,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -53,7 +54,7 @@ on stdout."
:type 'string)
(defcustom gnus-convert-image-to-face-command "djpeg %s | ppmnorm | pnmscale
-width 48 -height 48 | ppmquant %d | pnmtopng"
- "Command for converting an image to an Face.
+ "Command for converting an image to a Face.
By default it takes a JPEG filename and output the Face header data
on stdout."
:version "22.1"
@@ -109,7 +110,7 @@ Output to the current buffer, replace te
;;;###autoload
(defun gnus-face-from-file (file)
- "Return an Face header based on an image file."
+ "Return a Face header based on an image file."
(interactive "fImage file name (by default JPEG): ")
(when (file-exists-p file)
(let ((done nil)
1.4 +4 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-gl.el
Index: gnus-gl.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-gl.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-gl.el 2004/09/28 02:21:06 1.3
+++ gnus-gl.el 2005/11/15 03:45:46 1.4
@@ -1,7 +1,7 @@
;;; gnus-gl.el --- an interface to GroupLens for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
;; Author: Brad Miller <bmiller(a)cs.umn.edu>
;; Keywords: news, score
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.6 +91 -64 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-group.el
Index: gnus-group.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-group.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- gnus-group.el 2005/03/13 00:23:24 1.5
+++ gnus-group.el 2005/11/15 03:45:46 1.6
@@ -1,7 +1,8 @@
;;; gnus-group.el --- group mode commands for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -41,7 +42,11 @@
(require 'time-date)
(require 'gnus-ems)
-(eval-when-compile (require 'mm-url))
+(eval-when-compile
+ (require 'mm-url)
+ (let ((features (cons 'gnus-group features)))
+ (require 'gnus-sum))
+ (defvar gnus-cache-active-hashtb))
(defcustom gnus-group-archive-directory
"/ftp@ftp.hpc.uh.edu:/pub/emacs/ding-list/"
@@ -305,50 +310,50 @@ variable."
(defcustom gnus-group-highlight
'(;; Mail.
((and mailp (= unread 0) (eq level 1)) .
- gnus-group-mail-1-empty-face)
+ gnus-group-mail-1-empty)
((and mailp (eq level 1)) .
- gnus-group-mail-1-face)
+ gnus-group-mail-1)
((and mailp (= unread 0) (eq level 2)) .
- gnus-group-mail-2-empty-face)
+ gnus-group-mail-2-empty)
((and mailp (eq level 2)) .
- gnus-group-mail-2-face)
+ gnus-group-mail-2)
((and mailp (= unread 0) (eq level 3)) .
- gnus-group-mail-3-empty-face)
+ gnus-group-mail-3-empty)
((and mailp (eq level 3)) .
- gnus-group-mail-3-face)
+ gnus-group-mail-3)
((and mailp (= unread 0)) .
- gnus-group-mail-low-empty-face)
+ gnus-group-mail-low-empty)
((and mailp) .
- gnus-group-mail-low-face)
+ gnus-group-mail-low)
;; News.
((and (= unread 0) (eq level 1)) .
- gnus-group-news-1-empty-face)
+ gnus-group-news-1-empty)
((and (eq level 1)) .
- gnus-group-news-1-face)
+ gnus-group-news-1)
((and (= unread 0) (eq level 2)) .
- gnus-group-news-2-empty-face)
+ gnus-group-news-2-empty)
((and (eq level 2)) .
- gnus-group-news-2-face)
+ gnus-group-news-2)
((and (= unread 0) (eq level 3)) .
- gnus-group-news-3-empty-face)
+ gnus-group-news-3-empty)
((and (eq level 3)) .
- gnus-group-news-3-face)
+ gnus-group-news-3)
((and (= unread 0) (eq level 4)) .
- gnus-group-news-4-empty-face)
+ gnus-group-news-4-empty)
((and (eq level 4)) .
- gnus-group-news-4-face)
+ gnus-group-news-4)
((and (= unread 0) (eq level 5)) .
- gnus-group-news-5-empty-face)
+ gnus-group-news-5-empty)
((and (eq level 5)) .
- gnus-group-news-5-face)
+ gnus-group-news-5)
((and (= unread 0) (eq level 6)) .
- gnus-group-news-6-empty-face)
+ gnus-group-news-6-empty)
((and (eq level 6)) .
- gnus-group-news-6-face)
+ gnus-group-news-6)
((and (= unread 0)) .
- gnus-group-news-low-empty-face)
+ gnus-group-news-low-empty)
(t .
- gnus-group-news-low-face))
+ gnus-group-news-low))
"*Controls the highlighting of group buffer lines.
Below is a list of `Form'/`Face' pairs. When deciding how a a
@@ -378,7 +383,7 @@ ticked: The number of ticked articles."
:type 'character)
(defgroup gnus-group-icons nil
- "Add Icons to your group buffer. "
+ "Add Icons to your group buffer."
:group 'gnus-group-visual)
(defcustom gnus-group-icon-list
@@ -482,9 +487,15 @@ simple manner.")
(?T (gnus-range-length (cdr (assq 'tick gnus-tmp-marked))) ?d)
(?i (+ (gnus-range-length (cdr (assq 'dormant gnus-tmp-marked)))
(gnus-range-length (cdr (assq 'tick gnus-tmp-marked)))) ?d)
- (?g gnus-tmp-group ?s)
+ (?g (if (boundp 'gnus-tmp-decoded-group)
+ gnus-tmp-decoded-group
+ gnus-tmp-group)
+ ?s)
(?G gnus-tmp-qualified-group ?s)
- (?c (gnus-short-group-name gnus-tmp-group) ?s)
+ (?c (gnus-short-group-name (if (boundp 'gnus-tmp-decoded-group)
+ gnus-tmp-decoded-group
+ gnus-tmp-group))
+ ?s)
(?C gnus-tmp-comment ?s)
(?D gnus-tmp-newsgroup-description ?s)
(?o gnus-tmp-moderated ?c)
@@ -1036,7 +1047,7 @@ The following commands are available:
(gnus-undo-mode 1))
(when gnus-slave
(gnus-slave-mode))
- (gnus-run-hooks 'gnus-group-mode-hook))
+ (gnus-run-mode-hooks 'gnus-group-mode-hook))
(defun gnus-update-group-mark-positions ()
(save-excursion
@@ -1441,12 +1452,12 @@ if it is a string, only list groups matc
(point)
(prog1 (1+ (point))
;; Insert the text.
- (let ((gnus-tmp-group (gnus-group-name-decode
- gnus-tmp-group group-name-charset)))
+ (let ((gnus-tmp-decoded-group (gnus-group-name-decode
+ gnus-tmp-group group-name-charset)))
(eval gnus-group-line-format-spec)))
`(gnus-group ,(gnus-intern-safe gnus-tmp-group gnus-active-hashtb)
gnus-unread ,(if (numberp number)
- (string-to-int gnus-tmp-number-of-unread)
+ (string-to-number gnus-tmp-number-of-unread)
t)
gnus-marked ,gnus-tmp-marked-mark
gnus-indentation ,gnus-group-indentation
@@ -1984,7 +1995,8 @@ confirmation is required."
(defun gnus-group-read-ephemeral-group (group method &optional activate
quit-config request-only
select-articles
- parameters)
+ parameters
+ number)
"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
@@ -1992,6 +2004,7 @@ 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.
+If NUMBER, fetch this number of articles.
Return the name of the group if selection was successful."
(interactive
@@ -2039,7 +2052,7 @@ Return the name of the group if selectio
(when (let ((gnus-large-newsgroup gnus-large-ephemeral-newsgroup)
(gnus-fetch-old-headers
gnus-fetch-old-ephemeral-headers))
- (gnus-group-read-group t t group select-articles))
+ (gnus-group-read-group (or number t) t group select-articles))
group)
;;(error nil)
(quit
@@ -2242,7 +2255,7 @@ ADDRESS."
(nname (if method (gnus-group-prefixed-name name meth) name))
backend info)
(when (gnus-gethash nname gnus-newsrc-hashtb)
- (error "Group %s already exists" nname))
+ (error "Group %s already exists" (gnus-group-decoded-name nname)))
;; Subscribe to the new group.
(gnus-group-change-level
(setq info (list t nname gnus-level-default-subscribed nil nil meth))
@@ -2303,20 +2316,21 @@ be removed from the server, even when it
(unless (gnus-check-backend-function 'request-delete-group group)
(error "This back end does not support group deletion"))
(prog1
- (if (and (not no-prompt)
- (not (gnus-yes-or-no-p
- (format
- "Do you really want to delete %s%s? "
- group (if force " and all its contents" "")))))
- () ; Whew!
- (gnus-message 6 "Deleting group %s..." group)
- (if (not (gnus-request-delete-group group force))
- (gnus-error 3 "Couldn't delete group %s" group)
- (gnus-message 6 "Deleting group %s...done" group)
- (gnus-group-goto-group group)
- (gnus-group-kill-group 1 t)
- (gnus-sethash group nil gnus-active-hashtb)
- t))
+ (let ((group-decoded (gnus-group-decoded-name group)))
+ (if (and (not no-prompt)
+ (not (gnus-yes-or-no-p
+ (format
+ "Do you really want to delete %s%s? "
+ group-decoded (if force " and all its contents" "")))))
+ () ; Whew!
+ (gnus-message 6 "Deleting group %s..." group-decoded)
+ (if (not (gnus-request-delete-group group force))
+ (gnus-error 3 "Couldn't delete group %s" group-decoded)
+ (gnus-message 6 "Deleting group %s...done" group-decoded)
+ (gnus-group-goto-group group)
+ (gnus-group-kill-group 1 t)
+ (gnus-sethash group nil gnus-active-hashtb)
+ t)))
(gnus-group-position-point)))
(defun gnus-group-rename-group (group new-name)
@@ -2586,16 +2600,26 @@ If there is, use Gnus to create an nnrss
(setq url (read-from-minibuffer "URL to Search for RSS: ")))
(let ((feedinfo (nnrss-discover-feed url)))
(if feedinfo
- (let ((title (read-from-minibuffer "Title: "
- (cdr (assoc 'title
- feedinfo))))
+ (let ((title (gnus-newsgroup-savable-name
+ (read-from-minibuffer "Title: "
+ (gnus-newsgroup-savable-name
+ (or (cdr (assoc 'title
+ feedinfo))
+ "")))))
(desc (read-from-minibuffer "Description: "
(cdr (assoc 'description
feedinfo))))
- (href (cdr (assoc 'href feedinfo))))
- (push (list title href desc)
- nnrss-group-alist)
- (gnus-group-make-group title '(nnrss ""))
+ (href (cdr (assoc 'href feedinfo)))
+ (encodable (mm-coding-system-p 'utf-8)))
+ (when encodable
+ ;; Unify non-ASCII text.
+ (setq title (mm-decode-coding-string
+ (mm-encode-coding-string title 'utf-8) 'utf-8)))
+ (gnus-group-make-group (if encodable
+ (mm-encode-coding-string title 'utf-8)
+ title)
+ '(nnrss ""))
+ (push (list title href desc) nnrss-group-alist)
(nnrss-save-server-data nil))
(error "No feeds found for %s" url))))
@@ -3099,7 +3123,7 @@ up is returned."
"Do you really want to mark all articles in %s as read? "
"Mark all unread articles in %s as read? ")
(if (= (length groups) 1)
- (car groups)
+ (gnus-group-decoded-name (car groups))
(format "these %d groups" (length groups)))))))
n
(while (setq group (pop groups))
@@ -3177,7 +3201,8 @@ Uses the process/prefix convention."
(defun gnus-group-expire-articles-1 (group)
(when (gnus-check-backend-function 'request-expire-articles group)
- (gnus-message 6 "Expiring articles in %s..." group)
+ (gnus-message 6 "Expiring articles in %s..."
+ (gnus-group-decoded-name group))
(let* ((info (gnus-get-info group))
(expirable (if (gnus-group-total-expirable-p group)
(cons nil (gnus-list-of-read-articles group))
@@ -3202,7 +3227,8 @@ Uses the process/prefix convention."
(gnus-request-expire-articles
(gnus-uncompress-sequence (cdr expirable)) group))))
(gnus-close-group group))
- (gnus-message 6 "Expiring articles in %s...done" group)
+ (gnus-message 6 "Expiring articles in %s...done"
+ (gnus-group-decoded-name group))
;; Return the list of un-expired articles.
(cdr expirable))))
@@ -3225,7 +3251,7 @@ Uses the process/prefix convention."
(progn
(unless (gnus-group-process-prefix current-prefix-arg)
(error "No group on the current line"))
- (string-to-int
+ (string-to-number
(let ((s (read-string
(format "Level (default %s): "
(or (gnus-group-group-level)
@@ -3241,7 +3267,8 @@ Uses the process/prefix convention."
(while (setq group (pop groups))
(gnus-group-remove-mark group)
(gnus-message 6 "Changed level of %s from %d to %d"
- group (or (gnus-group-group-level) gnus-level-killed)
+ (gnus-group-decoded-name group)
+ (or (gnus-group-group-level) gnus-level-killed)
level)
(gnus-group-change-level
group level (or (gnus-group-group-level) gnus-level-killed))
@@ -3390,7 +3417,7 @@ of groups killed."
gnus-list-of-killed-groups))
(gnus-group-change-level
(if entry entry group) gnus-level-killed (if entry nil level))
- (message "Killed group %s" group))
+ (message "Killed group %s" (gnus-group-decoded-name group)))
;; If there are lots and lots of groups to be killed, we use
;; this thing instead.
(dolist (group (nreverse groups))
1.7 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-int.el
Index: gnus-int.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-int.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- gnus-int.el 2005/03/13 00:23:25 1.6
+++ gnus-int.el 2005/11/15 03:45:46 1.7
@@ -1,7 +1,8 @@
;;; gnus-int.el --- backend interface functions for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.4 +6 -5 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-kill.el
Index: gnus-kill.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-kill.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-kill.el 2004/09/28 02:21:06 1.3
+++ gnus-kill.el 2005/11/15 03:45:46 1.4
@@ -1,7 +1,8 @@
;;; gnus-kill.el --- kill commands for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Masanobu UMEDA <umerin(a)flab.flab.fujitsu.junet>
;; Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -20,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -161,7 +162,7 @@ gnus-kill-file-mode-hook with no argumen
(setq major-mode 'gnus-kill-file-mode)
(setq mode-name "Kill")
(lisp-mode-variables nil)
- (gnus-run-hooks 'emacs-lisp-mode-hook 'gnus-kill-file-mode-hook))
+ (gnus-run-mode-hooks 'emacs-lisp-mode-hook 'gnus-kill-file-mode-hook))
(defun gnus-kill-file-edit-file (newsgroup)
"Begin editing a kill file for NEWSGROUP.
1.5 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-logic.el
Index: gnus-logic.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-logic.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- gnus-logic.el 2004/09/28 02:21:06 1.4
+++ gnus-logic.el 2005/11/15 03:45:46 1.5
@@ -1,7 +1,8 @@
;;; gnus-logic.el --- advanced scoring code for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.3 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-mh.el
Index: gnus-mh.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-mh.el,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- gnus-mh.el 2004/09/28 02:21:07 1.2
+++ gnus-mh.el 2005/11/15 03:45:47 1.3
@@ -1,7 +1,8 @@
;;; gnus-mh.el --- mh-e interface for Gnus
-;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Masanobu UMEDA <umerin(a)flab.flab.fujitsu.junet>
;; Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -20,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.4 +4 -3 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-ml.el
Index: gnus-ml.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-ml.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-ml.el 2004/09/28 02:21:07 1.3
+++ gnus-ml.el 2005/11/15 03:45:47 1.4
@@ -1,6 +1,7 @@
;;; gnus-ml.el --- Mailing list minor mode for Gnus
-;; Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Julien Gilles <jgilles(a)free.fr>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.4 +4 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-mlspl.el
Index: gnus-mlspl.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-mlspl.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-mlspl.el 2004/09/28 02:21:07 1.3
+++ gnus-mlspl.el 2005/11/15 03:45:47 1.4
@@ -1,7 +1,7 @@
;;; gnus-mlspl.el --- a group params-based mail splitting mechanism
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Alexandre Oliva <oliva(a)lsd.ic.unicamp.br>
;; Keywords: news, mail
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with this program; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.3 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-move.el
Index: gnus-move.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-move.el,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- gnus-move.el 2004/09/28 02:21:07 1.2
+++ gnus-move.el 2005/11/15 03:45:47 1.3
@@ -1,7 +1,8 @@
;;; gnus-move.el --- commands for moving Gnus from one server to another
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.7 +24 -28 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-msg.el
Index: gnus-msg.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-msg.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- gnus-msg.el 2005/03/13 00:23:25 1.6
+++ gnus-msg.el 2005/11/15 03:45:47 1.7
@@ -1,7 +1,8 @@
;;; gnus-msg.el --- mail and post interface for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Masanobu UMEDA <umerin(a)flab.flab.fujitsu.junet>
;; Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -20,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -66,8 +67,10 @@ message in, you can set this variable to
current newsgroup name and then returns a suitable group name (or list
of names)."
:group 'gnus-message
- :type '(choice (string :tag "Group")
- (function)))
+ :type '(choice (const nil)
+ (function)
+ (string :tag "Group")
+ (repeat :tag "List of groups" (string :tag "Group"))))
(defcustom gnus-mailing-list-groups nil
"*If non-nil a regexp matching groups that are really mailing lists.
@@ -466,27 +469,19 @@ Gcc: header for archiving purposes."
;; COMPOSEFUNC should return t if succeed. Undocumented ???
t)
-(defvar save-selected-window-window)
-
;;;###autoload
(defun gnus-button-mailto (address)
"Mail to ADDRESS."
(set-buffer (gnus-copy-article-buffer))
(gnus-setup-message 'message
- (message-reply address))
- (and (boundp 'save-selected-window-window)
- (not (window-live-p save-selected-window-window))
- (setq save-selected-window-window (selected-window))))
+ (message-reply address)))
;;;###autoload
(defun gnus-button-reply (&optional to-address wide)
"Like `message-reply'."
(interactive)
(gnus-setup-message 'message
- (message-reply to-address wide))
- (and (boundp 'save-selected-window-window)
- (not (window-live-p save-selected-window-window))
- (setq save-selected-window-window (selected-window))))
+ (message-reply to-address wide)))
;;;###autoload
(define-mail-user-agent 'gnus-user-agent
@@ -1038,17 +1033,18 @@ If SILENT, don't prompt the user."
"Stringified Gnus version and Emacs version.
See the variable `gnus-user-agent'."
(interactive)
- (let* ((float-output-format nil)
- (gnus-v
- (concat "Gnus/"
- (prin1-to-string (gnus-continuum-version gnus-version) t)
- " (" gnus-version ")"))
- (emacs-v (gnus-emacs-version)))
- (if (stringp gnus-user-agent)
- gnus-user-agent
- (concat gnus-v
- (when emacs-v
- (concat " " emacs-v))))))
+ (if (stringp gnus-user-agent)
+ gnus-user-agent
+ ;; `gnus-user-agent' is a list:
+ (let* ((float-output-format nil)
+ (gnus-v
+ (when (memq 'gnus gnus-user-agent)
+ (concat "Gnus/"
+ (prin1-to-string (gnus-continuum-version gnus-version) t)
+ " (" gnus-version ")")))
+ (emacs-v (gnus-emacs-version)))
+ (concat gnus-v (when (and gnus-v emacs-v) " ")
+ emacs-v))))
;;;
@@ -1668,7 +1664,7 @@ this is a reply."
(gcc (cond
((functionp group)
(funcall group))
- ((or (stringp group) (list group))
+ ((or (stringp group) (listp group))
group))))
(when gcc
(insert "Gcc: "
1.5 +19 -14 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-nocem.el
Index: gnus-nocem.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-nocem.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- gnus-nocem.el 2004/09/28 02:21:07 1.4
+++ gnus-nocem.el 2005/11/15 03:45:47 1.5
@@ -1,9 +1,8 @@
;;; gnus-nocem.el --- NoCeM pseudo-cancellation treatment
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
-
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -21,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -37,7 +36,7 @@
(require 'gnus-range)
(defgroup gnus-nocem nil
- "NoCeM pseudo-cancellation treatment"
+ "NoCeM pseudo-cancellation treatment."
:group 'gnus-score)
(defcustom gnus-nocem-groups
@@ -74,12 +73,13 @@ issuer registry."
:group 'gnus-nocem
:type 'integer)
-(defcustom gnus-nocem-verifyer 'mc-verify
+(defcustom gnus-nocem-verifyer 'pgg-verify
"*Function called to verify that the NoCeM message is valid.
-One likely value is `mc-verify'. If the function in this variable
+One likely value is `pgg-verify'. If the function in this variable
isn't bound, the message will be used unconditionally."
:group 'gnus-nocem
- :type '(radio (function-item mc-verify)
+ :type '(radio (function-item pgg-verify)
+ (function-item mc-verify)
(function :tag "other")))
(defcustom gnus-nocem-liberal-fetch nil
@@ -246,7 +246,7 @@ valid issuer, which is much faster if yo
;; We get the name of the issuer.
(narrow-to-region b e)
(setq issuer (mail-fetch-field "issuer")
- type (mail-fetch-field "issuer"))
+ type (mail-fetch-field "type"))
(widen)
(if (not (gnus-nocem-message-wanted-p issuer type))
(message "invalid NoCeM issuer: %s" issuer)
@@ -267,18 +267,20 @@ valid issuer, which is much faster if yo
(while (setq condition (pop conditions))
(cond
((stringp condition)
- (setq wanted (string-match condition type)))
+ (when (string-match condition type)
+ (setq wanted t)))
((and (consp condition)
(eq (car condition) 'not)
(stringp (cadr condition)))
- (setq wanted (not (string-match (cadr condition) type))))
+ (when (string-match (cadr condition) type)
+ (setq wanted nil)))
(t
(error "Invalid NoCeM condition: %S" condition))))
wanted))))
(defun gnus-nocem-verify-issuer (person)
"Verify using PGP that the canceler is who she says she is."
- (if (fboundp gnus-nocem-verifyer)
+ (if (functionp gnus-nocem-verifyer)
(ignore-errors
(funcall gnus-nocem-verifyer))
;; If we don't have Mailcrypt, then we use the message anyway.
@@ -315,7 +317,10 @@ valid issuer, which is much faster if yo
(while (eq (char-after) ?\t)
(forward-line -1))
(setq id (buffer-substring (point) (1- (search-forward "\t"))))
- (unless (gnus-gethash id gnus-nocem-hashtb)
+ (unless (if gnus-nocem-hashtb
+ (gnus-gethash id gnus-nocem-hashtb)
+ (setq gnus-nocem-hashtb (gnus-make-hashtable))
+ nil)
;; only store if not already present
(gnus-sethash id t gnus-nocem-hashtb)
(push id ncm))
1.7 +10 -6 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-picon.el
Index: gnus-picon.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-picon.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- gnus-picon.el 2005/03/13 00:23:25 1.6
+++ gnus-picon.el 2005/11/15 03:45:47 1.7
@@ -1,7 +1,7 @@
;;; gnus-picon.el --- displaying pretty icons in Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news xpm annotation glyph faces
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -74,13 +74,17 @@ Some people may want to add \"unknown\"
:type '(repeat string)
:group 'gnus-picon)
-(defface gnus-picon-xbm-face '((t (:foreground "black" :background
"white")))
+(defface gnus-picon-xbm '((t (:foreground "black" :background
"white")))
"Face to show xbm picon in."
:group 'gnus-picon)
+;; backward-compatibility alias
+(put 'gnus-picon-xbm-face 'face-alias 'gnus-picon-xbm)
-(defface gnus-picon-face '((t (:foreground "black" :background
"white")))
+(defface gnus-picon '((t (:foreground "black" :background
"white")))
"Face to show picon in."
:group 'gnus-picon)
+;; backward-compatibility alias
+(put 'gnus-picon-face 'face-alias 'gnus-picon)
;;; Internal variables:
1.5 +4 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-range.el
Index: gnus-range.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-range.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- gnus-range.el 2005/03/13 00:23:26 1.4
+++ gnus-range.el 2005/11/15 03:45:47 1.5
@@ -1,7 +1,7 @@
;;; gnus-range.el --- range and sequence functions for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.6 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-registry.el
Index: gnus-registry.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-registry.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- gnus-registry.el 2005/03/13 00:23:26 1.5
+++ gnus-registry.el 2005/11/15 03:45:48 1.6
@@ -1,7 +1,8 @@
;;; gnus-registry.el --- article registry for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Ted Zlatanov <tzz(a)lifelogs.com>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.4 +8 -10 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-salt.el
Index: gnus-salt.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-salt.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-salt.el 2004/09/28 02:21:08 1.3
+++ gnus-salt.el 2005/11/15 03:45:48 1.4
@@ -1,7 +1,7 @@
;;; gnus-salt.el --- alternate summary mode interfaces for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2001
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -128,8 +128,7 @@ It accepts the same format specs that `g
;; Set up the menu.
(when (gnus-visual-p 'pick-menu 'menu)
(gnus-pick-make-menu-bar))
- (gnus-add-minor-mode 'gnus-pick-mode " Pick" gnus-pick-mode-map
- nil 'gnus-pick-mode)
+ (gnus-add-minor-mode 'gnus-pick-mode " Pick" gnus-pick-mode-map)
(gnus-run-hooks 'gnus-pick-mode-hook))))
(defun gnus-pick-setup-message ()
@@ -362,8 +361,7 @@ This must be bound to a button-down mous
;; Set up the menu.
(when (gnus-visual-p 'binary-menu 'menu)
(gnus-binary-make-menu-bar))
- (gnus-add-minor-mode 'gnus-binary-mode " Binary"
- gnus-binary-mode-map nil 'gnus-binary-mode)
+ (gnus-add-minor-mode 'gnus-binary-mode " Binary"
gnus-binary-mode-map)
(gnus-run-hooks 'gnus-binary-mode-hook))))
(defun gnus-binary-display-article (article &optional all-header)
@@ -496,7 +494,7 @@ Two predefined functions are available:
(gnus-set-work-buffer)
(gnus-tree-node-insert (make-mail-header "") nil)
(setq gnus-tree-node-length (1- (point))))
- (gnus-run-hooks 'gnus-tree-mode-hook))
+ (gnus-run-mode-hooks 'gnus-tree-mode-hook))
(defun gnus-tree-read-summary-keys (&optional arg)
"Read a summary buffer key sequence and execute it."
@@ -1009,7 +1007,7 @@ The following commands are available:
(buffer-disable-undo)
(setq buffer-read-only t)
(make-local-variable 'gnus-carpal-attached-buffer)
- (gnus-run-hooks 'gnus-carpal-mode-hook))
+ (gnus-run-mode-hooks 'gnus-carpal-mode-hook))
(defun gnus-carpal-setup-buffer (type)
(let ((buffer (symbol-value (intern (format "gnus-carpal-%s-buffer"
type)))))
1.6 +28 -18 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-score.el
Index: gnus-score.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-score.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- gnus-score.el 2005/03/13 00:23:26 1.5
+++ gnus-score.el 2005/11/15 03:45:48 1.6
@@ -1,7 +1,8 @@
;;; gnus-score.el --- scoring code for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Per Abrahamsen <amanda(a)iesd.auc.dk>
;; Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -20,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -141,7 +142,7 @@ If this variable is nil, no score file e
number))
(defcustom gnus-update-score-entry-dates t
- "*In non-nil, update matching score entry dates.
+ "*If non-nil, update matching score entry dates.
If this variable is nil, then score entries that provide matches
will be expired along with non-matching score entries."
:group 'gnus-score-expire
@@ -174,7 +175,7 @@ It is called with one parameter -- the s
It can be:
* A string
- This file file will be used as the home score file.
+ This file will be used as the home score file.
* A function
The result of this function will be used as the home score file.
@@ -185,7 +186,7 @@ It can be:
The elements in this list can be:
* `(regexp file-name ...)'
- If the `regexp' matches the group name, the first `file-name' will
+ If the `regexp' matches the group name, the first `file-name'
will be used as the home score file. (Multiple filenames are
allowed so that one may use gnus-score-file-single-match-alist to
set this variable.)
@@ -220,13 +221,22 @@ This variable allows the same syntax as
(function :value fun)))
(defcustom gnus-default-adaptive-score-alist
- '((gnus-kill-file-mark)
+ `((gnus-kill-file-mark)
(gnus-unread-mark)
- (gnus-read-mark (from 3) (subject 30))
- (gnus-catchup-mark (subject -10))
- (gnus-killed-mark (from -1) (subject -20))
- (gnus-del-mark (from -2) (subject -15)))
- "*Alist of marks and scores."
+ (gnus-read-mark
+ (from , (+ 2 gnus-score-decay-constant))
+ (subject , (+ 27 gnus-score-decay-constant)))
+ (gnus-catchup-mark
+ (subject , (+ -7 (* -1 gnus-score-decay-constant))))
+ (gnus-killed-mark
+ (from , (- -1 gnus-score-decay-constant))
+ (subject , (+ -17 (* -1 gnus-score-decay-constant))))
+ (gnus-del-mark
+ (from , (- -1 gnus-score-decay-constant))
+ (subject , (+ -12 (* -1 gnus-score-decay-constant)))))
+ "Alist of marks and scores.
+If you use score decays, you might want to set values higher than
+`gnus-score-decay-constant'."
:group 'gnus-score-adapt
:type '(repeat (cons (symbol :tag "Mark")
(repeat (list (choice :tag "Header"
@@ -651,7 +661,7 @@ file for the command instead of the curr
(intern ; need symbol
(gnus-completing-read-with-default
(symbol-name (car gnus-extra-headers)) ; default response
- "Score extra header:" ; prompt
+ "Score extra header" ; prompt
(mapcar (lambda (x) ; completion list
(cons (symbol-name x) x))
gnus-extra-headers)
@@ -826,7 +836,7 @@ If optional argument `EXTRA' is non-nil,
;; If this is an integer comparison, we transform from string to int.
(if (eq (nth 2 (assoc header gnus-header-index)) 'gnus-score-integer)
(if (stringp match)
- (setq match (string-to-int match)))
+ (setq match (string-to-number match)))
(set-text-properties 0 (length match) nil match))
(unless (eq date 'now)
@@ -891,7 +901,7 @@ EXTRA is the possible non-standard heade
t)
(read-string "Match: ")
(if (y-or-n-p "Use regexp match? ") 'r 's)
- (string-to-int (read-string "Score: "))))
+ (string-to-number (read-string "Score: "))))
(save-excursion
(unless (and (stringp match) (> (length match) 0))
(error "No match"))
@@ -945,7 +955,7 @@ EXTRA is the possible non-standard heade
"Automatically mark articles with score below SCORE as read."
(interactive
(list (or (and current-prefix-arg (prefix-numeric-value current-prefix-arg))
- (string-to-int (read-string "Mark below: ")))))
+ (string-to-number (read-string "Mark below: ")))))
(setq score (or score gnus-summary-default-score 0))
(gnus-score-set 'mark (list score))
(gnus-score-set 'touched '(t))
@@ -979,7 +989,7 @@ EXTRA is the possible non-standard heade
"Automatically expunge articles with score below SCORE."
(interactive
(list (or (and current-prefix-arg (prefix-numeric-value current-prefix-arg))
- (string-to-int (read-string "Set expunge below: ")))))
+ (string-to-number (read-string "Set expunge below: ")))))
(setq score (or score gnus-summary-default-score 0))
(gnus-score-set 'expunge (list score))
(gnus-score-set 'touched '(t)))
1.4 +4 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-setup.el
Index: gnus-setup.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-setup.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-setup.el 2004/09/28 02:21:08 1.3
+++ gnus-setup.el 2005/11/15 03:45:48 1.4
@@ -1,7 +1,7 @@
;;; gnus-setup.el --- Initialization & Setup for Gnus 5
-;; Copyright (C) 1995, 1996, 2000, 2001
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Steven L. Baur <steve(a)miranova.com>
;; Keywords: news
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
;; My head is starting to spin with all the different mail/news packages.
1.4 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-sieve.el
Index: gnus-sieve.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-sieve.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-sieve.el 2004/09/28 02:21:08 1.3
+++ gnus-sieve.el 2005/11/15 03:45:48 1.4
@@ -1,6 +1,7 @@
;;; gnus-sieve.el --- Utilities to manage sieve scripts for Gnus
-;; Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
;; Author: NAGY Andras <nagya(a)inf.elte.hu>,
;; Simon Josefsson <simon(a)josefsson.org>
@@ -18,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -129,7 +130,7 @@ Return nil if no rule could be guessed."
(let ((rule (gnus-sieve-guess-rule-for-article))
(info (gnus-get-info gnus-newsgroup-name)))
(if (null rule)
- (error "Could not guess rule for article.")
+ (error "Could not guess rule for article")
(gnus-info-set-params info (cons rule (gnus-info-params info)))
(message "Added rule in group %s for article: %s" gnus-newsgroup-name
rule)))))
1.5 +8 -8 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-soup.el
Index: gnus-soup.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-soup.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- gnus-soup.el 2004/09/28 02:21:09 1.4
+++ gnus-soup.el 2005/11/15 03:45:48 1.5
@@ -1,7 +1,7 @@
;;; gnus-soup.el --- SOUP packet writing support for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Per Abrahamsen <abraham(a)iesd.auc.dk>
;; Lars Magne Ingebrigtsen <larsi(a)gnus.org>
@@ -21,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -349,9 +349,9 @@ If NOT-ALL, don't pack ticked articles."
(packer (if (< (string-match "%s" packer)
(string-match "%d" packer))
(format packer files
- (string-to-int (gnus-soup-unique-prefix dir)))
+ (string-to-number (gnus-soup-unique-prefix dir)))
(format packer
- (string-to-int (gnus-soup-unique-prefix dir))
+ (string-to-number (gnus-soup-unique-prefix dir))
files)))
(dir (expand-file-name dir)))
(gnus-make-directory dir)
@@ -385,7 +385,7 @@ though the two last may be nil if they a
(and (eq (preceding-char) ?\t)
(gnus-soup-field))
(and (eq (preceding-char) ?\t)
- (string-to-int (gnus-soup-field))))
+ (string-to-number (gnus-soup-field))))
areas)
(when (eq (preceding-char) ?\t)
(beginning-of-line 2)))
@@ -535,7 +535,7 @@ Return whether the unpacking was success
(error "Bad header"))
(forward-line 1)
(setq beg (point)
- end (+ (point) (string-to-int
+ end (+ (point) (string-to-number
(buffer-substring
(match-beginning 1) (match-end 1)))))
(switch-to-buffer tmp-buf)
1.6 +14 -5 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-spec.el
Index: gnus-spec.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-spec.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- gnus-spec.el 2005/03/13 00:23:27 1.5
+++ gnus-spec.el 2005/11/15 03:45:48 1.6
@@ -1,7 +1,8 @@
;;; gnus-spec.el --- format spec functions for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,14 +20,15 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
;;; Code:
(eval-when-compile (require 'cl))
+(defvar gnus-newsrc-file-version)
(require 'gnus)
@@ -196,6 +198,13 @@ Return a list of updated types."
(not (equal emacs-version
(cdr (assq 'version gnus-format-specs)))))
(setq gnus-format-specs nil))
+ ;; Flush the group format spec cache if it doesn't support decoded
+ ;; group names.
+ (when (memq 'group types)
+ (let ((spec (assq 'group gnus-format-specs)))
+ (unless (string-match " gnus-tmp-decoded-group[ )]"
+ (gnus-prin1-to-string (nth 2 spec)))
+ (setq gnus-format-specs (delq spec gnus-format-specs)))))
;; Go through all the formats and see whether they need updating.
(let (new-format entry type val updated)
@@ -502,7 +511,7 @@ are supported for %s."
(t
(if (null args)
(error 'wrong-number-of-arguments #'my-format n fstring))
- (let* ((minlen (string-to-int (or (match-string 2) "")))
+ (let* ((minlen (string-to-number (or (match-string 2) "")))
(arg (car args))
(str (if (stringp arg) arg (format "%s" arg)))
(lpad (null (match-string 1)))
1.6 +38 -24 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-srvr.el
Index: gnus-srvr.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-srvr.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- gnus-srvr.el 2005/03/13 00:23:27 1.5
+++ gnus-srvr.el 2005/11/15 03:45:49 1.6
@@ -1,7 +1,8 @@
;;; gnus-srvr.el --- virtual server support for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -167,67 +168,77 @@ If nil, a faster, but more primitive, bu
"\C-c\C-i" gnus-info-find-node
"\C-c\C-b" gnus-bug))
-(defface gnus-server-agent-face
+(defface gnus-server-agent
'((((class color) (background light)) (:foreground "PaleTurquoise"
:bold t))
(((class color) (background dark)) (:foreground "PaleTurquoise" :bold
t))
(t (:bold t)))
"Face used for displaying AGENTIZED servers"
:group 'gnus-server-visual)
+;; backward-compatibility alias
+(put 'gnus-server-agent-face 'face-alias 'gnus-server-agent)
-(defface gnus-server-opened-face
+(defface gnus-server-opened
'((((class color) (background light)) (:foreground "Green3" :bold t))
(((class color) (background dark)) (:foreground "Green1" :bold t))
(t (:bold t)))
"Face used for displaying OPENED servers"
:group 'gnus-server-visual)
+;; backward-compatibility alias
+(put 'gnus-server-opened-face 'face-alias 'gnus-server-opened)
-(defface gnus-server-closed-face
+(defface gnus-server-closed
'((((class color) (background light)) (:foreground "Steel Blue" :italic
t))
(((class color) (background dark))
(:foreground "Light Steel Blue" :italic t))
(t (:italic t)))
"Face used for displaying CLOSED servers"
:group 'gnus-server-visual)
+;; backward-compatibility alias
+(put 'gnus-server-closed-face 'face-alias 'gnus-server-closed)
-(defface gnus-server-denied-face
+(defface gnus-server-denied
'((((class color) (background light)) (:foreground "Red" :bold t))
(((class color) (background dark)) (:foreground "Pink" :bold t))
(t (:inverse-video t :bold t)))
"Face used for displaying DENIED servers"
:group 'gnus-server-visual)
+;; backward-compatibility alias
+(put 'gnus-server-denied-face 'face-alias 'gnus-server-denied)
-(defface gnus-server-offline-face
+(defface gnus-server-offline
'((((class color) (background light)) (:foreground "Orange" :bold t))
(((class color) (background dark)) (:foreground "Yellow" :bold t))
(t (:inverse-video t :bold t)))
"Face used for displaying OFFLINE servers"
:group 'gnus-server-visual)
+;; backward-compatibility alias
+(put 'gnus-server-offline-face 'face-alias 'gnus-server-offline)
-(defcustom gnus-server-agent-face 'gnus-server-agent-face
+(defcustom gnus-server-agent-face 'gnus-server-agent
"Face name to use on AGENTIZED servers."
:version "22.1"
:group 'gnus-server-visual
:type 'face)
-(defcustom gnus-server-opened-face 'gnus-server-opened-face
+(defcustom gnus-server-opened-face 'gnus-server-opened
"Face name to use on OPENED servers."
:version "22.1"
:group 'gnus-server-visual
:type 'face)
-(defcustom gnus-server-closed-face 'gnus-server-closed-face
+(defcustom gnus-server-closed-face 'gnus-server-closed
"Face name to use on CLOSED servers."
:version "22.1"
:group 'gnus-server-visual
:type 'face)
-(defcustom gnus-server-denied-face 'gnus-server-denied-face
+(defcustom gnus-server-denied-face 'gnus-server-denied
"Face name to use on DENIED servers."
:version "22.1"
:group 'gnus-server-visual
:type 'face)
-(defcustom gnus-server-offline-face 'gnus-server-offline-face
+(defcustom gnus-server-offline-face 'gnus-server-offline
"Face name to use on OFFLINE servers."
:version "22.1"
:group 'gnus-server-visual
@@ -269,7 +280,7 @@ The following commands are available:
(put 'gnus-server-mode 'font-lock-defaults
'(gnus-server-font-lock-keywords t))
(set (make-local-variable 'font-lock-defaults)
'(gnus-server-font-lock-keywords t)))
- (gnus-run-hooks 'gnus-server-mode-hook))
+ (gnus-run-mode-hooks 'gnus-server-mode-hook))
(defun gnus-server-insert-server-line (gnus-tmp-name method)
(let* ((gnus-tmp-how (car method))
@@ -849,25 +860,28 @@ buffer.
(setq truncate-lines t)
(gnus-set-default-directory)
(setq buffer-read-only t)
- (gnus-run-hooks 'gnus-browse-mode-hook))
+ (gnus-run-mode-hooks 'gnus-browse-mode-hook))
-(defun gnus-browse-read-group (&optional no-article)
- "Enter the group at the current line."
- (interactive)
+(defun gnus-browse-read-group (&optional no-article number)
+ "Enter the group at the current line.
+If NUMBER, fetch this number of articles."
+ (interactive "P")
(let ((group (gnus-browse-group-name)))
(if (or (not (gnus-get-info group))
(gnus-ephemeral-group-p group))
(unless (gnus-group-read-ephemeral-group
group gnus-browse-current-method nil
- (cons (current-buffer) 'browse))
+ (cons (current-buffer) 'browse)
+ nil nil nil number)
(error "Couldn't enter %s" group))
(unless (gnus-group-read-group nil no-article group)
(error "Couldn't enter %s" group)))))
-(defun gnus-browse-select-group ()
- "Select the current group."
- (interactive)
- (gnus-browse-read-group 'no))
+(defun gnus-browse-select-group (&optional number)
+ "Select the current group.
+If NUMBER, fetch this number of articles."
+ (interactive "P")
+ (gnus-browse-read-group 'no number))
(defun gnus-browse-next-group (n)
"Go to the next group."
1.7 +13 -13 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-start.el
Index: gnus-start.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-start.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- gnus-start.el 2005/03/13 00:23:27 1.6
+++ gnus-start.el 2005/11/15 03:45:49 1.7
@@ -1,7 +1,8 @@
;;; gnus-start.el --- startup functions for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -605,7 +606,7 @@ Can be used to turn version control on o
"Subscribe the new GROUP interactively.
It is inserted in hierarchical newsgroup order if subscribed. If not,
it is killed."
- (if (gnus-y-or-n-p (format "Subscribe new newsgroup: %s " group))
+ (if (gnus-y-or-n-p (format "Subscribe new newsgroup %s? " group))
(gnus-subscribe-hierarchically group)
(push group gnus-killed-list)))
@@ -857,6 +858,7 @@ prompt the user for the name of an NNTP
(set-buffer (setq gnus-dribble-buffer
(gnus-get-buffer-create
(file-name-nondirectory dribble-file))))
+ (set (make-local-variable 'file-precious-flag) t)
(erase-buffer)
(setq buffer-file-name dribble-file)
(auto-save-mode t)
@@ -2517,7 +2519,7 @@ If FORCE is non-nil, the .newsrc file is
(cond
((looking-at "[0-9]+")
;; We narrow and read a number instead of buffer-substring/
- ;; string-to-int because it's faster. narrow/widen is
+ ;; string-to-number because it's faster. narrow/widen is
;; faster than save-restriction/narrow, and save-restriction
;; produces a garbage object.
(setq num1 (progn
@@ -3083,12 +3085,10 @@ If this variable is nil, don't do anythi
(file-name-as-directory (expand-file-name gnus-default-directory))
default-directory)))
-(eval-and-compile
-(defalias 'gnus-display-time-event-handler
- (if (gnus-boundp 'display-time-timer)
- 'display-time-event-handler
- (lambda () "Does nothing as `display-time-timer' is not bound.
-Would otherwise be an alias for `display-time-event-handler'." nil))))
+(defun gnus-display-time-event-handler ()
+ (if (and (fboundp 'display-time-event-handler)
+ (gnus-boundp 'display-time-timer))
+ (display-time-event-handler)))
;;;###autoload
(defun gnus-fixup-nnimap-unread-after-getting-new-news ()
@@ -3107,7 +3107,7 @@ Would otherwise be an alias for `display
(provide 'gnus-start)
-;;; arch-tag: f4584a22-b7b7-4853-abfc-a637329af5d2
+;; arch-tag: f4584a22-b7b7-4853-abfc-a637329af5d2
;;; gnus-start.el ends here
1.8 +38 -34 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-sum.el
Index: gnus-sum.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-sum.el,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -p -r1.7 -r1.8
--- gnus-sum.el 2005/04/03 01:50:15 1.7
+++ gnus-sum.el 2005/11/15 03:45:49 1.8
@@ -1,7 +1,8 @@
;;; gnus-sum.el --- summary mode commands for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -256,8 +257,7 @@ simplification is selected."
"*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."
+`gnus-summary-show-thread' by hand or select an article."
:group 'gnus-thread
:type '(radio (sexp :format "Non-nil\n"
:match (lambda (widget value)
@@ -320,7 +320,7 @@ This variable can either be the symbols
first subject), `unread' (place point on the subject line of the first
unread article), `best' (place point on the subject line of the
higest-scored article), `unseen' (place point on the subject line of
-the first unseen article), 'unseen-or-unread' (place point on the subject
+the first unseen article), `unseen-or-unread' (place point on the subject
line of the first unseen article or, if all article have been seen, on the
subject line of the first unread article), or a function to be called to
place point on some subject line."
@@ -917,7 +917,7 @@ automatically when it is selected."
:group 'gnus-summary
:type 'boolean)
-(defcustom gnus-summary-selected-face 'gnus-summary-selected-face
+(defcustom gnus-summary-selected-face 'gnus-summary-selected
"Face used for highlighting the current article in the summary buffer."
:group 'gnus-summary-visual
:type 'face)
@@ -926,42 +926,42 @@ automatically when it is selected."
(defcustom gnus-summary-highlight
'(((eq mark gnus-canceled-mark)
- . gnus-summary-cancelled-face)
+ . gnus-summary-cancelled)
((and uncached (> score default-high))
- . gnus-summary-high-undownloaded-face)
+ . gnus-summary-high-undownloaded)
((and uncached (< score default-low))
- . gnus-summary-low-undownloaded-face)
+ . gnus-summary-low-undownloaded)
(uncached
- . gnus-summary-normal-undownloaded-face)
+ . gnus-summary-normal-undownloaded)
((and (> score default-high)
(or (eq mark gnus-dormant-mark)
(eq mark gnus-ticked-mark)))
- . gnus-summary-high-ticked-face)
+ . gnus-summary-high-ticked)
((and (< score default-low)
(or (eq mark gnus-dormant-mark)
(eq mark gnus-ticked-mark)))
- . gnus-summary-low-ticked-face)
+ . gnus-summary-low-ticked)
((or (eq mark gnus-dormant-mark)
(eq mark gnus-ticked-mark))
- . gnus-summary-normal-ticked-face)
+ . gnus-summary-normal-ticked)
((and (> score default-high) (eq mark gnus-ancient-mark))
- . gnus-summary-high-ancient-face)
+ . gnus-summary-high-ancient)
((and (< score default-low) (eq mark gnus-ancient-mark))
- . gnus-summary-low-ancient-face)
+ . gnus-summary-low-ancient)
((eq mark gnus-ancient-mark)
- . gnus-summary-normal-ancient-face)
+ . gnus-summary-normal-ancient)
((and (> score default-high) (eq mark gnus-unread-mark))
- . gnus-summary-high-unread-face)
+ . gnus-summary-high-unread)
((and (< score default-low) (eq mark gnus-unread-mark))
- . gnus-summary-low-unread-face)
+ . gnus-summary-low-unread)
((eq mark gnus-unread-mark)
- . gnus-summary-normal-unread-face)
+ . gnus-summary-normal-unread)
((> score default-high)
- . gnus-summary-high-read-face)
+ . gnus-summary-high-read)
((< score default-low)
- . gnus-summary-low-read-face)
+ . gnus-summary-low-read)
(t
- . gnus-summary-normal-read-face))
+ . gnus-summary-normal-read))
"*Controls the highlighting of summary buffer lines.
A list of (FORM . FACE) pairs. When deciding how a a particular
@@ -1000,7 +1000,9 @@ which it may alter in any way."
:type '(repeat symbol))
(defcustom gnus-ignored-from-addresses
- (and user-mail-address (regexp-quote user-mail-address))
+ (and user-mail-address
+ (not (string= user-mail-address ""))
+ (regexp-quote user-mail-address))
"*Regexp of From headers that may be suppressed in favor of To headers."
:version "21.1"
:group 'gnus-summary
@@ -2722,7 +2724,7 @@ The following commands are available:
(make-local-variable 'gnus-summary-mark-positions)
(gnus-make-local-hook 'pre-command-hook)
(add-hook 'pre-command-hook 'gnus-set-global-variables nil t)
- (gnus-run-hooks 'gnus-summary-mode-hook)
+ (gnus-run-mode-hooks 'gnus-summary-mode-hook)
(turn-on-gnus-mailing-list-mode)
(mm-enable-multibyte)
(gnus-update-format-specifications nil 'summary 'summary-mode
'summary-dummy)
@@ -5660,7 +5662,7 @@ The resulting hash table is returned, or
(match-end 1)))
(substring xrefs (match-beginning 1) (match-end 1))))
(setq number
- (string-to-int (substring xrefs (match-beginning 2)
+ (string-to-number (substring xrefs (match-beginning 2)
(match-end 2))))
(if (setq entry (gnus-gethash group xref-hashtb))
(setcdr entry (cons number (cdr entry)))
@@ -7254,11 +7256,12 @@ If BACKWARD, the previous article is sel
(if (and group
(not (gnus-ephemeral-group-p gnus-newsgroup-name)))
(format " (Type %s for %s [%s])"
- (single-key-description cmd) group
+ (single-key-description cmd)
+ (gnus-group-decoded-name group)
(car (gnus-gethash group gnus-newsrc-hashtb)))
(format " (Type %s to exit %s)"
(single-key-description cmd)
- gnus-newsgroup-name))))
+ (gnus-group-decoded-name gnus-newsgroup-name)))))
;; Confirm auto selection.
(setq key (car (setq keve (gnus-read-event-char prompt)))
ended t)
@@ -7695,8 +7698,8 @@ articles that are younger than AGE days.
(gnus-completing-read-with-default
(symbol-name (car gnus-extra-headers))
(if current-prefix-arg
- "Exclude extra header:"
- "Limit extra header:")
+ "Exclude extra header"
+ "Limit extra header")
(mapcar (lambda (x)
(cons (symbol-name x) x))
gnus-extra-headers)
@@ -9217,7 +9220,7 @@ latter case, they will be copied into th
gnus-newsgroup-name)))))
(method
(gnus-completing-read-with-default
- methname "What backend do you want to use when respooling?"
+ methname "Backend to use when respooling"
methods nil t nil 'gnus-mail-method-history))
ms)
(cond
@@ -9560,7 +9563,8 @@ groups."
(save-excursion
(save-restriction
(message-narrow-to-head)
- (let ((head (buffer-string))
+ (let ((head (buffer-substring-no-properties
+ (point-min) (point-max)))
header)
(with-temp-buffer
(insert (format "211 %d Article retrieved.\n"
@@ -11042,7 +11046,7 @@ save those articles instead."
(let* ((split-name (gnus-get-split-value gnus-move-split-methods))
(minibuffer-confirm-incomplete nil) ; XEmacs
(prom
- (format "%s %s to:"
+ (format "%s %s to"
prompt
(if (> (length articles) 1)
(format "these %d articles" (length articles))
1.5 +7 -9 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-topic.el
Index: gnus-topic.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-topic.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- gnus-topic.el 2004/09/28 02:21:09 1.4
+++ gnus-topic.el 2005/11/15 03:45:49 1.5
@@ -1,7 +1,8 @@
;;; gnus-topic.el --- a folding minor mode for Gnus group buffers
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Ilja Weis <kult(a)uni-paderborn.de>
;; Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -20,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -436,7 +437,7 @@ If LOWEST is non-nil, list all newsgroup
(copy-sequence gnus-group-listed-groups))))
(gnus-update-format-specifications nil 'topic)
-
+
(when (or (not gnus-topic-alist)
(not gnus-topology-checked-p))
(gnus-topic-check-topology))
@@ -1136,10 +1137,7 @@ articles in the topic and its subtopics.
(when (gnus-visual-p 'topic-menu 'menu)
(gnus-topic-make-menu-bar))
(gnus-set-format 'topic t)
- (gnus-add-minor-mode 'gnus-topic-mode " Topic"
- gnus-topic-mode-map nil (lambda (&rest junk)
- (interactive)
- (gnus-topic-mode nil t)))
+ (gnus-add-minor-mode 'gnus-topic-mode " Topic"
gnus-topic-mode-map)
(add-hook 'gnus-group-catchup-group-hook 'gnus-topic-update-topic)
(set (make-local-variable 'gnus-group-prepare-function)
'gnus-group-prepare-topics)
1.4 +4 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-undo.el
Index: gnus-undo.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-undo.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-undo.el 2004/09/28 02:21:10 1.3
+++ gnus-undo.el 2005/11/15 03:45:49 1.4
@@ -1,7 +1,7 @@
;;; gnus-undo.el --- minor mode for undoing in Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.11 +52 -36 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-util.el
Index: gnus-util.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-util.el,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -p -r1.10 -r1.11
--- gnus-util.el 2005/03/13 22:19:28 1.10
+++ gnus-util.el 2005/11/15 03:45:50 1.11
@@ -1,5 +1,6 @@
;;; gnus-util.el --- utility functions for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
;; Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -39,9 +40,12 @@
(require 'cl)
;; Fixme: this should be a gnus variable, not nnmail-.
(defvar nnmail-pathname-coding-system)
+ (defvar nnmail-active-file-coding-system)
;; Inappropriate references to other parts of Gnus.
(defvar gnus-emphasize-whitespace-regexp)
+ (defvar gnus-original-article-buffer)
+ (defvar gnus-user-agent)
)
(require 'time-date)
(require 'netrc)
@@ -331,8 +335,8 @@ is slower."
(defun gnus-completing-read-with-default (default prompt &rest args)
;; Like `completing-read', except that DEFAULT is the default argument.
(let* ((prompt (if default
- (concat prompt " (default " default ") ")
- (concat prompt " ")))
+ (concat prompt " (default " default "): ")
+ (concat prompt ": ")))
(answer (apply 'completing-read prompt args)))
(if (or (null answer) (zerop (length answer)))
default
@@ -1015,6 +1019,13 @@ ARG is passed to the first function."
(save-current-buffer
(apply 'run-hooks funcs)))
+(defun gnus-run-mode-hooks (&rest funcs)
+ "Run `run-mode-hooks' if it is available, otherwise `run-hooks'.
+This function saves the current buffer."
+ (if (fboundp 'run-mode-hooks)
+ (save-current-buffer (apply 'run-mode-hooks funcs))
+ (save-current-buffer (apply 'run-hooks funcs))))
+
;;; Various
(defvar gnus-group-buffer) ; Compiler directive
@@ -1026,14 +1037,6 @@ ARG is passed to the first function."
(set-buffer gnus-group-buffer)
(eq major-mode 'gnus-group-mode))))
-(defun gnus-remove-duplicates (list)
- (let (new)
- (while list
- (or (member (car list) new)
- (setq new (cons (car list) new)))
- (setq list (cdr list)))
- (nreverse new)))
-
(defun gnus-remove-if (predicate list)
"Return a copy of LIST with all items satisfying PREDICATE removed."
(let (out)
@@ -1507,39 +1510,47 @@ predicate on the elements."
(eval-when-compile
(defvar xemacs-codename)
- (defvar sxemacs-codename))
+ (defvar sxemacs-codename)
+ (defvar emacs-program-version))
(defun gnus-emacs-version ()
"Stringified Emacs version."
- (let ((system-v
- (cond
- ((eq gnus-user-agent 'emacs-gnus-config)
- system-configuration)
- ((eq gnus-user-agent 'emacs-gnus-type)
- (symbol-name system-type))
- (t nil))))
+ (let* ((lst (if (listp gnus-user-agent)
+ gnus-user-agent
+ '(gnus emacs type)))
+ (system-v (cond ((memq 'config lst)
+ system-configuration)
+ ((memq 'type lst)
+ (symbol-name system-type))
+ (t nil)))
+ codename emacsname)
+ (cond ((featurep 'sxemacs)
+ (setq emacsname "SXEmacs"
+ codename sxemacs-codename))
+ ((featurep 'xemacs)
+ (setq emacsname "XEmacs"
+ codename xemacs-codename))
+ (t
+ (setq emacsname "Emacs")))
(cond
- ((eq gnus-user-agent 'gnus)
+ ((not (memq 'emacs lst))
nil)
((string-match "^\\(\\([.0-9]+\\)*\\)\\.[0-9]+$" emacs-version)
+ ;; Emacs:
(concat "Emacs/" (match-string 1 emacs-version)
(if system-v
(concat " (" system-v ")")
"")))
- ((featurep 'sxemacs)
- (concat "SXEmacs/" emacs-program-version
- (when system-v
- (concat " ("
- (when sxemacs-codename
- (concat sxemacs-codename ", "))
- system-v ")"))))
- ((featurep 'xemacs)
- (concat "XEmacs/" emacs-program-version
- (when system-v
- (concat " ("
- (when xemacs-codename
- (concat xemacs-codename ", "))
- system-v ")"))))
+ ((or (featurep 'sxemacs) (featurep 'xemacs))
+ ;; XEmacs or SXEmacs:
+ (concat emacsname "/" emacs-program-version
+ " ("
+ (when (and (memq 'codename lst)
+ codename)
+ (concat codename
+ (when system-v ", ")))
+ (when system-v system-v)
+ ")"))
(t emacs-version))))
(defun gnus-rename-file (old-path new-path &optional trim)
@@ -1563,6 +1574,11 @@ empty directories from OLD-PATH."
(file-truename
(concat old-dir "..")))))))))
+(if (fboundp 'set-process-query-on-exit-flag)
+ (defalias 'gnus-set-process-query-on-exit-flag
+ 'set-process-query-on-exit-flag)
+ (defalias 'gnus-set-process-query-on-exit-flag
+ 'process-kill-without-query))
(provide 'gnus-util)
1.5 +14 -13 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-uu.el
Index: gnus-uu.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-uu.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- gnus-uu.el 2004/09/28 02:21:10 1.4
+++ gnus-uu.el 2005/11/15 03:45:50 1.5
@@ -1,7 +1,8 @@
;;; gnus-uu.el --- extract (uu)encoded files in Gnus
-;; Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, 1998, 2000,
-;; 2001, 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, 1998,
+;; 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Created: 2 Oct 1993
;; Keyword: news
@@ -20,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -836,7 +837,7 @@ When called interactively, prompt for RE
(erase-buffer)
(insert (format
"Date: %s\nFrom: %s\nSubject: %s Digest\n\n"
- (current-time-string) name name))
+ (message-make-date) name name))
(when (and message-forward-as-mime gnus-uu-digest-buffer)
(insert "<#part type=message/rfc822>\nSubject: Topics\n\n"))
(insert "Topics:\n")))
@@ -917,16 +918,16 @@ When called interactively, prompt for RE
(if (and message-forward-as-mime gnus-uu-digest-buffer)
(with-current-buffer gnus-uu-digest-buffer
(erase-buffer)
- (insert-buffer "*gnus-uu-pre*")
+ (insert-buffer-substring "*gnus-uu-pre*")
(goto-char (point-max))
- (insert-buffer "*gnus-uu-body*"))
+ (insert-buffer-substring "*gnus-uu-body*"))
(save-excursion
(set-buffer "*gnus-uu-pre*")
(insert (format "\n\n%s\n\n" (make-string 70 ?-)))
(if gnus-uu-digest-buffer
(with-current-buffer gnus-uu-digest-buffer
(erase-buffer)
- (insert-buffer "*gnus-uu-pre*"))
+ (insert-buffer-substring "*gnus-uu-pre*"))
(let ((coding-system-for-write mm-text-coding-system))
(gnus-write-buffer gnus-uu-saved-article-name))))
(save-excursion
@@ -939,7 +940,7 @@ When called interactively, prompt for RE
(if gnus-uu-digest-buffer
(with-current-buffer gnus-uu-digest-buffer
(goto-char (point-max))
- (insert-buffer "*gnus-uu-body*"))
+ (insert-buffer-substring "*gnus-uu-body*"))
(let ((coding-system-for-write mm-text-coding-system)
(file-name-coding-system nnmail-pathname-coding-system))
(write-region
@@ -1185,7 +1186,7 @@ When called interactively, prompt for RE
(ignore-errors
(replace-match
(format "%06d"
- (string-to-int (buffer-substring
+ (string-to-number (buffer-substring
(match-beginning 0) (match-end 0)))))))
(setq string (buffer-substring 1 (point-max)))
(setcar (car string-list) string)
@@ -1293,7 +1294,7 @@ When called interactively, prompt for RE
(not gnus-uu-be-dangerous)
(or (eq gnus-uu-be-dangerous t)
(gnus-y-or-n-p
- (format "Delete unsuccessfully decoded file %s"
+ (format "Delete unsuccessfully decoded file %s? "
result-file))))
(delete-file result-file)))
(when (memq 'begin process-state)
@@ -1353,7 +1354,7 @@ When called interactively, prompt for RE
(gnus-message 2 "No begin part at the beginning")
(sleep-for 2))
(setq state 'middle))))
-
+
;; When there are no result-files, then something must be wrong.
(if result-files
(message "")
@@ -1439,7 +1440,7 @@ When called interactively, prompt for RE
;; We replace certain characters that could make things messy.
(setq gnus-uu-file-name
(gnus-map-function
- mm-file-name-rewrite-functions
+ mm-file-name-rewrite-functions
(file-name-nondirectory (match-string 1))))
(replace-match (concat "begin 644 " gnus-uu-file-name) t t)
1.4 +4 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-vm.el
Index: gnus-vm.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-vm.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- gnus-vm.el 2004/09/28 02:21:10 1.3
+++ gnus-vm.el 2005/11/15 03:45:50 1.4
@@ -1,7 +1,7 @@
;;; gnus-vm.el --- vm interface for Gnus
-;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+;; 2003, 2004, 2005 Free Software Foundation, Inc.
;; Author: Per Persson <pp(a)gnu.ai.mit.edu>
;; Keywords: news, mail
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.5 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-win.el
Index: gnus-win.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-win.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- gnus-win.el 2005/03/13 00:23:31 1.4
+++ gnus-win.el 2005/11/15 03:45:50 1.5
@@ -1,7 +1,8 @@
;;; gnus-win.el --- window configuration functions for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.7 +89 -22 XEmacs/packages/xemacs-packages/gnus/lisp/gnus-xmas.el
Index: gnus-xmas.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus-xmas.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- gnus-xmas.el 2004/09/28 02:21:10 1.6
+++ gnus-xmas.el 2005/11/15 03:45:51 1.7
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -549,19 +549,55 @@ call it with the value of the `gnus-data
;;; The toolbar.
-(defcustom gnus-use-toolbar (if (featurep 'toolbar)
- 'default-toolbar
- nil)
- "*If nil, do not use a toolbar.
-If it is non-nil, it must be a toolbar. The five valid values are
-`default-toolbar', `top-toolbar', `bottom-toolbar',
-`right-toolbar', and `left-toolbar'."
- :type '(choice (const default-toolbar)
- (const top-toolbar) (const bottom-toolbar)
- (const left-toolbar) (const right-toolbar)
+(defun gnus-xmas-update-toolbars ()
+ "Update the toolbars' appearance."
+ (when (and (not noninteractive)
+ (featurep 'gnus-xmas))
+ (save-excursion
+ (dolist (buffer (buffer-list))
+ (set-buffer buffer)
+ (cond ((eq major-mode 'gnus-group-mode)
+ (gnus-xmas-setup-group-toolbar))
+ ((eq major-mode 'gnus-summary-mode)
+ (gnus-xmas-setup-summary-toolbar)))))))
+
+(defcustom gnus-use-toolbar (if (featurep 'toolbar) 'default)
+ "*Position to display the toolbar. Nil means do not use a toolbar.
+If it is non-nil, it should be one of the symbols `default', `top',
+`bottom', `right', and `left'. `default' means to use the default
+toolbar, the rest mean to display the toolbar on the place which those
+names show."
+ :type '(choice (const default)
+ (const top) (const bottom) (const left) (const right)
(const :tag "no toolbar" nil))
+ :set (lambda (symbol value)
+ (set-default
+ symbol
+ (if (or (not value)
+ (memq value (list 'default 'top 'bottom 'right 'left)))
+ value
+ 'default))
+ (gnus-xmas-update-toolbars))
:group 'gnus-xmas)
+(defcustom gnus-toolbar-thickness
+ (if (featurep 'toolbar)
+ (cons (specifier-instance default-toolbar-height)
+ (specifier-instance default-toolbar-width)))
+ "*Cons of the height and the width specifying the thickness of a toolbar.
+The height is used for the toolbar displayed on the top or the bottom,
+the width is used for the toolbar displayed on the right or the left."
+ :type '(cons :tag "height & width"
+ (integer :tag "height") (integer :tag "width"))
+ :set (lambda (symbol value)
+ (set-default
+ symbol
+ (if (and (consp value) (natnump (car value)) (natnump (cdr value)))
+ value
+ '(37 . 40)))
+ (gnus-xmas-update-toolbars))
+ :group 'gnus-xmas)
+
(defvar gnus-group-toolbar
'([gnus-group-get-new-news gnus-group-get-new-news t "Get new news"]
[gnus-group-get-new-news-this-group
@@ -641,19 +677,50 @@ If it is non-nil, it must be a toolbar.
[gnus-summary-exit gnus-summary-exit t "Exit this summary"])
"The summary buffer mail toolbar.")
+(defun gnus-xmas-setup-toolbar (toolbar)
+ (when (featurep 'toolbar)
+ (if (and gnus-use-toolbar
+ (message-xmas-setup-toolbar toolbar nil "gnus"))
+ (let* ((bar (or (intern-soft (format "%s-toolbar" gnus-use-toolbar))
+ 'default-toolbar))
+ (bars (delq bar (list 'top-toolbar 'bottom-toolbar
+ 'right-toolbar 'left-toolbar)))
+ hw)
+ (while bars
+ (remove-specifier (symbol-value (pop bars)) (current-buffer)))
+ (unless (eq bar 'default-toolbar)
+ (set-specifier default-toolbar nil (current-buffer)))
+ (set-specifier (symbol-value bar) toolbar (current-buffer))
+ (when (setq hw (cdr (assq gnus-use-toolbar
+ '((default . default-toolbar-height)
+ (top . top-toolbar-height)
+ (bottom . bottom-toolbar-height)))))
+ (set-specifier (symbol-value hw) (car gnus-toolbar-thickness)
+ (current-buffer)))
+ (when (setq hw (cdr (assq gnus-use-toolbar
+ '((default . default-toolbar-width)
+ (right . right-toolbar-width)
+ (left . left-toolbar-width)))))
+ (set-specifier (symbol-value hw) (cdr gnus-toolbar-thickness)
+ (current-buffer))))
+ (set-specifier default-toolbar nil (current-buffer))
+ (remove-specifier top-toolbar (current-buffer))
+ (remove-specifier bottom-toolbar (current-buffer))
+ (remove-specifier right-toolbar (current-buffer))
+ (remove-specifier left-toolbar (current-buffer)))
+ (set-specifier default-toolbar-visible-p t (current-buffer))
+ (set-specifier top-toolbar-visible-p t (current-buffer))
+ (set-specifier bottom-toolbar-visible-p t (current-buffer))
+ (set-specifier right-toolbar-visible-p t (current-buffer))
+ (set-specifier left-toolbar-visible-p t (current-buffer))))
+
(defun gnus-xmas-setup-group-toolbar ()
- (and gnus-use-toolbar
- (message-xmas-setup-toolbar gnus-group-toolbar nil "gnus")
- (set-specifier (symbol-value gnus-use-toolbar)
- (cons (current-buffer) gnus-group-toolbar))))
+ (gnus-xmas-setup-toolbar gnus-group-toolbar))
(defun gnus-xmas-setup-summary-toolbar ()
- (let ((bar (if (gnus-news-group-p gnus-newsgroup-name)
- gnus-summary-toolbar gnus-summary-mail-toolbar)))
- (and gnus-use-toolbar
- (message-xmas-setup-toolbar bar nil "gnus")
- (set-specifier (symbol-value gnus-use-toolbar)
- (cons (current-buffer) bar)))))
+ (gnus-xmas-setup-toolbar (if (gnus-news-group-p gnus-newsgroup-name)
+ gnus-summary-toolbar
+ gnus-summary-mail-toolbar)))
(defun gnus-xmas-mail-strip-quoted-names (address)
"Protect mail-strip-quoted-names from nil input.
1.9 +279 -106 XEmacs/packages/xemacs-packages/gnus/lisp/gnus.el
Index: gnus.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gnus.el,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -p -r1.8 -r1.9
--- gnus.el 2005/03/13 01:39:27 1.8
+++ gnus.el 2005/11/15 03:45:51 1.9
@@ -1,7 +1,7 @@
;;; gnus.el --- a newsreader for GNU Emacs
-;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996, 1997,
-;; 1998, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996, 1997, 1998,
+;; 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin(a)flab.flab.fujitsu.junet>
;; Lars Magne Ingebrigtsen <larsi(a)gnus.org>
@@ -21,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -34,8 +34,18 @@
(require 'wid-edit)
(require 'mm-util)
(require 'nnheader)
-(autoload 'message-y-or-n-p "message" nil nil 'macro)
+;; These are defined afterwards with gnus-define-group-parameter
+(defvar gnus-ham-process-destinations)
+(defvar gnus-parameter-ham-marks-alist)
+(defvar gnus-parameter-spam-marks-alist)
+(defvar gnus-spam-autodetect)
+(defvar gnus-spam-autodetect-methods)
+(defvar gnus-spam-newsgroup-contents)
+(defvar gnus-spam-process-destinations)
+(defvar gnus-spam-process-newsgroups)
+
+
(defgroup gnus nil
"The coffee-brewing, all singing, all dancing, kitchen sink newsreader."
:group 'news
@@ -274,7 +284,7 @@ is restarted, and sometimes reloaded."
:group 'gnus)
(defgroup gnus-exit nil
- "Exiting gnus."
+ "Exiting Gnus."
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
@@ -358,7 +368,7 @@ be set in `.emacs' instead."
;; We define these group faces here to avoid the display
;; update forced when creating new faces.
-(defface gnus-group-news-1-face
+(defface gnus-group-news-1
'((((class color)
(background dark))
(:foreground "PaleTurquoise" :bold t))
@@ -367,9 +377,12 @@ be set in `.emacs' instead."
(:foreground "ForestGreen" :bold t))
(t
()))
- "Level 1 newsgroup face.")
+ "Level 1 newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-1-face 'face-alias 'gnus-group-news-1)
-(defface gnus-group-news-1-empty-face
+(defface gnus-group-news-1-empty
'((((class color)
(background dark))
(:foreground "PaleTurquoise"))
@@ -378,9 +391,12 @@ be set in `.emacs' instead."
(:foreground "ForestGreen"))
(t
()))
- "Level 1 empty newsgroup face.")
+ "Level 1 empty newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-1-empty-face 'face-alias 'gnus-group-news-1-empty)
-(defface gnus-group-news-2-face
+(defface gnus-group-news-2
'((((class color)
(background dark))
(:foreground "turquoise" :bold t))
@@ -389,9 +405,12 @@ be set in `.emacs' instead."
(:foreground "CadetBlue4" :bold t))
(t
()))
- "Level 2 newsgroup face.")
+ "Level 2 newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-2-face 'face-alias 'gnus-group-news-2)
-(defface gnus-group-news-2-empty-face
+(defface gnus-group-news-2-empty
'((((class color)
(background dark))
(:foreground "turquoise"))
@@ -400,9 +419,12 @@ be set in `.emacs' instead."
(:foreground "CadetBlue4"))
(t
()))
- "Level 2 empty newsgroup face.")
+ "Level 2 empty newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-2-empty-face 'face-alias 'gnus-group-news-2-empty)
-(defface gnus-group-news-3-face
+(defface gnus-group-news-3
'((((class color)
(background dark))
(:bold t))
@@ -411,9 +433,12 @@ be set in `.emacs' instead."
(:bold t))
(t
()))
- "Level 3 newsgroup face.")
+ "Level 3 newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-3-face 'face-alias 'gnus-group-news-3)
-(defface gnus-group-news-3-empty-face
+(defface gnus-group-news-3-empty
'((((class color)
(background dark))
())
@@ -422,9 +447,12 @@ be set in `.emacs' instead."
())
(t
()))
- "Level 3 empty newsgroup face.")
+ "Level 3 empty newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-3-empty-face 'face-alias 'gnus-group-news-3-empty)
-(defface gnus-group-news-4-face
+(defface gnus-group-news-4
'((((class color)
(background dark))
(:bold t))
@@ -433,9 +461,12 @@ be set in `.emacs' instead."
(:bold t))
(t
()))
- "Level 4 newsgroup face.")
+ "Level 4 newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-4-face 'face-alias 'gnus-group-news-4)
-(defface gnus-group-news-4-empty-face
+(defface gnus-group-news-4-empty
'((((class color)
(background dark))
())
@@ -444,9 +475,12 @@ be set in `.emacs' instead."
())
(t
()))
- "Level 4 empty newsgroup face.")
+ "Level 4 empty newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-4-empty-face 'face-alias 'gnus-group-news-4-empty)
-(defface gnus-group-news-5-face
+(defface gnus-group-news-5
'((((class color)
(background dark))
(:bold t))
@@ -455,9 +489,12 @@ be set in `.emacs' instead."
(:bold t))
(t
()))
- "Level 5 newsgroup face.")
+ "Level 5 newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-5-face 'face-alias 'gnus-group-news-5)
-(defface gnus-group-news-5-empty-face
+(defface gnus-group-news-5-empty
'((((class color)
(background dark))
())
@@ -466,9 +503,12 @@ be set in `.emacs' instead."
())
(t
()))
- "Level 5 empty newsgroup face.")
+ "Level 5 empty newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-5-empty-face 'face-alias 'gnus-group-news-5-empty)
-(defface gnus-group-news-6-face
+(defface gnus-group-news-6
'((((class color)
(background dark))
(:bold t))
@@ -477,9 +517,12 @@ be set in `.emacs' instead."
(:bold t))
(t
()))
- "Level 6 newsgroup face.")
+ "Level 6 newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-6-face 'face-alias 'gnus-group-news-6)
-(defface gnus-group-news-6-empty-face
+(defface gnus-group-news-6-empty
'((((class color)
(background dark))
())
@@ -488,9 +531,12 @@ be set in `.emacs' instead."
())
(t
()))
- "Level 6 empty newsgroup face.")
+ "Level 6 empty newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-6-empty-face 'face-alias 'gnus-group-news-6-empty)
-(defface gnus-group-news-low-face
+(defface gnus-group-news-low
'((((class color)
(background dark))
(:foreground "DarkTurquoise" :bold t))
@@ -499,9 +545,12 @@ be set in `.emacs' instead."
(:foreground "DarkGreen" :bold t))
(t
()))
- "Low level newsgroup face.")
+ "Low level newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-low-face 'face-alias 'gnus-group-news-low)
-(defface gnus-group-news-low-empty-face
+(defface gnus-group-news-low-empty
'((((class color)
(background dark))
(:foreground "DarkTurquoise"))
@@ -510,9 +559,12 @@ be set in `.emacs' instead."
(:foreground "DarkGreen"))
(t
()))
- "Low level empty newsgroup face.")
+ "Low level empty newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-low-empty-face 'face-alias
'gnus-group-news-low-empty)
-(defface gnus-group-mail-1-face
+(defface gnus-group-mail-1
'((((class color)
(background dark))
(:foreground "aquamarine1" :bold t))
@@ -521,9 +573,12 @@ be set in `.emacs' instead."
(:foreground "DeepPink3" :bold t))
(t
(:bold t)))
- "Level 1 mailgroup face.")
+ "Level 1 mailgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-mail-1-face 'face-alias 'gnus-group-mail-1)
-(defface gnus-group-mail-1-empty-face
+(defface gnus-group-mail-1-empty
'((((class color)
(background dark))
(:foreground "aquamarine1"))
@@ -532,9 +587,12 @@ be set in `.emacs' instead."
(:foreground "DeepPink3"))
(t
(:italic t :bold t)))
- "Level 1 empty mailgroup face.")
+ "Level 1 empty mailgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-mail-1-empty-face 'face-alias 'gnus-group-mail-1-empty)
-(defface gnus-group-mail-2-face
+(defface gnus-group-mail-2
'((((class color)
(background dark))
(:foreground "aquamarine2" :bold t))
@@ -543,9 +601,12 @@ be set in `.emacs' instead."
(:foreground "HotPink3" :bold t))
(t
(:bold t)))
- "Level 2 mailgroup face.")
+ "Level 2 mailgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-mail-2-face 'face-alias 'gnus-group-mail-2)
-(defface gnus-group-mail-2-empty-face
+(defface gnus-group-mail-2-empty
'((((class color)
(background dark))
(:foreground "aquamarine2"))
@@ -554,9 +615,12 @@ be set in `.emacs' instead."
(:foreground "HotPink3"))
(t
(:bold t)))
- "Level 2 empty mailgroup face.")
+ "Level 2 empty mailgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-mail-2-empty-face 'face-alias 'gnus-group-mail-2-empty)
-(defface gnus-group-mail-3-face
+(defface gnus-group-mail-3
'((((class color)
(background dark))
(:foreground "aquamarine3" :bold t))
@@ -565,9 +629,12 @@ be set in `.emacs' instead."
(:foreground "magenta4" :bold t))
(t
(:bold t)))
- "Level 3 mailgroup face.")
+ "Level 3 mailgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-mail-3-face 'face-alias 'gnus-group-mail-3)
-(defface gnus-group-mail-3-empty-face
+(defface gnus-group-mail-3-empty
'((((class color)
(background dark))
(:foreground "aquamarine3"))
@@ -576,9 +643,12 @@ be set in `.emacs' instead."
(:foreground "magenta4"))
(t
()))
- "Level 3 empty mailgroup face.")
+ "Level 3 empty mailgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-mail-3-empty-face 'face-alias 'gnus-group-mail-3-empty)
-(defface gnus-group-mail-low-face
+(defface gnus-group-mail-low
'((((class color)
(background dark))
(:foreground "aquamarine4" :bold t))
@@ -587,9 +657,12 @@ be set in `.emacs' instead."
(:foreground "DeepPink4" :bold t))
(t
(:bold t)))
- "Low level mailgroup face.")
+ "Low level mailgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-mail-low-face 'face-alias 'gnus-group-mail-low)
-(defface gnus-group-mail-low-empty-face
+(defface gnus-group-mail-low-empty
'((((class color)
(background dark))
(:foreground "aquamarine4"))
@@ -598,20 +671,28 @@ be set in `.emacs' instead."
(:foreground "DeepPink4"))
(t
(:bold t)))
- "Low level empty mailgroup face.")
+ "Low level empty mailgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-mail-low-empty-face 'face-alias
'gnus-group-mail-low-empty)
;; Summary mode faces.
-(defface gnus-summary-selected-face '((t
- (:underline t)))
- "Face used for selected articles.")
+(defface gnus-summary-selected '((t (:underline t)))
+ "Face used for selected articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-selected-face 'face-alias 'gnus-summary-selected)
-(defface gnus-summary-cancelled-face
+(defface gnus-summary-cancelled
'((((class color))
(:foreground "yellow" :background "black")))
- "Face used for cancelled articles.")
+ "Face used for cancelled articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-cancelled-face 'face-alias 'gnus-summary-cancelled)
-(defface gnus-summary-high-ticked-face
+(defface gnus-summary-high-ticked
'((((class color)
(background dark))
(:foreground "pink" :bold t))
@@ -620,9 +701,12 @@ be set in `.emacs' instead."
(:foreground "firebrick" :bold t))
(t
(:bold t)))
- "Face used for high interest ticked articles.")
+ "Face used for high interest ticked articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-high-ticked-face 'face-alias 'gnus-summary-high-ticked)
-(defface gnus-summary-low-ticked-face
+(defface gnus-summary-low-ticked
'((((class color)
(background dark))
(:foreground "pink" :italic t))
@@ -631,9 +715,12 @@ be set in `.emacs' instead."
(:foreground "firebrick" :italic t))
(t
(:italic t)))
- "Face used for low interest ticked articles.")
+ "Face used for low interest ticked articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-low-ticked-face 'face-alias 'gnus-summary-low-ticked)
-(defface gnus-summary-normal-ticked-face
+(defface gnus-summary-normal-ticked
'((((class color)
(background dark))
(:foreground "pink"))
@@ -642,9 +729,12 @@ be set in `.emacs' instead."
(:foreground "firebrick"))
(t
()))
- "Face used for normal interest ticked articles.")
+ "Face used for normal interest ticked articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-normal-ticked-face 'face-alias
'gnus-summary-normal-ticked)
-(defface gnus-summary-high-ancient-face
+(defface gnus-summary-high-ancient
'((((class color)
(background dark))
(:foreground "SkyBlue" :bold t))
@@ -653,9 +743,12 @@ be set in `.emacs' instead."
(:foreground "RoyalBlue" :bold t))
(t
(:bold t)))
- "Face used for high interest ancient articles.")
+ "Face used for high interest ancient articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-high-ancient-face 'face-alias
'gnus-summary-high-ancient)
-(defface gnus-summary-low-ancient-face
+(defface gnus-summary-low-ancient
'((((class color)
(background dark))
(:foreground "SkyBlue" :italic t))
@@ -664,9 +757,12 @@ be set in `.emacs' instead."
(:foreground "RoyalBlue" :italic t))
(t
(:italic t)))
- "Face used for low interest ancient articles.")
+ "Face used for low interest ancient articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-low-ancient-face 'face-alias 'gnus-summary-low-ancient)
-(defface gnus-summary-normal-ancient-face
+(defface gnus-summary-normal-ancient
'((((class color)
(background dark))
(:foreground "SkyBlue"))
@@ -675,51 +771,72 @@ be set in `.emacs' instead."
(:foreground "RoyalBlue"))
(t
()))
- "Face used for normal interest ancient articles.")
+ "Face used for normal interest ancient articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-normal-ancient-face 'face-alias
'gnus-summary-normal-ancient)
-(defface gnus-summary-high-undownloaded-face
+(defface gnus-summary-high-undownloaded
'((((class color)
(background light))
(:bold t :foreground "cyan4"))
(((class color) (background dark))
(:bold t :foreground "LightGray"))
(t (:inverse-video t :bold t)))
- "Face used for high interest uncached articles.")
+ "Face used for high interest uncached articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-high-undownloaded-face 'face-alias
'gnus-summary-high-undownloaded)
-(defface gnus-summary-low-undownloaded-face
+(defface gnus-summary-low-undownloaded
'((((class color)
(background light))
(:italic t :foreground "cyan4" :bold nil))
(((class color) (background dark))
(:italic t :foreground "LightGray" :bold nil))
(t (:inverse-video t :italic t)))
- "Face used for low interest uncached articles.")
+ "Face used for low interest uncached articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-low-undownloaded-face 'face-alias
'gnus-summary-low-undownloaded)
-(defface gnus-summary-normal-undownloaded-face
+(defface gnus-summary-normal-undownloaded
'((((class color)
(background light))
(:foreground "cyan4" :bold nil))
(((class color) (background dark))
(:foreground "LightGray" :bold nil))
(t (:inverse-video t)))
- "Face used for normal interest uncached articles.")
+ "Face used for normal interest uncached articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-normal-undownloaded-face 'face-alias
'gnus-summary-normal-undownloaded)
-(defface gnus-summary-high-unread-face
+(defface gnus-summary-high-unread
'((t
(:bold t)))
- "Face used for high interest unread articles.")
+ "Face used for high interest unread articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-high-unread-face 'face-alias 'gnus-summary-high-unread)
-(defface gnus-summary-low-unread-face
+(defface gnus-summary-low-unread
'((t
(:italic t)))
- "Face used for low interest unread articles.")
+ "Face used for low interest unread articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-low-unread-face 'face-alias 'gnus-summary-low-unread)
-(defface gnus-summary-normal-unread-face
+(defface gnus-summary-normal-unread
'((t
()))
- "Face used for normal interest unread articles.")
+ "Face used for normal interest unread articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-normal-unread-face 'face-alias
'gnus-summary-normal-unread)
-(defface gnus-summary-high-read-face
+(defface gnus-summary-high-read
'((((class color)
(background dark))
(:foreground "PaleGreen"
@@ -730,9 +847,12 @@ be set in `.emacs' instead."
:bold t))
(t
(:bold t)))
- "Face used for high interest read articles.")
+ "Face used for high interest read articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-high-read-face 'face-alias 'gnus-summary-high-read)
-(defface gnus-summary-low-read-face
+(defface gnus-summary-low-read
'((((class color)
(background dark))
(:foreground "PaleGreen"
@@ -743,9 +863,12 @@ be set in `.emacs' instead."
:italic t))
(t
(:italic t)))
- "Face used for low interest read articles.")
+ "Face used for low interest read articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-low-read-face 'face-alias 'gnus-summary-low-read)
-(defface gnus-summary-normal-read-face
+(defface gnus-summary-normal-read
'((((class color)
(background dark))
(:foreground "PaleGreen"))
@@ -754,7 +877,10 @@ be set in `.emacs' instead."
(:foreground "DarkGreen"))
(t
()))
- "Face used for normal interest read articles.")
+ "Face used for normal interest read articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-normal-read-face 'face-alias 'gnus-summary-normal-read)
;;;
@@ -798,7 +924,7 @@ be set in `.emacs' instead."
(eval-and-compile
(autoload 'gnus-play-jingle "gnus-audio"))
-(defface gnus-splash-face
+(defface gnus-splash
'((((class color)
(background dark))
(:foreground "#888888"))
@@ -807,7 +933,10 @@ be set in `.emacs' instead."
(:foreground "#888888"))
(t
()))
- "Face for the splash screen.")
+ "Face for the splash screen."
+ :group 'gnus)
+;; backward-compatibility alias
+(put 'gnus-splash-face 'face-alias 'gnus-splash)
(defun gnus-splash ()
(save-excursion
@@ -877,6 +1006,11 @@ be set in `.emacs' instead."
(fboundp 'find-image)
(display-graphic-p)
(let* ((data-directory (nnheader-find-etc-directory "images/gnus"))
+ (image-load-path (cond (data-directory
+ (list data-directory))
+ ((boundp 'image-load-path)
+ (symbol-value 'image-load-path))
+ (t load-path)))
(image (find-image
`((:type xpm :file "gnus.xpm"
:color-symbols
@@ -886,11 +1020,11 @@ be set in `.emacs' instead."
("background" . ,(face-background 'default))))
(:type pbm :file "gnus.pbm"
;; Account for the pbm's blackground.
- :background ,(face-foreground 'gnus-splash-face)
+ :background ,(face-foreground 'gnus-splash)
:foreground ,(face-background 'default))
(:type xbm :file "gnus.xbm"
;; Account for the xbm's blackground.
- :background ,(face-foreground 'gnus-splash-face)
+ :background ,(face-foreground 'gnus-splash)
:foreground ,(face-background 'default))))))
(when image
(let ((size (image-size image)))
@@ -934,7 +1068,7 @@ be set in `.emacs' instead."
(rest (- wheight pheight)))
(insert (make-string (max 0 (* 2 (/ rest 3))) ?\n)))
;; Fontify some.
- (put-text-property (point-min) (point-max) 'face 'gnus-splash-face)
+ (put-text-property (point-min) (point-max) 'face 'gnus-splash)
(setq gnus-simple-splash t)))
(goto-char (point-min))
(setq mode-line-buffer-identification (concat " " gnus-version))
@@ -970,6 +1104,17 @@ For example:
:type '(repeat (cons regexp
(repeat sexp))))
+(defcustom gnus-parameters-case-fold-search 'default
+ "If it is t, ignore case of group names specified in `gnus-parameters'.
+If it is nil, don't ignore case. If it is `default', which is for the
+backward compatibility, use the value of `case-fold-search'."
+ :version "22.1"
+ :group 'gnus-group-various
+ :type '(choice :format "%{%t%}:\n %[Value Menu%] %v"
+ (const :tag "Use `case-fold-search'" default)
+ (const nil)
+ (const t)))
+
(defvar gnus-group-parameters-more nil)
(defmacro gnus-define-group-parameter (param &rest rest)
@@ -2214,7 +2359,8 @@ following hook:
"Function run when a group level is changed.
It is called with three parameters -- GROUP, LEVEL and OLDLEVEL."
:group 'gnus-group-levels
- :type 'function)
+ :type '(choice (const nil)
+ function))
;;; Face thingies.
@@ -2343,24 +2489,45 @@ This should be an alist for Emacs, or a
(symbol :tag "Parameter")
(sexp :tag "Value")))))
-(defcustom gnus-user-agent 'emacs-gnus-type
+(defcustom gnus-user-agent '(emacs gnus type)
"Which information should be exposed in the User-Agent header.
-It can be one of the symbols `gnus' \(show only Gnus version\), `emacs-gnus'
-\(show only Emacs and Gnus versions\), `emacs-gnus-config' \(same as
-`emacs-gnus' plus system configuration\), `emacs-gnus-type' \(same as
-`emacs-gnus' plus system type\) or a custom string. If you set it to a
-string, be sure to use a valid format, see RFC 2616."
+Can be a list of symbols or a string. Valid symbols are `gnus'
+\(show Gnus version\) and `emacs' \(show Emacs version\). In
+addition to the Emacs version, you can add `codename' \(show
+\(S\)XEmacs codename\) or either `config' \(show system
+configuration\) or `type' \(show system type\). If you set it to
+a string, be sure to use a valid format, see RFC 2616."
+
:version "22.1"
:group 'gnus-message
- :type '(choice
- (item :tag "Show Gnus and Emacs versions and system type"
- emacs-gnus-type)
- (item :tag "Show Gnus and Emacs versions and system configuration"
- emacs-gnus-config)
- (item :tag "Show Gnus and Emacs versions" emacs-gnus)
- (item :tag "Show only Gnus version" gnus)
- (string :tag "Other")))
+ :type '(choice (list (set :inline t
+ (const gnus :tag "Gnus version")
+ (const emacs :tag "Emacs version")
+ (choice :tag "system"
+ (const type :tag "system type")
+ (const config :tag "system configuration"))
+ (const codename :tag "Emacs codename")))
+ (string)))
+
+;; Convert old (No Gnus < 2005-01-10, v5-10 < 2005-09-05) symbol type values:
+(when (symbolp gnus-user-agent)
+ (setq gnus-user-agent
+ (cond ((eq gnus-user-agent 'emacs-gnus-config)
+ '(emacs gnus config))
+ ((eq gnus-user-agent 'emacs-gnus-type)
+ '(emacs gnus type))
+ ((eq gnus-user-agent 'emacs-gnus)
+ '(emacs gnus))
+ ((eq gnus-user-agent 'gnus)
+ '(gnus))
+ (t gnus-user-agent)))
+ (gnus-message 1 "Converted `gnus-user-agent' to `%s'."
gnus-user-agent)
+ (sit-for 1)
+ (if (get 'gnus-user-agent 'saved-value)
+ (customize-save-variable 'gnus-user-agent gnus-user-agent)
+ (gnus-message 1 "Edit your init file to make this change permanent.")
+ (sit-for 2)))
;;; Internal variables
@@ -3566,7 +3733,10 @@ You should probably use `gnus-find-metho
(defun gnus-parameters-get-parameter (group)
"Return the group parameters for GROUP from `gnus-parameters'."
- (let (params-list)
+ (let ((case-fold-search (if (eq gnus-parameters-case-fold-search 'default)
+ case-fold-search
+ gnus-parameters-case-fold-search))
+ params-list)
(dolist (elem gnus-parameters)
(when (string-match (car elem) group)
(setq params-list
@@ -3924,6 +4094,9 @@ If NEWSGROUP is nil, return the global k
(push (car valids) outs))
(setq valids (cdr valids)))
outs))
+
+(eval-and-compile
+ (autoload 'message-y-or-n-p "message" nil nil 'macro))
(defun gnus-read-group (prompt &optional default)
"Prompt the user for a group name.
1.5 +2 -2 XEmacs/packages/xemacs-packages/gnus/lisp/gpg-ring.el
Index: gpg-ring.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gpg-ring.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- gpg-ring.el 2004/09/28 02:21:10 1.4
+++ gpg-ring.el 2005/11/15 03:45:51 1.5
@@ -21,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
1.7 +2 -2 XEmacs/packages/xemacs-packages/gnus/lisp/gpg.el
Index: gpg.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/gpg.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- gpg.el 2005/03/13 00:23:31 1.6
+++ gpg.el 2005/11/15 03:45:51 1.7
@@ -21,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.5 +19 -8 XEmacs/packages/xemacs-packages/gnus/lisp/hashcash.el
Index: hashcash.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/hashcash.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- hashcash.el 2004/09/28 02:21:11 1.4
+++ hashcash.el 2005/11/15 03:45:51 1.5
@@ -1,6 +1,6 @@
;;; hashcash.el --- Add hashcash payments to email
-;; Copyright (C) 2003 Free Software Foundation
+;; Copyright (C) 2002, 2003, 2005 Free Software Foundation
;; Copyright (C) 1997--2002 Paul E. Foley
;; Maintainer: Paul Foley <mycroft(a)actrix.gen.nz>
@@ -24,38 +24,49 @@
(eval-and-compile
(autoload 'executable-find "executable"))
+(defgroup hashcash nil
+ "Hashcash configuration."
+ :group 'mail)
+
(defcustom hashcash-default-payment 0
"*The default number of bits to pay to unknown users.
If this is zero, no payment header will be generated.
See `hashcash-payment-alist'."
- :type 'integer)
+ :type 'integer
+ :group 'hashcash)
(defcustom hashcash-payment-alist '()
"*An association list mapping email addresses to payment amounts.
Elements may consist of (ADDR AMOUNT) or (ADDR STRING AMOUNT), where
ADDR is the email address of the intended recipient and AMOUNT is
the value of hashcash payment to be made to that user. STRING, if
-present, is the string to be hashed; if not present ADDR will be used.")
+present, is the string to be hashed; if not present ADDR will be used."
+ :group 'hashcash)
(defcustom hashcash-default-accept-payment 10
"*The default minimum number of bits to accept on incoming payments."
- :type 'integer)
+ :type 'integer
+ :group 'hashcash)
(defcustom hashcash-accept-resources `((,user-mail-address nil))
"*An association list mapping hashcash resources to payment amounts.
Resources named here are to be accepted in incoming payments. If the
corresponding AMOUNT is NIL, the value of `hashcash-default-accept-payment'
-is used instead.")
+is used instead."
+ :group 'hashcash)
(defcustom hashcash-path (executable-find "hashcash")
- "*The path to the hashcash binary.")
+ "*The path to the hashcash binary."
+ :group 'hashcash)
(defcustom hashcash-double-spend-database "hashcash.db"
- "*The path to the double-spending database.")
+ "*The path to the double-spending database."
+ :group 'hashcash)
(defcustom hashcash-in-news nil
"*Specifies whether or not hashcash payments should be made to
newsgroups."
- :type 'boolean)
+ :type 'boolean
+ :group 'hashcash)
(require 'mail-utils)
1.5 +6 -4 XEmacs/packages/xemacs-packages/gnus/lisp/html2text.el
Index: html2text.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/html2text.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- html2text.el 2005/03/13 00:23:31 1.4
+++ html2text.el 2005/11/15 03:45:51 1.5
@@ -1,6 +1,7 @@
;;; html2text.el --- a simple html to plain text converter
-;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Joakim Hove <hove(a)phys.ntnu.no>
;; This file is part of GNU Emacs.
@@ -17,8 +18,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -374,7 +375,8 @@ formatting, and then moved afterward.")
fashion, quite close to pure guess-work. It does work in some cases though."
(interactive)
(goto-char (point-min))
- (replace-regexp "^<br>$" "")
+ (while (re-search-forward "^<br>$" nil t)
+ (delete-region (match-beginning 0) (match-end 0)))
;; Removing lonely <br> on a single line, if they are left intact we
;; dont have any paragraphs at all.
(goto-char (point-min))
1.5 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/ietf-drums.el
Index: ietf-drums.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/ietf-drums.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- ietf-drums.el 2004/09/28 02:21:11 1.4
+++ ietf-drums.el 2005/11/15 03:45:51 1.5
@@ -1,7 +1,8 @@
;;; ietf-drums.el --- Functions for parsing RFC822bis headers
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; This file is part of GNU Emacs.
@@ -17,8 +18,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.6 +21 -10 XEmacs/packages/xemacs-packages/gnus/lisp/imap.el
Index: imap.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/imap.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- imap.el 2005/03/13 00:23:32 1.5
+++ imap.el 2005/11/15 03:45:52 1.6
@@ -1,7 +1,8 @@
;;; imap.el --- imap library
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Simon Josefsson <jas(a)pdc.kth.se>
;; Keywords: mail
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -181,8 +182,7 @@ the list is tried until a successful con
:type '(repeat string))
(defcustom imap-gssapi-program (list
- (concat "gsasl --client --connect %s:%p "
- "--imap --application-data "
+ (concat "gsasl %s %p "
"--mechanism GSSAPI "
"--authentication-id %l")
"imtest -m gssapi -u %l -p %p %s")
@@ -599,6 +599,10 @@ sure of changing the value of `foo'."
(or (not (looking-at "S: "))
(forward-char 3)
t)
+ ;; GNU SASL may print 'Trying ...' first.
+ (or (not (looking-at "Trying "))
+ (forward-line)
+ t)
(not (and (imap-parse-greeting)
;; success in imtest 1.6:
(re-search-forward
@@ -640,7 +644,11 @@ sure of changing the value of `foo'."
(let* ((port (or port imap-default-ssl-port))
(coding-system-for-read imap-coding-system-for-read)
(coding-system-for-write imap-coding-system-for-write)
- (process-connection-type nil)
+ (process-connection-type imap-process-connection-type)
+ (set-process-query-on-exit-flag
+ (if (fboundp 'set-process-query-on-exit-flag)
+ 'set-process-query-on-exit-flag
+ 'process-kill-without-query))
process)
(when (progn
(setq process (start-process
@@ -650,7 +658,7 @@ sure of changing the value of `foo'."
(format-spec-make
?s server
?p (number-to-string port)))))
- (process-kill-without-query process)
+ (funcall set-process-query-on-exit-flag process nil)
process)
(with-current-buffer buffer
(goto-char (point-min))
@@ -1030,8 +1038,11 @@ necessary. If nil, the buffer name is g
stream))
;; We're done, kill the first connection
(imap-close buffer)
- (kill-buffer buffer)
- (rename-buffer buffer)
+ (let ((name (if (stringp buffer)
+ buffer
+ (buffer-name buffer))))
+ (kill-buffer buffer)
+ (rename-buffer name))
(message "imap: Reconnecting with stream `%s'...done"
stream)
(setq imap-stream stream)
1.2 +4 -4 XEmacs/packages/xemacs-packages/gnus/lisp/legacy-gnus-agent.el
Index: legacy-gnus-agent.el
===================================================================
RCS file:
/pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/legacy-gnus-agent.el,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- legacy-gnus-agent.el 2005/03/13 00:23:32 1.1
+++ legacy-gnus-agent.el 2005/11/15 03:45:52 1.2
@@ -25,7 +25,7 @@ converted to the compressed format."
((file-directory-p member)
(push member search-in))
((equal (file-name-nondirectory member) ".agentview")
- (setq converted-something
+ (setq converted-something
(or (gnus-agent-convert-agentview member)
converted-something))))))
@@ -175,7 +175,7 @@ converted to the compressed format."
(t
t))))))
(kill-buffer buffer))
- (error "Change gnus-agent-expire-days to an integer for gnus to
start."))))
+ (error "Change gnus-agent-expire-days to an integer for gnus to
start"))))
;; The gnus-agent-unlist-expire-days has its own conversion prompt.
;; Therefore, hide the default prompt.
@@ -198,8 +198,8 @@ possible that the hook was persistently
(when (cond ((eq (type-of func) 'compiled-function)
;; Search def. of compiled function for gnus-agent-do-once
string
- (let* (definition
- print-level
+ (let* (definition
+ print-level
print-length
(standard-output
(lambda (char)
1.8 +15 -17 XEmacs/packages/xemacs-packages/gnus/lisp/lpath.el
Index: lpath.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/lpath.el,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -p -r1.7 -r1.8
--- lpath.el 2005/03/13 00:23:32 1.7
+++ lpath.el 2005/11/15 03:45:52 1.8
@@ -10,29 +10,27 @@
(mapcar (lambda (var) (unless (boundp var) (set var nil))) args))
(maybe-fbind '(Info-directory
- Info-menu create-image
- display-graphic-p find-coding-system find-image image-size
- image-type-available-p insert-image make-mode-line-mouse-map
- make-temp-file propertize put-image replace-regexp-in-string
- rmail-msg-is-pruned rmail-msg-restore-non-pruned-header
- sort-coding-systems string-to-multibyte tool-bar-add-item
- tool-bar-add-item-from-menu tool-bar-local-item-from-menu
- url-generic-parse-url url-http-file-exists-p
- url-insert-file-contents vcard-pretty-print w32-focus-frame
- w3m-detect-meta-charset w3m-region x-focus-frame))
+ Info-menu create-image display-graphic-p
+ display-time-event-handler find-coding-system find-image
+ image-size image-type-available-p insert-image
+ make-mode-line-mouse-map make-temp-file propertize put-image
+ replace-regexp-in-string rmail-msg-is-pruned
+ rmail-msg-restore-non-pruned-header sort-coding-systems
+ tool-bar-add-item tool-bar-add-item-from-menu
+ tool-bar-local-item-from-menu url-generic-parse-url
+ url-http-file-exists-p url-insert-file-contents
+ vcard-pretty-print w32-focus-frame w3m-detect-meta-charset
+ w3m-region x-focus-frame))
(maybe-bind '(filladapt-mode
- mc-pgp-always-sign rmail-insert-mime-forwarded-message-function
- url-current-object url-package-name url-package-version
+ rmail-insert-mime-forwarded-message-function
w3-meta-charset-content-type-regexp
- w3-meta-content-type-charset-regexp
- w3m-cid-retrieve-function-alist w3m-current-buffer
- w3m-display-inline-images w3m-minor-mode-map))
+ w3-meta-content-type-charset-regexp))
(if (featurep 'xemacs)
(progn
(maybe-fbind '(delete-overlay
- event-click-count event-end event-start
- find-coding-systems-for-charsets
+ detect-coding-string event-click-count event-end
+ event-start find-coding-systems-for-charsets
find-coding-systems-region find-coding-systems-string
mail-abbrevs-setup mouse-minibuffer-check
mouse-movement-p mouse-scroll-subr overlay-lists
1.4 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/mail-parse.el
Index: mail-parse.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mail-parse.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- mail-parse.el 2004/09/28 02:21:11 1.3
+++ mail-parse.el 2005/11/15 03:45:52 1.4
@@ -1,7 +1,8 @@
;;; mail-parse.el --- Interface functions for parsing mail
-;; Copyright (C) 1998, 1999, 2000
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; This file is part of GNU Emacs.
@@ -17,8 +18,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.4 +5 -3 XEmacs/packages/xemacs-packages/gnus/lisp/mail-prsvr.el
Index: mail-prsvr.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mail-prsvr.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- mail-prsvr.el 2004/09/28 02:21:12 1.3
+++ mail-prsvr.el 2005/11/15 03:45:52 1.4
@@ -1,6 +1,8 @@
;;; mail-prsvr.el --- Interface variables for parsing mail
-;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; This file is part of GNU Emacs.
@@ -16,8 +18,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.7 +7 -4 XEmacs/packages/xemacs-packages/gnus/lisp/mail-source.el
Index: mail-source.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mail-source.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- mail-source.el 2005/03/13 00:23:32 1.6
+++ mail-source.el 2005/11/15 03:45:52 1.7
@@ -1,7 +1,8 @@
;;; mail-source.el --- functions for fetching mail
-;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news, mail
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -739,6 +740,7 @@ Pass INFO on to CALLBACK."
(funcall function mail-source-crash-box))
;; The default is to use pop3.el.
(t
+ (require 'pop3)
(let ((pop3-password password)
(pop3-maildrop user)
(pop3-mailhost server)
@@ -800,6 +802,7 @@ Pass INFO on to CALLBACK."
(function)
;; The default is to use pop3.el.
(t
+ (require 'pop3)
(let ((pop3-password password)
(pop3-maildrop user)
(pop3-mailhost server)
1.6 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/mailcap.el
Index: mailcap.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mailcap.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- mailcap.el 2005/03/13 00:23:33 1.5
+++ mailcap.el 2005/11/15 03:45:52 1.6
@@ -1,7 +1,8 @@
;;; mailcap.el --- MIME media types configuration
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: William M. Perry <wmperry(a)aventail.com>
;; Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news, mail, multimedia
@@ -20,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.7 +121 -70 XEmacs/packages/xemacs-packages/gnus/lisp/message.el
Index: message.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/message.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- message.el 2005/03/13 00:23:33 1.6
+++ message.el 2005/11/15 03:45:53 1.7
@@ -1,7 +1,8 @@
;;; message.el --- composing mail and news messages
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: mail, news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -62,46 +63,46 @@
(put 'user-full-name 'custom-type 'string)
(defgroup message-various nil
- "Various Message Variables"
+ "Various Message Variables."
:link '(custom-manual "(message)Various Message Variables")
:group 'message)
(defgroup message-buffers nil
- "Message Buffers"
+ "Message Buffers."
:link '(custom-manual "(message)Message Buffers")
:group 'message)
(defgroup message-sending nil
- "Message Sending"
+ "Message Sending."
:link '(custom-manual "(message)Sending Variables")
:group 'message)
(defgroup message-interface nil
- "Message Interface"
+ "Message Interface."
:link '(custom-manual "(message)Interface")
:group 'message)
(defgroup message-forwarding nil
- "Message Forwarding"
+ "Message Forwarding."
:link '(custom-manual "(message)Forwarding")
:group 'message-interface)
(defgroup message-insertion nil
- "Message Insertion"
+ "Message Insertion."
:link '(custom-manual "(message)Insertion")
:group 'message)
(defgroup message-headers nil
- "Message Headers"
+ "Message Headers."
:link '(custom-manual "(message)Message Headers")
:group 'message)
(defgroup message-news nil
- "Composing News Messages"
+ "Composing News Messages."
:group 'message)
(defgroup message-mail nil
- "Composing Mail Messages"
+ "Composing Mail Messages."
:group 'message)
(defgroup message-faces nil
@@ -842,7 +843,8 @@ the signature is inserted."
(set-keymap-parent map minibuffer-local-map)
map)
"Keymap for `message-read-from-minibuffer'."
- :version "22.1")
+ :version "22.1"
+ :group 'message-various)
;;;###autoload
(defcustom message-citation-line-function 'message-insert-citation-line
@@ -1123,7 +1125,7 @@ starting with `not' and followed by rege
table)
"Syntax table used while in Message mode.")
-(defface message-header-to-face
+(defface message-header-to
'((((class color)
(background dark))
(:foreground "green2" :bold t))
@@ -1134,8 +1136,10 @@ starting with `not' and followed by rege
(:bold t :italic t)))
"Face used for displaying From headers."
:group 'message-faces)
+;; backward-compatibility alias
+(put 'message-header-to-face 'face-alias 'message-header-to)
-(defface message-header-cc-face
+(defface message-header-cc
'((((class color)
(background dark))
(:foreground "green4" :bold t))
@@ -1146,8 +1150,10 @@ starting with `not' and followed by rege
(:bold t)))
"Face used for displaying Cc headers."
:group 'message-faces)
+;; backward-compatibility alias
+(put 'message-header-cc-face 'face-alias 'message-header-cc)
-(defface message-header-subject-face
+(defface message-header-subject
'((((class color)
(background dark))
(:foreground "green3"))
@@ -1158,8 +1164,10 @@ starting with `not' and followed by rege
(:bold t)))
"Face used for displaying subject headers."
:group 'message-faces)
+;; backward-compatibility alias
+(put 'message-header-subject-face 'face-alias 'message-header-subject)
-(defface message-header-newsgroups-face
+(defface message-header-newsgroups
'((((class color)
(background dark))
(:foreground "yellow" :bold t :italic t))
@@ -1170,8 +1178,10 @@ starting with `not' and followed by rege
(:bold t :italic t)))
"Face used for displaying newsgroups headers."
:group 'message-faces)
+;; backward-compatibility alias
+(put 'message-header-newsgroups-face 'face-alias
'message-header-newsgroups)
-(defface message-header-other-face
+(defface message-header-other
'((((class color)
(background dark))
(:foreground "#b00000"))
@@ -1182,8 +1192,10 @@ starting with `not' and followed by rege
(:bold t :italic t)))
"Face used for displaying newsgroups headers."
:group 'message-faces)
+;; backward-compatibility alias
+(put 'message-header-other-face 'face-alias 'message-header-other)
-(defface message-header-name-face
+(defface message-header-name
'((((class color)
(background dark))
(:foreground "DarkGreen"))
@@ -1194,8 +1206,10 @@ starting with `not' and followed by rege
(:bold t)))
"Face used for displaying header names."
:group 'message-faces)
+;; backward-compatibility alias
+(put 'message-header-name-face 'face-alias 'message-header-name)
-(defface message-header-xheader-face
+(defface message-header-xheader
'((((class color)
(background dark))
(:foreground "blue"))
@@ -1206,8 +1220,10 @@ starting with `not' and followed by rege
(:bold t)))
"Face used for displaying X-Header headers."
:group 'message-faces)
+;; backward-compatibility alias
+(put 'message-header-xheader-face 'face-alias 'message-header-xheader)
-(defface message-separator-face
+(defface message-separator
'((((class color)
(background dark))
(:foreground "blue3"))
@@ -1218,8 +1234,10 @@ starting with `not' and followed by rege
(:bold t)))
"Face used for displaying the separator."
:group 'message-faces)
+;; backward-compatibility alias
+(put 'message-separator-face 'face-alias 'message-separator)
-(defface message-cited-text-face
+(defface message-cited-text
'((((class color)
(background dark))
(:foreground "red"))
@@ -1230,8 +1248,10 @@ starting with `not' and followed by rege
(:bold t)))
"Face used for displaying cited text names."
:group 'message-faces)
+;; backward-compatibility alias
+(put 'message-cited-text-face 'face-alias 'message-cited-text)
-(defface message-mml-face
+(defface message-mml
'((((class color)
(background dark))
(:foreground "ForestGreen"))
@@ -1242,6 +1262,8 @@ starting with `not' and followed by rege
(:bold t)))
"Face used for displaying MML."
:group 'message-faces)
+;; backward-compatibility alias
+(put 'message-mml-face 'face-alias 'message-mml)
(defun message-font-lock-make-header-matcher (regexp)
(let ((form
@@ -1265,41 +1287,41 @@ starting with `not' and followed by rege
(let ((content "[ \t]*\\(.+\\(\n[ \t].*\\)*\\)\n?"))
`((,(message-font-lock-make-header-matcher
(concat "^\\([Tt]o:\\)" content))
- (1 'message-header-name-face)
- (2 'message-header-to-face nil t))
+ (1 'message-header-name)
+ (2 'message-header-to nil t))
(,(message-font-lock-make-header-matcher
(concat "^\\(^[GBF]?[Cc][Cc]:\\|^[Rr]eply-[Tt]o:\\)" content))
- (1 'message-header-name-face)
- (2 'message-header-cc-face nil t))
+ (1 'message-header-name)
+ (2 'message-header-cc nil t))
(,(message-font-lock-make-header-matcher
(concat "^\\([Ss]ubject:\\)" content))
- (1 'message-header-name-face)
- (2 'message-header-subject-face nil t))
+ (1 'message-header-name)
+ (2 'message-header-subject nil t))
(,(message-font-lock-make-header-matcher
(concat "^\\([Nn]ewsgroups:\\|Followup-[Tt]o:\\)" content))
- (1 'message-header-name-face)
- (2 'message-header-newsgroups-face nil t))
+ (1 'message-header-name)
+ (2 'message-header-newsgroups nil t))
(,(message-font-lock-make-header-matcher
(concat "^\\([A-Z][^: \n\t]+:\\)" content))
- (1 'message-header-name-face)
- (2 'message-header-other-face nil t))
+ (1 'message-header-name)
+ (2 'message-header-other nil t))
(,(message-font-lock-make-header-matcher
(concat "^\\(X-[A-Za-z0-9-]+:\\|In-Reply-To:\\)" content))
- (1 'message-header-name-face)
- (2 'message-header-name-face))
+ (1 'message-header-name)
+ (2 'message-header-name))
,@(if (and mail-header-separator
(not (equal mail-header-separator "")))
`((,(concat "^\\(" (regexp-quote mail-header-separator)
"\\)$")
- 1 'message-separator-face))
+ 1 'message-separator))
nil)
((lambda (limit)
(re-search-forward (concat "^\\("
message-cite-prefix-regexp
"\\).*")
limit t))
- (0 'message-cited-text-face))
+ (0 'message-cited-text))
("<#/?\\(multipart\\|part\\|external\\|mml\\|secure\\)[^>]*>"
- (0 'message-mml-face))))
+ (0 'message-mml))))
"Additional expressions to highlight in Message mode.")
@@ -1421,7 +1443,7 @@ no, only reply back to the author."
:type 'boolean)
(defcustom message-user-fqdn nil
- "*Domain part of Messsage-Ids."
+ "*Domain part of Message-Ids."
:version "22.1"
:group 'message-headers
:link '(custom-manual "(message)News Headers")
@@ -1432,8 +1454,13 @@ no, only reply back to the author."
(file-error))
(mm-coding-system-p 'utf-8)
(executable-find idna-program)
- 'ask)
- "Whether to encode non-ASCII in domain names into ASCII according to
IDNA."
+ (string= (idna-to-ascii "räksmörgås")
+ "xn--rksmrgs-5wao1o")
+ t)
+ "Whether to encode non-ASCII in domain names into ASCII according to IDNA.
+GNU Libidn, and in particular the elisp package \"idna.el\" and
+the external program \"idn\", must be installed for this
+functionality to work."
:version "22.1"
:group 'message-headers
:link '(custom-manual "(message)IDNA")
@@ -1785,7 +1812,6 @@ Leading \"Re: \" is not stripped by this
;;; Suggested by Jonas Steverud @
www.dtek.chalmers.se/~d4jonas/
-;;;###autoload
(defun message-change-subject (new-subject)
"Ask for NEW-SUBJECT header, append (was: <Old Subject>)."
;;
<
URL:http://www.landfield.com/usefor/drafts/draft-ietf-usefor-useage--1.02...
@@ -1817,7 +1843,6 @@ Leading \"Re: \" is not stripped by this
" (was: "
old-subject ")\n")))))))))
-;;;###autoload
(defun message-mark-inserted-region (beg end)
"Mark some region in the current article with enclosing tags.
See `message-mark-insert-begin' and `message-mark-insert-end'."
@@ -1829,7 +1854,6 @@ See `message-mark-insert-begin' and `mes
(goto-char beg)
(insert message-mark-insert-begin)))
-;;;###autoload
(defun message-mark-insert-file (file)
"Insert FILE at point, marking it with enclosing tags.
See `message-mark-insert-begin' and `message-mark-insert-end'."
@@ -1842,7 +1866,6 @@ See `message-mark-insert-begin' and `mes
(goto-char p)
(insert message-mark-insert-begin)))
-;;;###autoload
(defun message-add-archive-header ()
"Insert \"X-No-Archive: Yes\" in the header and a note in the body.
The note can be customized using `message-archive-note'. When called with a
@@ -1862,7 +1885,6 @@ body, set `message-archive-note' to nil
(message-add-header message-archive-header)
(message-sort-headers)))
-;;;###autoload
(defun message-cross-post-followup-to-header (target-group)
"Mangles FollowUp-To and Newsgroups header to point to TARGET-GROUP.
With prefix-argument just set Follow-Up, don't cross-post."
@@ -1906,7 +1928,6 @@ With prefix-argument just set Follow-Up,
(insert (concat "\nFollowup-To: " target-group)))
(setq message-cross-post-old-target target-group))
-;;;###autoload
(defun message-cross-post-insert-note (target-group cross-post in-old
old-groups)
"Insert a in message body note about a set Followup or Crosspost.
@@ -1939,7 +1960,6 @@ been made to before the user asked for a
(insert (concat message-followup-to-note target-group "\n"))
(insert (concat message-cross-post-note target-group "\n")))))
-;;;###autoload
(defun message-cross-post-followup-to (target-group)
"Crossposts message and set Followup-To to TARGET-GROUP.
With prefix-argument just set Follow-Up, don't cross-post."
@@ -1981,7 +2001,6 @@ With prefix-argument just set Follow-Up,
;;; Reduce To: to Cc: or Bcc: header
-;;;###autoload
(defun message-reduce-to-to-cc ()
"Replace contents of To: header with contents of Cc: or Bcc: header."
(interactive)
@@ -3185,7 +3204,9 @@ prefix, and don't delete any headers."
(when (and message-reply-buffer
message-cite-function)
(delete-windows-on message-reply-buffer t)
- (insert-buffer message-reply-buffer)
+ (push-mark (save-excursion
+ (insert-buffer-substring message-reply-buffer)
+ (point)))
(unless arg
(funcall message-cite-function))
(message-exchange-point-and-mark)
@@ -3395,8 +3416,15 @@ Instead, just auto-save the buffer and t
(file-exists-p auto-save-file-name))
(and file-name
(file-exists-p file-name)))
- (yes-or-no-p (format "Remove the backup file%s? "
- (if modified " too" ""))))
+ (progn
+ ;; If the message buffer has lived in a dedicated window,
+ ;; `kill-buffer' has killed the frame. Thus the
+ ;; `yes-or-no-p' may show up in a lowered frame. Make sure
+ ;; that the user can see the question by raising the
+ ;; current frame:
+ (raise-frame)
+ (yes-or-no-p (format "Remove the backup file%s? "
+ (if modified " too" "")))))
(ignore-errors
(delete-file auto-save-file-name))
(let ((message-draft-article draft-article))
@@ -3407,8 +3435,7 @@ Instead, just auto-save the buffer and t
"Bury this mail BUFFER."
(let ((newbuf (other-buffer buffer)))
(bury-buffer buffer)
- (if (and (fboundp 'frame-parameters)
- (cdr (assq 'dedicated (frame-parameters)))
+ (if (and (window-dedicated-p (selected-window))
(not (null (delq (selected-frame) (visible-frame-list)))))
(delete-frame (selected-frame))
(switch-to-buffer newbuf))))
@@ -4167,7 +4194,7 @@ Otherwise, generate and save a value for
(zerop
(length
(setq to (completing-read
- "Followups to (default: no Followup-To header) "
+ "Followups to (default no Followup-To header): "
(mapcar #'list
(cons "poster"
(message-tokenize-header
@@ -4564,9 +4591,11 @@ Otherwise, generate and save a value for
(when (re-search-forward ",+$" nil t)
(replace-match "" t t))))))
+(eval-when-compile (require 'parse-time))
(defun message-make-date (&optional now)
"Make a valid data header.
If NOW, use that time instead."
+ (require 'parse-time)
(let* ((now (or now (current-time)))
(zone (nth 8 (decode-time now)))
(sign "+"))
@@ -4925,13 +4954,17 @@ subscribed address (and not the addition
(let ((field (message-fetch-field header))
rhs ace address)
(when field
- (dolist (address (mail-header-parse-addresses field))
- (setq address (car address)
- rhs (downcase (or (cadr (split-string address "@")) ""))
- ace (downcase (idna-to-ascii rhs)))
+ (dolist (rhs
+ (mm-delete-duplicates
+ (mapcar (lambda (rhs) (or (cadr (split-string rhs "@")) ""))
+ (mapcar 'downcase
+ (mapcar
+ 'car (mail-header-parse-addresses field))))))
+ (setq ace (downcase (idna-to-ascii rhs)))
(when (and (not (equal rhs ace))
(or (not (eq message-use-idna 'ask))
- (y-or-n-p (format "Replace %s with %s? " rhs ace))))
+ (y-or-n-p (format "Replace %s with %s in %s:? "
+ rhs ace header))))
(goto-char (point-min))
(while (re-search-forward (concat "^" header ":") nil t)
(message-narrow-to-field)
@@ -4950,6 +4983,9 @@ See `message-idna-encode'."
(message-narrow-to-head)
(message-idna-to-ascii-rhs-1 "From")
(message-idna-to-ascii-rhs-1 "To")
+ (message-idna-to-ascii-rhs-1 "Reply-To")
+ (message-idna-to-ascii-rhs-1 "Mail-Reply-To")
+ (message-idna-to-ascii-rhs-1 "Mail-Followup-To")
(message-idna-to-ascii-rhs-1 "Cc")))))
(defun message-generate-headers (headers)
@@ -5041,7 +5077,8 @@ Headers already prepared in the buffer a
;; The element is a symbol. We insert the value
;; of this symbol, if any.
(symbol-value header))
- ((not (message-check-element header))
+ ((not (message-check-element
+ (intern (downcase (symbol-name header)))))
;; We couldn't generate a value for this header,
;; so we just ask the user.
(read-from-minibuffer
@@ -5909,9 +5946,9 @@ want to get rid of this query permanentl
(defun message-is-yours-p ()
"Non-nil means current article is yours.
-If you have added 'cancel-messages to 'message-shoot-gnksa-feet', all
articles
+If you have added 'cancel-messages to `message-shoot-gnksa-feet', all articles
are yours except those that have Cancel-Lock header not belonging to you.
-Instead of shooting GNKSA feet, you should modify 'message-alternative-emails'
+Instead of shooting GNKSA feet, you should modify `message-alternative-emails'
regexp to match all of yours addresses."
;; Canlock-logic as suggested by Per Abrahamsen
;; <abraham(a)dina.kvl.dk>
@@ -6363,7 +6400,8 @@ Optional DIGEST will use digest to forwa
(replace-match "X-From-Line: "))
;; Send it.
(let ((message-inhibit-body-encoding t)
- message-required-mail-headers)
+ message-required-mail-headers
+ rfc2047-encode-encoded-words)
(message-send-mail))
(kill-buffer (current-buffer)))
(message "Resending message to %s...done" address)))
@@ -6528,9 +6566,8 @@ which specify the range to operate on."
(defun message-tool-bar-local-item-from-menu (command icon in-map &optional
from-map &rest props)
;; We need to make tool bar entries in local keymaps with
- ;; `tool-bar-local-item-from-menu' in Emacs > 21.3
+ ;; `tool-bar-local-item-from-menu' in Emacs >= 22
(if (fboundp 'tool-bar-local-item-from-menu)
- ;; This is for Emacs 21.3
(tool-bar-local-item-from-menu command icon in-map from-map props)
(tool-bar-add-item-from-menu command icon from-map props)))
@@ -6549,7 +6586,7 @@ which specify the range to operate on."
write-file dired open-file))
(define-key tool-bar-map (vector key) nil))
(message-tool-bar-local-item-from-menu
- 'message-send-and-exit "mail_send" tool-bar-map message-mode-map)
+ 'message-send-and-exit "mail/send" tool-bar-map message-mode-map)
(message-tool-bar-local-item-from-menu
'message-kill-buffer "close" tool-bar-map message-mode-map)
(message-tool-bar-local-item-from-menu
@@ -6598,7 +6635,8 @@ If nil, the function bound in `text-mode
:version "22.1"
:group 'message
:link '(custom-manual "(message)Various Commands")
- :type 'function)
+ :type '(choice (const nil)
+ function))
(defun message-tab ()
"Complete names according to `message-completion-alist'.
@@ -6615,6 +6653,17 @@ those headers."
(lookup-key global-map "\t")
'indent-relative))))
+(eval-and-compile
+ (condition-case nil
+ (with-temp-buffer
+ (let ((standard-output (current-buffer)))
+ (eval '(display-completion-list nil "")))
+ (defalias 'message-display-completion-list 'display-completion-list))
+ (error ;; Don't use `wrong-number-of-arguments' here because of XEmacs.
+ (defun message-display-completion-list (completions &optional ignore)
+ "Display the list of completions, COMPLETIONS, using
`standard-output'."
+ (display-completion-list completions)))))
+
(defun message-expand-group ()
"Expand the group name under point."
(let* ((b (save-excursion
@@ -6653,7 +6702,9 @@ those headers."
(let ((buffer-read-only nil))
(erase-buffer)
(let ((standard-output (current-buffer)))
- (display-completion-list (sort completions 'string<)))
+ (message-display-completion-list (sort completions 'string<)
+ string))
+ (setq buffer-read-only nil)
(goto-char (point-min))
(delete-region (point) (progn (forward-line 3) (point))))))))))
1.4 +53 -14 XEmacs/packages/xemacs-packages/gnus/lisp/messagexmas.el
Index: messagexmas.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/messagexmas.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- messagexmas.el 2004/09/28 02:21:12 1.3
+++ messagexmas.el 2005/11/15 03:45:53 1.4
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -38,13 +38,20 @@
If this variable is nil, Message will try to locate the directory
automatically.")
-(defvar message-use-toolbar (if (featurep 'toolbar)
- 'default-toolbar
- nil)
- "*If nil, do not use a toolbar.
-If it is non-nil, it must be a toolbar. The five valid values are
-`default-toolbar', `top-toolbar', `bottom-toolbar',
-`right-toolbar', and `left-toolbar'.")
+(defvar message-use-toolbar (if (featurep 'toolbar) 'default)
+ "*Position to display the toolbar. Nil means do not use a toolbar.
+If it is non-nil, it should be one of the symbols `default', `top',
+`bottom', `right', and `left'. `default' means to use the default
+toolbar, the rest mean to display the toolbar on the place which those
+names show.")
+
+(defvar message-toolbar-thickness
+ (if (featurep 'toolbar)
+ (cons (specifier-instance default-toolbar-height)
+ (specifier-instance default-toolbar-width)))
+ "*Cons of the height and the width specifying the thickness of a toolbar.
+The height is used for the toolbar displayed on the top or the bottom,
+the width is used for the toolbar displayed on the right or the left.")
(defvar message-toolbar
'([message-spell ispell-message t "Spell"]
@@ -60,7 +67,8 @@ If it is non-nil, it must be a toolbar.
(nnheader-find-etc-directory package))))
(defun message-xmas-setup-toolbar (bar &optional force package)
- (let ((dir (message-xmas-find-glyph-directory package))
+ (let ((dir (or (message-xmas-find-glyph-directory package)
+ (message-xmas-find-glyph-directory "gnus")))
(xpm (if (featurep 'xpm) "xpm" "xbm"))
icon up down disabled name)
(unless package
@@ -84,10 +92,41 @@ If it is non-nil, it must be a toolbar.
dir))
(defun message-setup-toolbar ()
- (and message-use-toolbar
- (message-xmas-setup-toolbar message-toolbar)
- (set-specifier (symbol-value message-use-toolbar)
- (cons (current-buffer) message-toolbar))))
+ (when (featurep 'toolbar)
+ (if (and message-use-toolbar
+ (message-xmas-setup-toolbar message-toolbar))
+ (let* ((bar (or (intern-soft (format "%s-toolbar" message-use-toolbar))
+ 'default-toolbar))
+ (bars (delq bar (list 'top-toolbar 'bottom-toolbar
+ 'right-toolbar 'left-toolbar)))
+ hw)
+ (while bars
+ (remove-specifier (symbol-value (pop bars)) (current-buffer)))
+ (unless (eq bar 'default-toolbar)
+ (set-specifier default-toolbar nil (current-buffer)))
+ (set-specifier (symbol-value bar) message-toolbar (current-buffer))
+ (when (setq hw (cdr (assq message-use-toolbar
+ '((default . default-toolbar-height)
+ (top . top-toolbar-height)
+ (bottom . bottom-toolbar-height)))))
+ (set-specifier (symbol-value hw) (car message-toolbar-thickness)
+ (current-buffer)))
+ (when (setq hw (cdr (assq message-use-toolbar
+ '((default . default-toolbar-width)
+ (right . right-toolbar-width)
+ (left . left-toolbar-width)))))
+ (set-specifier (symbol-value hw) (cdr message-toolbar-thickness)
+ (current-buffer))))
+ (set-specifier default-toolbar nil (current-buffer))
+ (remove-specifier top-toolbar (current-buffer))
+ (remove-specifier bottom-toolbar (current-buffer))
+ (remove-specifier right-toolbar (current-buffer))
+ (remove-specifier left-toolbar (current-buffer)))
+ (set-specifier default-toolbar-visible-p t (current-buffer))
+ (set-specifier top-toolbar-visible-p t (current-buffer))
+ (set-specifier bottom-toolbar-visible-p t (current-buffer))
+ (set-specifier right-toolbar-visible-p t (current-buffer))
+ (set-specifier left-toolbar-visible-p t (current-buffer))))
(defun message-xmas-exchange-point-and-mark ()
"Exchange point and mark, but allow for XEmacs' optional argument."
1.4 +4 -4 XEmacs/packages/xemacs-packages/gnus/lisp/messcompat.el
Index: messcompat.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/messcompat.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- messcompat.el 2004/09/28 02:21:12 1.3
+++ messcompat.el 2005/11/15 03:45:53 1.4
@@ -1,7 +1,7 @@
;;; messcompat.el --- making message mode compatible with mail mode
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: mail, news
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.7 +7 -6 XEmacs/packages/xemacs-packages/gnus/lisp/mm-bodies.el
Index: mm-bodies.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mm-bodies.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- mm-bodies.el 2005/03/13 00:23:33 1.6
+++ mm-bodies.el 2005/11/15 03:45:53 1.7
@@ -1,7 +1,7 @@
;;; mm-bodies.el --- Functions for decoding MIME things
-;; Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; MORIOKA Tomohiko <morioka(a)jaist.ac.jp>
@@ -19,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -95,7 +95,8 @@ If no encoding was done, nil is returned
(save-excursion
(if charset
(progn
- (mm-encode-coding-region (point-min) (point-max) charset)
+ (mm-encode-coding-region (point-min) (point-max)
+ (mm-charset-to-coding-system charset))
charset)
(goto-char (point-min))
(let ((charsets (mm-find-mime-charset-region (point-min) (point-max)
@@ -227,7 +228,7 @@ If TYPE is `text/plain' CRLF->LF transla
nil))
(when (and
(memq encoding '(base64 x-uuencode x-uue x-binhex x-yenc))
- (equal type "text/plain"))
+ (string-match "\\`text/" type))
(goto-char (point-min))
(while (search-forward "\r\n" nil t)
(replace-match "\n" t t)))))
1.7 +54 -22 XEmacs/packages/xemacs-packages/gnus/lisp/mm-decode.el
Index: mm-decode.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mm-decode.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- mm-decode.el 2005/03/13 00:23:33 1.6
+++ mm-decode.el 2005/11/15 03:45:53 1.7
@@ -1,7 +1,8 @@
;;; mm-decode.el --- Functions for decoding MIME things
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; MORIOKA Tomohiko <morioka(a)jaist.ac.jp>
;; This file is part of GNU Emacs.
@@ -18,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -37,6 +38,8 @@
(autoload 'mm-inline-external-body "mm-extern")
(autoload 'mm-insert-inline "mm-view"))
+(defvar gnus-current-window-configuration)
+
(add-hook 'gnus-exit-gnus-hook 'mm-destroy-postponed-undisplay-list)
(defgroup mime-display ()
@@ -219,7 +222,12 @@ before the external MIME handler is invo
("text/richtext" mm-inline-text identity)
("text/x-patch" mm-display-patch-inline
(lambda (handle)
- (locate-library "diff-mode")))
+ ;; If the diff-mode.el package is installed, the function is
+ ;; autoloaded. Checking (locate-library "diff-mode") would be trying
+ ;; to cater to broken installations. OTOH checking the function
+ ;; makes it possible to install another package which provides an
+ ;; alternative implementation of diff-mode. --Stef
+ (fboundp 'diff-mode)))
("application/emacs-lisp" mm-display-elisp-inline identity)
("application/x-emacs-lisp" mm-display-elisp-inline identity)
("text/html"
@@ -448,21 +456,19 @@ If not set, `default-directory' will be
(defvar mm-viewer-completion-map
(let ((map (make-sparse-keymap 'mm-viewer-completion-map)))
(set-keymap-parent map minibuffer-local-completion-map)
+ ;; Should we bind other key to minibuffer-complete-word?
+ (define-key map " " 'self-insert-command)
map)
"Keymap for input viewer with completion.")
-;; Should we bind other key to minibuffer-complete-word?
-(define-key mm-viewer-completion-map " " 'self-insert-command)
-
(defvar mm-viewer-completion-map
(let ((map (make-sparse-keymap 'mm-viewer-completion-map)))
(set-keymap-parent map minibuffer-local-completion-map)
+ ;; Should we bind other key to minibuffer-complete-word?
+ (define-key map " " 'self-insert-command)
map)
"Keymap for input viewer with completion.")
-;; Should we bind other key to minibuffer-complete-word?
-(define-key mm-viewer-completion-map " " 'self-insert-command)
-
;;; The functions.
(defun mm-alist-to-plist (alist)
@@ -561,7 +567,7 @@ Postpone undisplaying of viewers for typ
;; what really needs to be done here is a way to link a
;; MIME handle back to it's parent MIME handle (in a multilevel
;; MIME article). That would probably require changing
- ;; the mm-handle API so we simply store the multipart buffert
+ ;; the mm-handle API so we simply store the multipart buffer
;; name as a text property of the "multipart/whatever" string.
(add-text-properties 0 (length (car ctl))
(list 'buffer (mm-copy-to-buffer)
@@ -804,8 +810,7 @@ external if displayed external."
(mm-mailcap-command
method file (mm-handle-type handle)))
(if (buffer-live-p buffer)
- (save-excursion
- (set-buffer buffer)
+ (with-current-buffer buffer
(buffer-string))))
(progn
(ignore-errors (delete-file file))
@@ -817,11 +822,32 @@ external if displayed external."
(let ((command (mm-mailcap-command
method file (mm-handle-type handle))))
(unwind-protect
- (start-process "*display*"
- (setq buffer
- (generate-new-buffer " *mm*"))
- shell-file-name
- shell-command-switch command)
+ (progn
+ (start-process "*display*"
+ (setq buffer
+ (generate-new-buffer " *mm*"))
+ shell-file-name
+ shell-command-switch command)
+ (set-process-sentinel
+ (get-buffer-process buffer)
+ `(lambda (process state)
+ (when (eq 'exit (process-status process))
+ ;; Don't use `ignore-errors'.
+ (condition-case nil
+ (delete-file ,file)
+ (error))
+ (condition-case nil
+ (delete-directory ,(file-name-directory file))
+ (error))
+ (condition-case nil
+ (kill-buffer ,buffer)
+ (error))
+ (condition-case nil
+ ,(macroexpand (list 'mm-handle-set-undisplayer
+ (list 'quote handle)
+ nil))
+ (error))
+ (message "Displaying %s...done" ,command)))))
(mm-handle-set-external-undisplayer
handle (cons file buffer)))
(message "Displaying %s..." command))
@@ -1034,9 +1060,15 @@ external if displayed external."
(defun mm-insert-part (handle)
"Insert the contents of HANDLE in the current buffer."
(save-excursion
- (insert (if (mm-multibyte-p)
- (mm-string-as-multibyte (mm-get-part handle))
- (mm-get-part handle)))))
+ (insert
+ (cond ((eq (mail-content-type-get (mm-handle-type handle) 'charset)
+ 'gnus-decoded)
+ (with-current-buffer (mm-handle-buffer handle)
+ (buffer-string)))
+ ((mm-multibyte-p)
+ (mm-string-as-multibyte (mm-get-part handle)))
+ (t
+ (mm-get-part handle))))))
(defun mm-file-name-delete-whitespace (file-name)
"Remove all whitespace characters from FILE-NAME."
1.5 +6 -5 XEmacs/packages/xemacs-packages/gnus/lisp/mm-encode.el
Index: mm-encode.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mm-encode.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- mm-encode.el 2004/09/28 02:21:14 1.4
+++ mm-encode.el 2005/11/15 03:45:53 1.5
@@ -1,7 +1,8 @@
;;; mm-encode.el --- Functions for encoding MIME things
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; MORIOKA Tomohiko <morioka(a)jaist.ac.jp>
;; This file is part of GNU Emacs.
@@ -18,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -117,7 +118,7 @@ ENCODING can be: nil (do nothing); one o
;; Likewise base64 below.
(quoted-printable-encode-region (point-min) (point-max) t))
((eq encoding 'base64)
- (when (equal type "text/plain")
+ (when (string-match "\\`text/" type)
(goto-char (point-min))
(while (search-forward "\n" nil t)
(replace-match "\r\n" t t)))
1.4 +9 -5 XEmacs/packages/xemacs-packages/gnus/lisp/mm-extern.el
Index: mm-extern.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mm-extern.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- mm-extern.el 2004/09/28 02:21:14 1.3
+++ mm-extern.el 2005/11/15 03:45:54 1.4
@@ -1,6 +1,8 @@
;;; mm-extern.el --- showing message/external-body
-;; Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Shenghuo Zhu <zsh(a)cs.rochester.edu>
;; Keywords: message external-body
@@ -18,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -31,6 +33,8 @@
(require 'mm-decode)
(require 'mm-url)
+(defvar gnus-article-mime-handles)
+
(defvar mm-extern-function-alist
'((local-file . mm-extern-local-file)
(url . mm-extern-url)
@@ -52,7 +56,7 @@
(mm-disable-multibyte)
(if (file-exists-p name)
(mm-insert-file-contents name nil nil nil nil t)
- (error (format "File %s is gone" name)))))
+ (error "File %s is gone" name))))
(defun mm-extern-url (handle)
(erase-buffer)
@@ -124,7 +128,7 @@ If NO-DISPLAY is nil, display it. Otherw
handles)
(unless (mm-handle-cache handle)
(unless func
- (error (format "Access type (%s) is not supported" access-type)))
+ (error "Access type (%s) is not supported" access-type))
(with-temp-buffer
(mm-insert-part handle)
(goto-char (point-max))
1.4 +5 -3 XEmacs/packages/xemacs-packages/gnus/lisp/mm-partial.el
Index: mm-partial.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mm-partial.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- mm-partial.el 2004/09/28 02:21:14 1.3
+++ mm-partial.el 2005/11/15 03:45:54 1.4
@@ -1,6 +1,8 @@
;;; mm-partial.el --- showing message/partial
-;; Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Shenghuo Zhu <zsh(a)cs.rochester.edu>
;; Keywords: message partial
@@ -18,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.5 +10 -5 XEmacs/packages/xemacs-packages/gnus/lisp/mm-url.el
Index: mm-url.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mm-url.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- mm-url.el 2005/03/13 00:23:33 1.4
+++ mm-url.el 2005/11/15 03:45:54 1.5
@@ -1,6 +1,7 @@
;;; mm-url.el --- a wrapper of url functions/commands for Gnus
-;; Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Shenghuo Zhu <zsh(a)cs.rochester.edu>
;; This file is part of GNU Emacs.
@@ -17,8 +18,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -42,6 +43,10 @@
(require 'timer-funcs)
(require 'timer)))
+(defvar url-current-object)
+(defvar url-package-name)
+(defvar url-package-version)
+
(defgroup mm-url nil
"A wrapper of url package and external url command for Gnus."
:group 'gnus)
@@ -59,7 +64,7 @@
'((wget "wget" "--user-agent=mm-url" "-q"
"-O" "-")
(w3m "w3m" "-dump_source")
(lynx "lynx" "-source")
- (curl "curl")))
+ (curl "curl" "--silent" "--user-agent mm-url"
"--location")))
(defcustom mm-url-program
(cond
@@ -360,7 +365,7 @@ If FOLLOW-REFRESH is non-nil, redirect r
(defun mm-url-decode-entities ()
"Decode all HTML entities."
(goto-char (point-min))
- (while (re-search-forward "&\\(#[0-9]+\\|[a-z]+\\);" nil t)
+ (while (re-search-forward "&\\(#[0-9]+\\|[a-z]+[0-9]*\\);" nil t)
(let ((elem (if (eq (aref (match-string 1) 0) ?\#)
(let ((c
(string-to-number (substring
1.9 +113 -40 XEmacs/packages/xemacs-packages/gnus/lisp/mm-util.el
Index: mm-util.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mm-util.el,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -p -r1.8 -r1.9
--- mm-util.el 2005/03/20 03:20:18 1.8
+++ mm-util.el 2005/11/15 03:45:54 1.9
@@ -1,7 +1,8 @@
;;; mm-util.el --- Utility functions for Mule and low level things
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; MORIOKA Tomohiko <morioka(a)jaist.ac.jp>
;; This file is part of GNU Emacs.
@@ -18,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -57,9 +58,11 @@
mm-mime-mule-charset-alist)
nil t))))
(subst-char-in-string
- . (lambda (from to string) ;; stolen (and renamed) from nnheader.el
- "Replace characters in STRING from FROM to TO."
- (let ((string (substring string 0)) ;Copy string.
+ . (lambda (from to string &optional inplace)
+ ;; stolen (and renamed) from nnheader.el
+ "Replace characters in STRING from FROM to TO.
+ Unless optional argument INPLACE is non-nil, return a new string."
+ (let ((string (if inplace string (copy-sequence string)))
(len (length string))
(idx 0))
;; Replace all occurrences of FROM with TO.
@@ -70,7 +73,31 @@
string)))
(string-as-unibyte . identity)
(string-make-unibyte . identity)
+ ;; string-as-multibyte often doesn't really do what you think it does.
+ ;; Example:
+ ;; (aref (string-as-multibyte "\201") 0) -> 129 (aka ?\201)
+ ;; (aref (string-as-multibyte "\300") 0) -> 192 (aka ?\300)
+ ;; (aref (string-as-multibyte "\300\201") 0) -> 192 (aka ?\300)
+ ;; (aref (string-as-multibyte "\300\201") 1) -> 129 (aka ?\201)
+ ;; but
+ ;; (aref (string-as-multibyte "\201\300") 0) -> 2240
+ ;; (aref (string-as-multibyte "\201\300") 1) -> <error>
+ ;; Better use string-to-multibyte or encode-coding-string.
+ ;; If you really need string-as-multibyte somewhere it's usually
+ ;; because you're using the internal emacs-mule representation (maybe
+ ;; because you're using string-as-unibyte somewhere), which is
+ ;; generally a problem in itself.
+ ;; Here is an approximate equivalence table to help think about it:
+ ;; (string-as-multibyte s) ~= (decode-coding-string s 'emacs-mule)
+ ;; (string-to-multibyte s) ~= (decode-coding-string s 'binary)
+ ;; (string-make-multibyte s) ~= (decode-coding-string s locale-coding-system)
(string-as-multibyte . identity)
+ (string-to-multibyte
+ . (lambda (string)
+ "Return a multibyte string with the same individual chars as string."
+ (mapconcat
+ (lambda (ch) (mm-string-as-multibyte (char-to-string ch)))
+ string "")))
(multibyte-string-p . ignore)
;; It is not a MIME function, but some MIME functions use it.
(make-temp-file . (lambda (prefix &optional dir-flag)
@@ -86,6 +113,32 @@
(multibyte-char-to-unibyte . identity))))
(eval-and-compile
+ (cond
+ ((fboundp 'replace-in-string)
+ (defalias 'mm-replace-in-string 'replace-in-string))
+ ((fboundp 'replace-regexp-in-string)
+ (defun mm-replace-in-string (string regexp newtext &optional literal)
+ "Replace all matches for REGEXP with NEWTEXT in STRING.
+If LITERAL is non-nil, insert NEWTEXT literally. Return a new
+string containing the replacements.
+
+This is a compatibility function for different Emacsen."
+ (replace-regexp-in-string regexp newtext string nil literal)))
+ (t
+ (defun mm-replace-in-string (string regexp newtext &optional literal)
+ "Replace all matches for REGEXP with NEWTEXT in STRING.
+If LITERAL is non-nil, insert NEWTEXT literally. Return a new
+string containing the replacements.
+
+This is a compatibility function for different Emacsen."
+ (let ((start 0) tail)
+ (while (string-match regexp string start)
+ (setq tail (- (length string) (match-end 0)))
+ (setq string (replace-match newtext nil literal string))
+ (setq start (- (length string) tail))))
+ string))))
+
+(eval-and-compile
(defalias 'mm-char-or-char-int-p
(cond
((fboundp 'char-or-char-int-p) 'char-or-char-int-p)
@@ -127,7 +180,7 @@ In XEmacs, also return non-nil if CS is
If CS is available, return CS itself in Emacs, and return a coding
system object in XEmacs."
(if (fboundp 'find-coding-system)
- (find-coding-system cs)
+ (and cs (find-coding-system cs))
(if (fboundp 'coding-system-p)
(when (coding-system-p cs)
cs)
@@ -334,11 +387,7 @@ Valid elements include:
;; Japanese users prefer iso-2022-jp to euc-japan or
;; shift_jis, however iso-8859-1 should be used when
;; there are only ASCII text and Latin-1 characters.
- '(iso-8859-1 iso-2022-jp iso-2022-jp-2 shift_jis utf-8))
- ((find-coding-system 'utf-8)
- '(iso-8859-1 iso-8859-2 iso-8859-15 utf-8))
- (t
- '(iso-8859-1 iso-8859-2 iso-8859-15 iso-2022-jp)))))
+ '(iso-8859-1 iso-2022-jp iso-2022-jp-2 shift_jis utf-8)))))
"Preferred coding systems for encoding outgoing messages.
More than one suitable coding system may be found for some text.
@@ -519,14 +568,21 @@ If the charset is `composition', return
;; This is for XEmacs.
(mm-mule-charset-to-mime-charset charset)))
-(defun mm-delete-duplicates (list)
- "Simple substitute for CL `delete-duplicates', testing with
`equal'."
- (let (result head)
- (while list
- (setq head (car list))
- (setq list (delete head list))
- (setq result (cons head result)))
- (nreverse result)))
+(if (fboundp 'delete-dups)
+ (defalias 'mm-delete-duplicates 'delete-dups)
+ (defun mm-delete-duplicates (list)
+ "Destructively remove `equal' duplicates from LIST.
+Store the result in LIST and return it. LIST must be a proper list.
+Of several `equal' occurrences of an element in LIST, the first
+one is kept.
+
+This is a compatibility function for Emacsen without `delete-dups'."
+ ;; Code from `subr.el' in Emacs 22:
+ (let ((tail list))
+ (while tail
+ (setcdr tail (delete (car tail) (cdr tail)))
+ (setq tail (cdr tail))))
+ list))
;; Fixme: This is used in places when it should be testing the
;; default multibyteness. See mm-default-multibyte-p.
@@ -610,7 +666,7 @@ But this is very much a corner case, so
;; Load the Latin Unity library, if available.
(when (and (not (featurep 'latin-unity)) (locate-library
"latin-unity"))
- (require 'latin-unity))
+ (ignore-errors (require 'latin-unity)))
;; Now, can we use it?
(if (featurep 'latin-unity)
@@ -718,6 +774,17 @@ charset, and a longer list means no appr
(if (and (memq 'iso-2022-jp-2 charsets)
(memq 'iso-2022-jp-2 hack-charsets))
(setq charsets (delq 'iso-2022-jp charsets)))
+ ;; Attempt to reduce the number of charsets if utf-8 is available.
+ (if (and (featurep 'xemacs)
+ (> (length charsets) 1)
+ (mm-coding-system-p 'utf-8))
+ (let ((mm-coding-system-priorities
+ (cons 'utf-8 mm-coding-system-priorities)))
+ (setq charsets
+ (mm-delete-duplicates
+ (mapcar 'mm-mime-charset
+ (delq 'ascii
+ (mm-find-charset-region b e)))))))
charsets))
(defmacro mm-with-unibyte-buffer (&rest forms)
@@ -841,22 +908,28 @@ to advanced Emacs features, such as file
`find-file-hooks', etc.
If INHIBIT is non-nil, inhibit `mm-inhibit-file-name-handlers'.
This function ensures that none of these modifications will take place."
- (let ((format-alist nil)
- (auto-mode-alist (if inhibit nil (mm-auto-mode-alist)))
- (default-major-mode 'fundamental-mode)
- (enable-local-variables nil)
- (after-insert-file-functions nil)
- (enable-local-eval nil)
- (find-file-hooks nil)
- (inhibit-file-name-operation (if inhibit
- 'insert-file-contents
- inhibit-file-name-operation))
- (inhibit-file-name-handlers
- (if inhibit
- (append mm-inhibit-file-name-handlers
- inhibit-file-name-handlers)
- inhibit-file-name-handlers)))
- (insert-file-contents filename visit beg end replace)))
+ (let* ((format-alist nil)
+ (auto-mode-alist (if inhibit nil (mm-auto-mode-alist)))
+ (default-major-mode 'fundamental-mode)
+ (enable-local-variables nil)
+ (after-insert-file-functions nil)
+ (enable-local-eval nil)
+ (inhibit-file-name-operation (if inhibit
+ 'insert-file-contents
+ inhibit-file-name-operation))
+ (inhibit-file-name-handlers
+ (if inhibit
+ (append mm-inhibit-file-name-handlers
+ inhibit-file-name-handlers)
+ inhibit-file-name-handlers))
+ (ffh (if (boundp 'find-file-hook)
+ 'find-file-hook
+ 'find-file-hooks))
+ (val (symbol-value ffh)))
+ (set ffh nil)
+ (unwind-protect
+ (insert-file-contents filename visit beg end replace)
+ (set ffh val))))
(defun mm-append-to-file (start end filename &optional codesys inhibit)
"Append the contents of the region to the end of file FILENAME.
@@ -914,7 +987,7 @@ If INHIBIT is non-nil, inhibit `mm-inhib
(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))))
+ (detect-coding-region start end)))
(or (car-safe coding-systems)
coding-systems)))
(defun mm-detect-coding-region (start end)
@@ -938,5 +1011,5 @@ If INHIBIT is non-nil, inhibit `mm-inhib
(provide 'mm-util)
-;;; arch-tag: 94dc5388-825d-4fd1-bfa5-2100aa351238
+;; arch-tag: 94dc5388-825d-4fd1-bfa5-2100aa351238
;;; mm-util.el ends here
1.6 +30 -18 XEmacs/packages/xemacs-packages/gnus/lisp/mm-uu.el
Index: mm-uu.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mm-uu.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- mm-uu.el 2005/03/13 00:23:34 1.5
+++ mm-uu.el 2005/11/15 03:45:54 1.6
@@ -1,6 +1,8 @@
;;; mm-uu.el --- Return uu stuff as mm handles
-;; Copyright (c) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Shenghuo Zhu <zsh(a)cs.rochester.edu>
;; Keywords: postscript uudecode binhex shar forward gnatsweb pgp
@@ -18,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -75,11 +77,15 @@ decoder, such as hexbin."
"The default disposition of uu parts.
This can be either \"inline\" or \"attachment\".")
-(defvar mm-uu-emacs-sources-regexp "gnu\\.emacs\\.sources"
- "The regexp of Emacs sources groups.")
+(defcustom mm-uu-emacs-sources-regexp "\\.emacs\\.sources"
+ "The regexp of Emacs sources groups."
+ :version "22.1"
+ :type 'regexp
+ :group 'gnus-article-mime)
-(defcustom mm-uu-diff-groups-regexp "gnus\\.commits"
- "*Regexp matching diff groups."
+(defcustom mm-uu-diff-groups-regexp
+ "\\(gmane\\|gnu\\)\\..*\\(diff\\|commit\\|cvs\\|bug\\|devel\\)"
+ "Regexp matching diff groups."
:version "22.1"
:type 'regexp
:group 'gnus-article-mime)
@@ -111,8 +117,8 @@ This can be either \"inline\" or \"attac
"^exit 0$"
mm-uu-shar-extract)
(forward
-;;; Thanks to Edward J. Sabol <sabol(a)alderaan.gsfc.nasa.gov> and
-;;; Peter von der Ah\'e <pahe(a)daimi.au.dk>
+ ;; Thanks to Edward J. Sabol <sabol(a)alderaan.gsfc.nasa.gov> and
+ ;; Peter von der Ah\'e <pahe(a)daimi.au.dk>
"^-+ \\(Start of \\)?Forwarded message"
"^-+ End \\(of \\)?forwarded message"
mm-uu-forward-extract
@@ -151,7 +157,12 @@ This can be either \"inline\" or \"attac
nil
mm-uu-diff-extract
nil
- mm-uu-diff-test)))
+ mm-uu-diff-test))
+ "A list of specifications for non-MIME attachments.
+Each element consist of the following entries: label,
+start-regexp, end-regexp, extract-function, test-function.
+
+After modifying this list you must run \\[mm-uu-configure].")
(defcustom mm-uu-configure-list '((shar . disabled))
"A list of mm-uu configuration.
@@ -186,13 +197,12 @@ To disable dissecting shar codes, for in
(defun mm-uu-copy-to-buffer (&optional from to)
"Copy the contents of the current buffer to a fresh buffer.
Return that buffer."
- (save-excursion
- (let ((obuf (current-buffer))
- (coding-system
- ;; Might not exist in non-MULE XEmacs
- (when (boundp 'buffer-file-coding-system)
- buffer-file-coding-system)))
- (set-buffer (generate-new-buffer " *mm-uu*"))
+ (let ((obuf (current-buffer))
+ (coding-system
+ ;; Might not exist in non-MULE XEmacs
+ (when (boundp 'buffer-file-coding-system)
+ buffer-file-coding-system)))
+ (with-current-buffer (generate-new-buffer " *mm-uu*")
(setq buffer-file-coding-system coding-system)
(insert-buffer-substring obuf from to)
(current-buffer))))
@@ -201,6 +211,8 @@ Return that buffer."
(member (cons key val) mm-uu-configure-list))
(defun mm-uu-configure (&optional symbol value)
+ "Configure detection of non-MIME attachments."
+ (interactive)
(if symbol (set-default symbol value))
(setq mm-uu-beginning-regexp nil)
(mapcar (lambda (entry)
@@ -496,5 +508,5 @@ Return that buffer."
(provide 'mm-uu)
-;;; arch-tag: 7db076bf-53db-4320-aa19-ca76a1d2ab2c
+;; arch-tag: 7db076bf-53db-4320-aa19-ca76a1d2ab2c
;;; mm-uu.el ends here
1.6 +28 -16 XEmacs/packages/xemacs-packages/gnus/lisp/mm-view.el
Index: mm-view.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mm-view.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- mm-view.el 2005/03/13 00:23:34 1.5
+++ mm-view.el 2005/11/15 03:45:54 1.6
@@ -1,7 +1,8 @@
;;; mm-view.el --- functions for viewing MIME objects
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; This file is part of GNU Emacs.
@@ -17,8 +18,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -39,6 +40,14 @@
(unless (fboundp 'diff-mode)
(autoload 'diff-mode "diff-mode" "" t nil)))
+(defvar gnus-article-mime-handles)
+(defvar gnus-newsgroup-charset)
+(defvar smime-keys)
+(defvar w3m-cid-retrieve-function-alist)
+(defvar w3m-current-buffer)
+(defvar w3m-display-inline-images)
+(defvar w3m-minor-mode-map)
+
(defvar mm-text-html-renderer-alist
'((w3 . mm-inline-text-html-render-with-w3)
(w3m . mm-inline-text-html-render-with-w3m)
@@ -358,9 +367,9 @@
(goto-char (point-max))))
(save-restriction
(narrow-to-region b (point))
- (set-text-properties (point-min) (point-max) nil)
(when (or (equal type "enriched")
(equal type "richtext"))
+ (set-text-properties (point-min) (point-max) nil)
(ignore-errors
(enriched-decode (point-min) (point-max))))
(mm-handle-set-undisplayer
@@ -467,14 +476,16 @@
(buffer-disable-undo)
(mm-insert-part handle)
(require 'font-lock)
- ;; Inhibit font-lock this time (*-mode-hook might run
- ;; `turn-on-font-lock') so that jit-lock may not turn off
- ;; font-lock immediately after this.
- (let ((font-lock-mode t))
- (funcall mode))
- (let ((font-lock-verbose nil))
- ;; I find font-lock a bit too verbose.
- (font-lock-fontify-buffer))
+ (let ((font-lock-maximum-size nil)
+ ;; Disable support modes, e.g., jit-lock, lazy-lock, etc.
+ (font-lock-mode-hook nil)
+ (font-lock-support-mode nil)
+ ;; I find font-lock a bit too verbose.
+ (font-lock-verbose nil))
+ (funcall mode)
+ ;; The mode function might have already turned on font-lock.
+ (unless (symbol-value 'font-lock-mode)
+ (font-lock-fontify-buffer)))
;; By default, XEmacs font-lock uses non-duplicable text
;; properties. This code forces all the text properties
;; to be copied along with the text.
@@ -565,9 +576,10 @@
(cadar smime-keys)
(smime-get-key-by-email
(gnus-completing-read-maybe-default
- (concat "Decipher using which key? "
- (if smime-keys (concat "(default " (caar smime-keys) ") ")
- ""))
+ (concat "Decipher using key"
+ (if smime-keys
+ (concat " (default " (caar smime-keys) "): ")
+ ": "))
smime-keys nil nil nil nil (car-safe (car-safe smime-keys))))))
(goto-char (point-min))
(while (search-forward "\r\n" nil t)
1.5 +5 -3 XEmacs/packages/xemacs-packages/gnus/lisp/mml-sec.el
Index: mml-sec.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mml-sec.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- mml-sec.el 2005/03/13 00:23:34 1.4
+++ mml-sec.el 2005/11/15 03:45:54 1.5
@@ -1,6 +1,8 @@
;;; mml-sec.el --- A package with security functions for MML documents
-;; Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Simon Josefsson <simon(a)josefsson.org>
;; This file is part of GNU Emacs.
@@ -17,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.7 +14 -6 XEmacs/packages/xemacs-packages/gnus/lisp/mml-smime.el
Index: mml-smime.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mml-smime.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- mml-smime.el 2005/03/13 00:23:34 1.6
+++ mml-smime.el 2005/11/15 03:45:54 1.7
@@ -1,6 +1,8 @@
;;; mml-smime.el --- S/MIME support for MML
-;; Copyright (c) 2000, 2001, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Simon Josefsson <simon(a)josefsson.org>
;; Keywords: Gnus, MIME, S/MIME, MML
@@ -18,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -52,7 +54,7 @@
(if (not (and (not (file-exists-p tmp))
(get-buffer tmp)))
(push tmp certfiles)
- (setq file (mm-make-temp-file (expand-file-name "mml."
+ (setq file (mm-make-temp-file (expand-file-name "mml."
mm-tmp-directory)))
(with-current-buffer tmp
(write-region (point-min) (point-max) file))
@@ -77,7 +79,10 @@
(list 'keyfile
(if (= (length smime-keys) 1)
(cadar smime-keys)
- (or (let ((from (cadr (funcall gnus-extract-address-components
+ (or (let ((from (cadr (funcall (if (boundp
+ 'gnus-extract-address-components)
+ gnus-extract-address-components
+ 'mail-extract-address-components)
(or (save-excursion
(save-restriction
(message-narrow-to-headers)
@@ -103,7 +108,10 @@
(while (not result)
(setq who (read-from-minibuffer
(format "%sLookup certificate for: " (or bad ""))
- (cadr (funcall gnus-extract-address-components
+ (cadr (funcall (if (boundp
+ 'gnus-extract-address-components)
+ gnus-extract-address-components
+ 'mail-extract-address-components)
(or (save-excursion
(save-restriction
(message-narrow-to-headers)
1.6 +63 -28 XEmacs/packages/xemacs-packages/gnus/lisp/mml.el
Index: mml.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mml.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- mml.el 2005/03/13 00:23:34 1.5
+++ mml.el 2005/11/15 03:45:54 1.6
@@ -1,7 +1,8 @@
;;; mml.el --- A package for parsing and validating MML documents
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; This file is part of GNU Emacs.
@@ -17,8 +18,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -40,6 +41,16 @@
(autoload 'fill-flowed-encode "flow-fill")
(autoload 'message-posting-charset "message"))
+(defvar gnus-article-mime-handles)
+(defvar gnus-mouse-2)
+(defvar gnus-newsrc-hashtb)
+(defvar message-default-charset)
+(defvar message-deletable-headers)
+(defvar message-options)
+(defvar message-posting-charset)
+(defvar message-required-mail-headers)
+(defvar message-required-news-headers)
+
(defcustom mml-content-type-parameters
'(name access-type expiration size permission format)
"*A list of acceptable parameters in MML tag.
@@ -123,7 +134,13 @@ unknown encoding; `use-ascii': always us
with unknown encoding; `multipart': always send messages with more than
one charsets.")
-(defvar mml-generate-default-type "text/plain")
+(defvar mml-generate-default-type "text/plain"
+ "Content type by which the Content-Type header can be omitted.
+The Content-Type header will not be put in the MIME part if the type
+equals the value and there's no parameter (e.g. charset, format, etc.)
+and `mml-insert-mime-headers-always' is nil. The value will be bound
+to \"message/rfc822\" when encoding an article to be forwarded as a MIME
+part. This is for the internal use, you should never modify the value.")
(defvar mml-buffer-list nil)
@@ -400,9 +417,14 @@ If MML is non-nil, return the buffer up
(mml-tweak-part cont)
(cond
((or (eq (car cont) 'part) (eq (car cont) 'mml))
- (let ((raw (cdr (assq 'raw cont)))
- coded encoding charset filename type flowed)
- (setq type (or (cdr (assq 'type cont)) "text/plain"))
+ (let* ((raw (cdr (assq 'raw cont)))
+ (filename (cdr (assq 'filename cont)))
+ (type (or (cdr (assq 'type cont))
+ (if filename
+ (or (mm-default-file-encoding filename)
+ "application/octet-stream")
+ "text/plain")))
+ coded encoding charset flowed)
(if (and (not raw)
(member (car (split-string type "/")) '("text"
"message")))
(progn
@@ -414,7 +436,7 @@ If MML is non-nil, return the buffer up
(cond
((cdr (assq 'buffer cont))
(insert-buffer-substring (cdr (assq 'buffer cont))))
- ((and (setq filename (cdr (assq 'filename cont)))
+ ((and filename
(not (equal (cdr (assq 'nofile cont)) "yes")))
(let ((coding-system-for-read charset))
(mm-insert-file-contents filename)))
@@ -434,6 +456,10 @@ If MML is non-nil, return the buffer up
(cond
((eq (car cont) 'mml)
(let ((mml-boundary (mml-compute-boundary cont))
+ ;; It is necessary for the case where this
+ ;; function is called recursively since
+ ;; `m-g-d-t' will be bound to "message/rfc822"
+ ;; when encoding an article to be forwarded.
(mml-generate-default-type "text/plain"))
(mml-to-mime))
(let ((mm-7bit-chars (concat mm-7bit-chars "\x1b")))
@@ -475,7 +501,7 @@ If MML is non-nil, return the buffer up
(insert (with-current-buffer (cdr (assq 'buffer cont))
(mm-with-unibyte-current-buffer
(buffer-string)))))
- ((and (setq filename (cdr (assq 'filename cont)))
+ ((and filename
(not (equal (cdr (assq 'nofile cont)) "yes")))
(let ((coding-system-for-read mm-binary-coding-system))
(mm-insert-file-contents filename nil nil nil nil t)))
@@ -516,15 +542,21 @@ If MML is non-nil, return the buffer up
"access-type=url"))
(when parameters
(mml-insert-parameter-string
- cont '(expiration size permission))))
- (insert "\n\n")
- (insert "Content-Type: " (cdr (assq 'type cont)) "\n")
- (insert "Content-ID: " (message-make-message-id) "\n")
- (insert "Content-Transfer-Encoding: "
- (or (cdr (assq 'encoding cont)) "binary"))
- (insert "\n\n")
- (insert (or (cdr (assq 'contents cont))))
- (insert "\n"))
+ cont '(expiration size permission)))
+ (insert "\n\n")
+ (insert "Content-Type: "
+ (or (cdr (assq 'type cont))
+ (if name
+ (or (mm-default-file-encoding name)
+ "application/octet-stream")
+ "text/plain"))
+ "\n")
+ (insert "Content-ID: " (message-make-message-id) "\n")
+ (insert "Content-Transfer-Encoding: "
+ (or (cdr (assq 'encoding cont)) "binary"))
+ (insert "\n\n")
+ (insert (or (cdr (assq 'contents cont))))
+ (insert "\n")))
((eq (car cont) 'multipart)
(let* ((type (or (cdr (assq 'type cont)) "mixed"))
(mml-generate-default-type (if (equal type "digest")
@@ -560,7 +592,8 @@ If MML is non-nil, return the buffer up
(message-options-set 'message-sender sender))
(if (setq recipients (cdr (assq 'recipients cont)))
(message-options-set 'message-recipients recipients))
- (let ((style (mml-signencrypt-style (first (or sign-item encrypt-item)))))
+ (let ((style (mml-signencrypt-style
+ (first (or sign-item encrypt-item)))))
;; check if: we're both signing & encrypting, both methods
;; are the same (why would they be different?!), and that
;; the signencrypt style allows for combined operation.
@@ -943,13 +976,15 @@ See Info node `(emacs-mime)Composing'.
description))
(defun mml-minibuffer-read-disposition (type &optional default)
- (let* ((default (or default
- (if (string-match "^text/.*" type)
- "inline"
- "attachment")))
- (disposition (completing-read "Disposition: "
- '(("attachment") ("inline") (""))
- nil t)))
+ (unless default (setq default
+ (if (and (string-match "\\`text/" type)
+ (not (string-match "\\`text/rtf\\'"
type)))
+ "inline"
+ "attachment")))
+ (let ((disposition (completing-read
+ (format "Disposition (default %s): " default)
+ '(("attachment") ("inline")
(""))
+ nil t nil nil default)))
(if (not (equal disposition ""))
disposition
default)))
@@ -1067,7 +1102,7 @@ Should be adopted if code in `message-se
(defun mml-preview (&optional raw)
"Display current buffer with Gnus, in a new buffer.
-If RAW, don't highlight the article."
+If RAW, display a raw encoded MIME message."
(interactive "P")
(save-excursion
(let* ((buf (current-buffer))
1.5 +13 -7 XEmacs/packages/xemacs-packages/gnus/lisp/mml1991.el
Index: mml1991.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mml1991.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- mml1991.el 2004/09/28 02:21:15 1.4
+++ mml1991.el 2005/11/15 03:45:55 1.5
@@ -1,6 +1,8 @@
;;; mml1991.el --- Old PGP message format (RFC 1991) support for MML
-;; Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Sascha Lüdecke <sascha(a)meta-x.de>,
;; Simon Josefsson <simon(a)josefsson.org> (Mailcrypt interface, Gnus glue)
;; Keywords PGP
@@ -19,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -30,6 +32,8 @@
(require 'cl)
(require 'mm-util))
+(defvar mc-pgp-always-sign)
+
(autoload 'quoted-printable-decode-region "qp")
(autoload 'quoted-printable-encode-region "qp")
@@ -180,7 +184,7 @@
(delete-region (point-min) (point)))
(mm-with-unibyte-current-buffer
(with-temp-buffer
- (flet ((gpg-encrypt-func
+ (flet ((gpg-encrypt-func
(sign plaintext ciphertext result recipients &optional
passphrase sign-with-key armor textmode)
(if sign
@@ -219,8 +223,10 @@
;; pgg wrapper
-(defvar pgg-output-buffer)
-(defvar pgg-errors-buffer)
+(eval-when-compile
+ (defvar pgg-default-user-id)
+ (defvar pgg-errors-buffer)
+ (defvar pgg-output-buffer))
(defun mml1991-pgg-sign (cont)
(let (headers cte)
@@ -266,7 +272,7 @@
(delete-region (point-min) (point)))
(mm-decode-content-transfer-encoding cte)
(unless (pgg-encrypt-region
- (point-min) (point-max)
+ (point-min) (point-max)
(split-string
(or
(message-options-get 'message-recipients)
1.6 +21 -7 XEmacs/packages/xemacs-packages/gnus/lisp/mml2015.el
Index: mml2015.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/mml2015.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- mml2015.el 2005/03/13 00:23:35 1.5
+++ mml2015.el 2005/11/15 03:45:55 1.6
@@ -1,6 +1,8 @@
;;; mml2015.el --- MIME Security with Pretty Good Privacy (PGP)
-;; Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Shenghuo Zhu <zsh(a)cs.rochester.edu>
;; Keywords: PGP MIME MML
@@ -18,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -33,6 +35,8 @@
(require 'mm-util)
(require 'mml)
+(defvar mc-pgp-always-sign)
+
(defvar mml2015-use (or
(progn
(ignore-errors
@@ -632,6 +636,7 @@
;;; pgg wrapper
(eval-when-compile
+ (defvar pgg-default-user-id)
(defvar pgg-errors-buffer)
(defvar pgg-output-buffer))
@@ -639,7 +644,8 @@
(autoload 'pgg-decrypt-region "pgg")
(autoload 'pgg-verify-region "pgg")
(autoload 'pgg-sign-region "pgg")
- (autoload 'pgg-encrypt-region "pgg"))
+ (autoload 'pgg-encrypt-region "pgg")
+ (autoload 'pgg-parse-armor "pgg-parse"))
(defun mml2015-pgg-decrypt (handle ctl)
(catch 'error
@@ -807,15 +813,23 @@
(let ((pgg-errors-buffer mml2015-result-buffer)
(boundary (mml-compute-boundary cont))
(pgg-default-user-id (or (message-options-get 'mml-sender)
- pgg-default-user-id)))
+ pgg-default-user-id))
+ entry)
(unless (pgg-sign-region (point-min) (point-max))
(pop-to-buffer mml2015-result-buffer)
(error "Sign error"))
(goto-char (point-min))
(insert (format "Content-Type: multipart/signed;
boundary=\"%s\";\n"
boundary))
- ;;; FIXME: what is the micalg?
- (insert "\tmicalg=pgp-sha1;
protocol=\"application/pgp-signature\"\n")
+ (if (setq entry (assq 2 (pgg-parse-armor
+ (with-current-buffer pgg-output-buffer
+ (buffer-string)))))
+ (setq entry (assq 'hash-algorithm (cdr entry))))
+ (insert (format "\tmicalg=%s; "
+ (if (cdr entry)
+ (downcase (format "pgp-%s" (cdr entry)))
+ "pgp-sha1")))
+ (insert "protocol=\"application/pgp-signature\"\n")
(insert (format "\n--%s\n" boundary))
(goto-char (point-max))
(insert (format "\n--%s\n" boundary))
1.5 +4 -4 XEmacs/packages/xemacs-packages/gnus/lisp/nnagent.el
Index: nnagent.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnagent.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- nnagent.el 2005/03/13 00:23:35 1.4
+++ nnagent.el 2005/11/15 03:45:55 1.5
@@ -1,7 +1,7 @@
;;; nnagent.el --- offline backend for Gnus
-;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news, mail
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.5 +5 -5 XEmacs/packages/xemacs-packages/gnus/lisp/nnbabyl.el
Index: nnbabyl.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnbabyl.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- nnbabyl.el 2004/09/28 02:21:15 1.4
+++ nnbabyl.el 2005/11/15 03:45:55 1.5
@@ -1,7 +1,7 @@
;;; nnbabyl.el --- rmail mbox access for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1099, 2000, 2001
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1099, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Masanobu UMEDA <umerin(a)flab.flab.fujitsu.junet>
@@ -21,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -493,7 +493,7 @@
(when (re-search-forward "^X-Gnus-Newsgroup: +\\([^:]+\\):\\([0-9]+\\) "
nil t)
(cons (buffer-substring (match-beginning 1) (match-end 1))
- (string-to-int
+ (string-to-number
(buffer-substring (match-beginning 2) (match-end 2)))))))
(defun nnbabyl-insert-lines ()
1.4 +8 -13 XEmacs/packages/xemacs-packages/gnus/lisp/nndb.el
Index: nndb.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nndb.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- nndb.el 2004/09/28 02:21:15 1.3
+++ nndb.el 2005/11/15 03:45:55 1.4
@@ -1,6 +1,7 @@
;;; nndb.el --- nndb access for Gnus
-;; Copyright (C) 1997, 1998, 2000, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1998, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin(a)flab.flab.fujitsu.junet>
;; Kai Grossjohann <grossjohann(a)ls6.informatik.uni-dortmund.de>
@@ -22,8 +23,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -50,7 +51,9 @@
;;-
;; Register nndb with known select methods.
-(gnus-declare-backend "nndb" 'mail 'respool 'address
'prompt-address)
+(require 'gnus-start)
+(unless (assoc "nndb" gnus-valid-select-methods)
+ (gnus-declare-backend "nndb" 'mail 'respool 'address
'prompt-address))
;;; Code:
@@ -59,14 +62,6 @@
(require 'nntp)
(eval-when-compile (require 'cl))
-(eval-and-compile
- (autoload 'news-setup "rnewspost")
- (autoload 'news-reply-mode "rnewspost")
- (autoload 'cancel-timer "timer")
- (autoload 'telnet "telnet" nil t)
- (autoload 'telnet-send-input "telnet" nil t)
- (autoload 'gnus-declare-backend "gnus-start"))
-
;; Declare nndb as derived from nntp
(nnoo-declare nndb nntp)
@@ -201,7 +196,7 @@ article was posted to nndb")
;; otherwise, pull all of the following numbers into the list
(re-search-forward "follows\r?\n?" nil t)
(while (re-search-forward "^[0-9]+$" nil t)
- (push (string-to-int (match-string 0)) list)))
+ (push (string-to-number (match-string 0)) list)))
list))
(defun nndb-request-expire-articles-remote
1.5 +12 -11 XEmacs/packages/xemacs-packages/gnus/lisp/nndiary.el
Index: nndiary.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nndiary.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- nndiary.el 2005/03/13 00:23:35 1.4
+++ nndiary.el 2005/11/15 03:45:55 1.5
@@ -1,7 +1,7 @@
;;; nndiary.el --- A diary backend for Gnus
-;; Copyright (C) 1999, 2000, 2001, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Didier Verna <didier(a)xemacs.org>
;; Maintainer: Didier Verna <didier(a)xemacs.org>
@@ -22,7 +22,8 @@
;; You should have received a copy of the GNU General Public License
;; along with this program; if not, write to the Free Software
-;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+;; MA 02110-1301, USA.
;;; Commentary:
@@ -601,7 +602,7 @@ all. This may very well take some time.
(nnheader-report 'nndiary "Article %s retrieved" id)
;; We return the article number.
(cons (if group-num (car group-num) group)
- (string-to-int (file-name-nondirectory path)))))))
+ (string-to-number (file-name-nondirectory path)))))))
(deffoo nndiary-request-group (group &optional server dont-check)
(let ((file-name-coding-system nnmail-pathname-coding-system))
@@ -820,7 +821,7 @@ all. This may very well take some time.
;; we should insert it. (This situation should never
;; occur, but one likes to make sure...)
(while (and (looking-at "[0-9]+\t")
- (< (string-to-int
+ (< (string-to-number
(buffer-substring
(match-beginning 0) (match-end 0)))
article)
@@ -1281,14 +1282,14 @@ all. This may very well take some time.
(nnheader-article-to-file-alist nndiary-current-directory))))
-(defun nndiary-string-to-int (str min &optional max)
- ;; Like `string-to-int' but barf if STR is not exactly an integer, and not
+(defun nndiary-string-to-number (str min &optional max)
+ ;; Like `string-to-number' but barf if STR is not exactly an integer, and not
;; within the specified bounds.
;; Signals are caught by `nndiary-schedule'.
(if (not (string-match "^[ \t]*[0-9]+[ \t]*$" str))
(nndiary-error "not an integer value")
;; else
- (let ((val (string-to-int str)))
+ (let ((val (string-to-number str)))
(and (or (< val min)
(and max (> val max)))
(nndiary-error "value out of range"))
@@ -1315,12 +1316,12 @@ all. This may very well take some time.
(let ((res (split-string val "-")))
(cond
((= (length res) 1)
- (nndiary-string-to-int (car res) min-or-values max))
+ (nndiary-string-to-number (car res) min-or-values max))
((= (length res) 2)
;; don't know if crontab accepts this, but ensure
;; that BEG is <= END
- (let ((beg (nndiary-string-to-int (car res) min-or-values max))
- (end (nndiary-string-to-int (cadr res) min-or-values max)))
+ (let ((beg (nndiary-string-to-number (car res) min-or-values max))
+ (end (nndiary-string-to-number (cadr res) min-or-values max)))
(cond ((< beg end)
(cons beg end))
((= beg end)
1.3 +4 -4 XEmacs/packages/xemacs-packages/gnus/lisp/nndir.el
Index: nndir.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nndir.el,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- nndir.el 2004/09/28 02:21:16 1.2
+++ nndir.el 2005/11/15 03:45:55 1.3
@@ -1,7 +1,7 @@
;;; nndir.el --- single directory newsgroup access for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.6 +7 -6 XEmacs/packages/xemacs-packages/gnus/lisp/nndoc.el
Index: nndoc.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nndoc.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- nndoc.el 2004/09/28 02:21:16 1.5
+++ nndoc.el 2005/11/15 03:45:55 1.6
@@ -1,7 +1,8 @@
;;; nndoc.el --- single file access for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Masanobu UMEDA <umerin(a)flab.flab.fujitsu.junet>
;; Keywords: news
@@ -20,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -421,7 +422,7 @@ from the document.")
(search-forward "\n\n" beg t)
(re-search-backward
"^Content-Length:[ \t]*\\([0-9]+\\) *$" end t)
- (setq len (string-to-int (match-string 1)))
+ (setq len (string-to-number (match-string 1)))
(search-forward "\n\n" beg t)
(unless (= (setq len (+ (point) len)) (point-max))
(and (< len (point-max))
@@ -444,7 +445,7 @@ from the document.")
(defun nndoc-rnews-body-end ()
(and (re-search-backward nndoc-article-begin nil t)
(forward-line 1)
- (goto-char (+ (point) (string-to-int (match-string 1))))))
+ (goto-char (+ (point) (string-to-number (match-string 1))))))
(defun nndoc-babyl-type-p ()
(when (re-search-forward "\^_\^L *\n" nil t)
1.5 +11 -8 XEmacs/packages/xemacs-packages/gnus/lisp/nndraft.el
Index: nndraft.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nndraft.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- nndraft.el 2004/09/28 02:21:16 1.4
+++ nndraft.el 2005/11/15 03:45:56 1.5
@@ -1,7 +1,7 @@
;;; nndraft.el --- draft article access for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -174,8 +174,11 @@
(setq buffer-file-name (expand-file-name file)
buffer-auto-save-file-name (make-auto-save-file-name))
(clear-visited-file-modtime)
- (make-local-variable 'write-contents-hooks)
- (push 'nndraft-generate-headers write-contents-hooks)
+ (let ((hook (if (boundp 'write-contents-functions)
+ 'write-contents-functions
+ 'write-contents-hooks)))
+ (gnus-make-local-hook hook)
+ (add-hook hook 'nndraft-generate-headers nil t))
article))
(deffoo nndraft-request-group (group &optional server dont-check)
@@ -185,7 +188,7 @@
(file-name-coding-system nnmail-pathname-coding-system)
dir file)
(nnheader-re-read-dir pathname)
- (setq dir (mapcar (lambda (name) (string-to-int (substring name 1)))
+ (setq dir (mapcar (lambda (name) (string-to-number (substring name 1)))
(ignore-errors (directory-files
pathname nil "^#[0-9]+#$" t))))
(dolist (n dir)
@@ -293,7 +296,7 @@
"Return the list of messages in the group."
(gnus-make-directory nndraft-current-directory)
(sort
- (mapcar 'string-to-int
+ (mapcar 'string-to-number
(directory-files nndraft-current-directory nil "\\`[0-9]+\\'" t))
'<))
1.4 +7 -6 XEmacs/packages/xemacs-packages/gnus/lisp/nneething.el
Index: nneething.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nneething.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- nneething.el 2004/09/28 02:21:16 1.3
+++ nneething.el 2005/11/15 03:45:56 1.4
@@ -1,7 +1,7 @@
;;; nneething.el --- arbitrary file access for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Masanobu UMEDA <umerin(a)flab.flab.fujitsu.junet>
@@ -21,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -37,7 +37,8 @@
(nnoo-declare nneething)
-(defvoo nneething-map-file-directory "~/.nneething/"
+(defvoo nneething-map-file-directory
+ (nnheader-concat gnus-directory ".nneething/")
"Where nneething stores the map files.")
(defvoo nneething-map-file ".nneething"
@@ -328,7 +329,7 @@ included.")
(when (re-search-forward "<[a-zA-Z0-9_]@[-a-zA-Z0-9_]>" 1000 t)
(concat "From: " (match-string 0) "\n"))))
(nneething-from-line (nth 2 atts) file))
- (if (> (string-to-int (int-to-string (nth 7 atts))) 0)
+ (if (> (string-to-number (int-to-string (nth 7 atts))) 0)
(concat "Chars: " (int-to-string (nth 7 atts)) "\n")
"")
(if buffer
1.6 +9 -8 XEmacs/packages/xemacs-packages/gnus/lisp/nnfolder.el
Index: nnfolder.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnfolder.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- nnfolder.el 2005/03/13 00:23:35 1.5
+++ nnfolder.el 2005/11/15 03:45:56 1.6
@@ -1,7 +1,8 @@
;;; nnfolder.el --- mail folder access for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Simon Josefsson <simon(a)josefsson.org> (adding MARKS)
;; ShengHuo Zhu <zsh(a)cs.rochester.edu> (adding NOV)
;; Scott Byer <byer(a)mv.us.adobe.com>
@@ -23,8 +24,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -200,7 +201,7 @@ the group. Then the marks file will be
((search-backward (concat "\n" nnfolder-article-marker)
nil t)
(goto-char (match-end 0))
- (setq num (string-to-int
+ (setq num (string-to-number
(buffer-substring
(point) (gnus-point-at-eol))))
(goto-char start)
@@ -210,7 +211,7 @@ the group. Then the marks file will be
(search-forward (concat "\n" nnfolder-article-marker)
nil t)
(progn
- (setq num (string-to-int
+ (setq num (string-to-number
(buffer-substring
(point) (gnus-point-at-eol))))
(> num article))
@@ -285,7 +286,7 @@ the group. Then the marks file will be
(cons nnfolder-current-group
(if (search-forward (concat "\n" nnfolder-article-marker)
nil t)
- (string-to-int (buffer-substring
+ (string-to-number (buffer-substring
(point) (gnus-point-at-eol)))
-1))))))))
@@ -875,6 +876,7 @@ deleted. Point is left where the delete
nnfolder-file-coding-system))
(nnheader-find-file-noselect file t)))))
(mm-enable-multibyte) ;; Use multibyte buffer for future copying.
+ (buffer-disable-undo)
(if (equal (cadr (assoc group nnfolder-scantime-alist))
(nth 5 (file-attributes file)))
;; This looks up-to-date, so we don't do any scanning.
@@ -901,7 +903,6 @@ deleted. Point is left where the delete
maxid start end newscantime
novbuf articles newnum
buffer-read-only)
- (buffer-disable-undo)
(setq maxid (cdr active))
(unless (or gnus-nov-is-evil nnfolder-nov-is-evil
1.4 +4 -4 XEmacs/packages/xemacs-packages/gnus/lisp/nngateway.el
Index: nngateway.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nngateway.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- nngateway.el 2004/09/28 02:21:16 1.3
+++ nngateway.el 2005/11/15 03:45:56 1.4
@@ -1,7 +1,7 @@
;;; nngateway.el --- posting news via mail gateways
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news, mail
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.7 +24 -16 XEmacs/packages/xemacs-packages/gnus/lisp/nnheader.el
Index: nnheader.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnheader.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- nnheader.el 2005/03/13 00:23:35 1.6
+++ nnheader.el 2005/11/15 03:45:56 1.7
@@ -1,8 +1,8 @@
;;; nnheader.el --- header access macros for Gnus and its backends
-;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996,
-;; 1997, 1998, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994,
+;; 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin(a)flab.flab.fujitsu.junet>
;; Lars Magne Ingebrigtsen <larsi(a)gnus.org>
@@ -22,8 +22,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -31,6 +31,8 @@
(eval-when-compile (require 'cl))
+(defvar nnmail-extra-headers)
+
;; Requiring `gnus-util' at compile time creates a circular
;; dependency between nnheader.el and gnus-util.el.
;;(eval-when-compile (require 'gnus-util))
@@ -683,9 +685,9 @@ the line could be found."
(defsubst nnheader-file-to-number (file)
"Take a FILE name and return the article number."
(if (string= nnheader-numerical-short-files "^[0-9]+$")
- (string-to-int file)
+ (string-to-number file)
(string-match nnheader-numerical-short-files file)
- (string-to-int (match-string 0 file))))
+ (string-to-number (match-string 0 file))))
(defvar nnheader-directory-files-is-safe
(or (eq system-type 'windows-nt)
@@ -953,15 +955,21 @@ find-file-hooks, etc.
(defun nnheader-find-file-noselect (&rest args)
"Open a file with some variables bound.
See `find-file-noselect' for the arguments."
- (let ((format-alist nil)
- (auto-mode-alist (mm-auto-mode-alist))
- (default-major-mode 'fundamental-mode)
- (enable-local-variables nil)
- (after-insert-file-functions nil)
- (enable-local-eval nil)
- (find-file-hooks nil)
- (coding-system-for-read nnheader-file-coding-system))
- (apply 'find-file-noselect args)))
+ (let* ((format-alist nil)
+ (auto-mode-alist (mm-auto-mode-alist))
+ (default-major-mode 'fundamental-mode)
+ (enable-local-variables nil)
+ (after-insert-file-functions nil)
+ (enable-local-eval nil)
+ (coding-system-for-read nnheader-file-coding-system)
+ (ffh (if (boundp 'find-file-hook)
+ 'find-file-hook
+ 'find-file-hooks))
+ (val (symbol-value ffh)))
+ (set ffh nil)
+ (unwind-protect
+ (apply 'find-file-noselect args)
+ (set ffh val))))
(defun nnheader-directory-regular-files (dir)
"Return a list of all regular files in DIR."
1.5 +2 -2 XEmacs/packages/xemacs-packages/gnus/lisp/nnheaderxm.el
Index: nnheaderxm.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnheaderxm.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- nnheaderxm.el 2004/09/28 02:21:16 1.4
+++ nnheaderxm.el 2005/11/15 03:45:56 1.5
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.6 +31 -6 XEmacs/packages/xemacs-packages/gnus/lisp/nnimap.el
Index: nnimap.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnimap.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- nnimap.el 2005/03/13 00:23:35 1.5
+++ nnimap.el 2005/11/15 03:45:56 1.6
@@ -1,7 +1,8 @@
;;; nnimap.el --- imap backend for Gnus
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Simon Josefsson <jas(a)pdc.kth.se>
;; Jim Radford <radford(a)robby.caltech.edu>
;; Keywords: mail
@@ -20,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -205,7 +206,7 @@ RFC2060 section 6.4.4."
"Whether to download entire articles during splitting.
This is generally not required, and will slow things down considerably.
You may need it if you want to use an advanced splitting function that
-analyses the body before splitting the article.
+analyzes the body before splitting the article.
If this variable is nil, bodies will not be downloaded; if this
variable is the symbol `default' the default behaviour is
used (which currently is nil, unless you use a statistical
@@ -316,6 +317,11 @@ every message in the group, thus making
Unlike other backends, you do not need to take special care if you
flip this variable.")
+(defvoo nnimap-search-uids-not-since-is-evil nil
+ "If non-nil, avoid \"UID SEARCH UID ... NOT SINCE\" queries when
expiring.
+Instead, use \"UID SEARCH SINCE\" to prune the list of expirable
+articles within Gnus. This seems to be faster on Courier in some cases.")
+
(defvoo nnimap-expunge-on-close 'always ; 'ask, 'never
"Whether to expunge a group when it is closed.
When a IMAP group with articles marked for deletion is closed, this
@@ -728,7 +734,9 @@ If EXAMINE is non-nil the group is selec
(imap-capability 'IMAP4rev1 nnimap-server-buffer))
(imap-close nnimap-server-buffer)
(nnheader-report 'nnimap "Server %s is not IMAP4 compliant"
server))
- (let* ((list (gnus-parse-netrc nnimap-authinfo-file))
+ (let* ((list (progn (gnus-message 7 "Parsing authinfo file `%s'."
+ nnimap-authinfo-file)
+ (gnus-parse-netrc nnimap-authinfo-file)))
(port (if nnimap-server-port
(int-to-string nnimap-server-port)
"imap"))
@@ -1384,8 +1392,10 @@ function is generally only called when G
(list (- ms 1) (+ (expt 2 16) ls))
(list ms ls))))
+(eval-when-compile (require 'parse-time))
(defun nnimap-date-days-ago (daysago)
"Return date, in format \"3-Aug-1998\", for DAYSAGO days ago."
+ (require 'parse-time)
(let* ((time (nnimap-time-substract (current-time) (days-to-time daysago)))
(date (format-time-string
(format "%%d-%s-%%Y"
@@ -1431,6 +1441,21 @@ function is generally only called when G
(when (imap-message-flags-add
(imap-range-to-message-set
(gnus-compress-sequence oldarts)) "\\Deleted")
+ (setq articles (gnus-set-difference
+ articles oldarts))))))
+ ((and nnimap-search-uids-not-since-is-evil (numberp days))
+ (let* ((all-new-articles
+ (gnus-compress-sequence
+ (imap-search (format "SINCE %s"
+ (nnimap-date-days-ago days)))))
+ (oldartseq
+ (gnus-range-difference artseq all-new-articles))
+ (oldarts (gnus-uncompress-range oldartseq)))
+ (when oldarts
+ (nnimap-expiry-target oldarts group server)
+ (when (imap-message-flags-add
+ (imap-range-to-message-set oldartseq)
+ "\\Deleted")
(setq articles (gnus-set-difference
articles oldarts))))))
((numberp days)
1.2 +17 -17 XEmacs/packages/xemacs-packages/gnus/lisp/nnir.el
Index: nnir.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnir.el,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- nnir.el 2004/09/28 02:21:17 1.1
+++ nnir.el 2005/11/15 03:45:56 1.2
@@ -18,8 +18,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -376,7 +376,8 @@ Add an entry here when adding a new sear
;;; User Customizable Variables:
(defgroup nnir nil
- "Search nnmh and nnml groups in Gnus with Glimpse, freeWAIS-sf, or EWS.")
+ "Search nnmh and nnml groups in Gnus with Glimpse, freeWAIS-sf, or EWS."
+ :group 'gnus)
;; Mail backend.
@@ -689,7 +690,17 @@ that it is for Namazu, not Glimpse."
'gnus-group-make-nnir-group))
(add-hook 'gnus-group-mode-hook 'nnir-group-mode-hook)
-
+(defmacro nnir-group-server (group)
+ "Return the server for a foreign newsgroup GROUP.
+The returned format is as `gnus-server-to-method' needs it. See
+`gnus-group-real-prefix' and `gnus-group-real-name'."
+ `(let ((gname ,group))
+ (if (string-match "^\\([^:]+\\):" gname)
+ (setq gname (match-string 1 gname))
+ nil)
+ (if (string-match "^\\([^+]+\\)\\+\\(.+\\)$" gname)
+ (format "%s:%s" (match-string 1 gname) (match-string 2 gname))
+ (concat gname ":"))))
;; Summary mode commands.
@@ -862,7 +873,7 @@ pairs (also vectors, actually)."
(let ((artlist nil)
(groupspec (cdr (assq 'group query)))
(qstring (cdr (assq 'query query)))
- (prefix (nnir-read-server-parm 'nnir-glimps-remove-prefix server))
+ (prefix (nnir-read-server-parm 'nnir-glimpse-remove-prefix server))
artno dirnam)
(when (and group groupspec)
(error (concat "It does not make sense to use a group spec"
@@ -1191,7 +1202,7 @@ Tested with swish-e-2.0.1 on Windows NT
(error "Missing parameter `nnir-swish-e-index-file'")))
(additional-switches
(nnir-read-server-parm
- 'nnir-swish++-additional-switches server))
+ 'nnir-swish-e-additional-switches server))
(cp-list `(,nnir-swish-e-program
nil ; input from /dev/null
t ; output
@@ -1482,17 +1493,6 @@ form 'backend:name'."
;; (symbol-value key))
;; (symbol-value key))
;; ))
-
-(defmacro nnir-group-server (group)
- "Returns the server for a foreign newsgroup in the format as
gnus-server-to-method needs it. Compare to gnus-group-real-prefix and
gnus-group-real-name."
- `(let ((gname ,group))
- (if (string-match "^\\([^:]+\\):" gname)
- (setq gname (match-string 1 gname))
- nil)
- (if (string-match "^\\([^+]+\\)\\+\\(.+\\)$" gname)
- (format "%s:%s" (match-string 1 gname) (match-string 2 gname))
- (concat gname ":"))
- ))
(defun nnir-group-full-name (shortname server)
"For the given group name, return a full Gnus group name.
1.4 +5 -5 XEmacs/packages/xemacs-packages/gnus/lisp/nnkiboze.el
Index: nnkiboze.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnkiboze.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- nnkiboze.el 2004/09/28 02:21:17 1.3
+++ nnkiboze.el 2005/11/15 03:45:57 1.4
@@ -1,7 +1,7 @@
;;; nnkiboze.el --- select virtual news access for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -106,7 +106,7 @@
(error "nnkiboze: No xref"))
(unless (string-match " \\([^ ]+\\):\\([0-9]+\\)" xref)
(error "nnkiboze: Malformed xref"))
- (setq num (string-to-int (match-string 2 xref))
+ (setq num (string-to-number (match-string 2 xref))
group (match-string 1 xref))
(or (with-current-buffer buffer
(or (and gnus-use-cache (gnus-cache-request-article num group))
1.4 +4 -3 XEmacs/packages/xemacs-packages/gnus/lisp/nnlistserv.el
Index: nnlistserv.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnlistserv.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- nnlistserv.el 2004/09/28 02:21:17 1.3
+++ nnlistserv.el 2005/11/15 03:45:57 1.4
@@ -1,6 +1,7 @@
;;; nnlistserv.el --- retrieving articles via web mailing list archives
-;; Copyright (C) 1997, 1998, 1999, 2000, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news, mail
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.6 +9 -8 XEmacs/packages/xemacs-packages/gnus/lisp/nnmail.el
Index: nnmail.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnmail.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- nnmail.el 2005/03/13 00:23:35 1.5
+++ nnmail.el 2005/11/15 03:45:57 1.6
@@ -1,7 +1,8 @@
;;; nnmail.el --- mail support functions for the Gnus mail backends
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news, mail
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -49,7 +50,7 @@
:group 'nnmail)
(defgroup nnmail-prepare nil
- "Preparing (or mangling) new mail after retrival."
+ "Preparing (or mangling) new mail after retrieval."
:group 'nnmail)
(defgroup nnmail-duplicate nil
@@ -769,7 +770,7 @@ If SOURCE is a directory spec, try to re
(if (not (save-excursion
(and (re-search-backward
"^Content-Length:[ \t]*\\([0-9]+\\)" start t)
- (setq content-length (string-to-int
+ (setq content-length (string-to-number
(buffer-substring
(match-beginning 1)
(match-end 1))))
@@ -906,7 +907,7 @@ If SOURCE is a directory spec, try to re
(if (not (re-search-forward
"^Content-Length:[ \t]*\\([0-9]+\\)" nil t))
(setq content-length nil)
- (setq content-length (string-to-int (match-string 1)))
+ (setq content-length (string-to-number (match-string 1)))
;; We destroy the header, since none of the backends ever
;; use it, and we do not want to confuse other mailers by
;; having a (possibly) faulty header.
@@ -1141,7 +1142,7 @@ FUNC will be called with the group name
5 "Error in `nnmail-split-methods'; using `bogus' mail
group")
(sit-for 1)
'("bogus")))))
- (setq split (gnus-remove-duplicates split))
+ (setq split (mm-delete-duplicates split))
;; The article may be "cross-posted" to `junk'. What
;; to do? Just remove the `junk' spec. Don't really
;; see anything else to do...
1.3 +5 -5 XEmacs/packages/xemacs-packages/gnus/lisp/nnmaildir.el
Index: nnmaildir.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnmaildir.el,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- nnmaildir.el 2004/09/28 02:21:17 1.2
+++ nnmaildir.el 2005/11/15 03:45:57 1.3
@@ -17,8 +17,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -978,7 +978,7 @@ by nnmaildir-request-article.")
(throw 'return nil))
(when (save-match-data (string-match "[\0/\t]" gname))
(setf (nnmaildir--srv-error nnmaildir--cur-server)
- (concat "Illegal characters (null, tab, or /) in group name: "
+ (concat "Invalid characters (null, tab, or /) in group name: "
gname))
(throw 'return nil))
(setq groups (nnmaildir--srv-groups nnmaildir--cur-server))
@@ -1023,7 +1023,7 @@ by nnmaildir-request-article.")
(throw 'return nil))
(when (save-match-data (string-match "[\0/\t]" new-name))
(setf (nnmaildir--srv-error nnmaildir--cur-server)
- (concat "Illegal characters (null, tab, or /) in group name: "
+ (concat "Invalid characters (null, tab, or /) in group name: "
new-name))
(throw 'return nil))
(if (string-equal gname new-name) (throw 'return t))
@@ -1344,7 +1344,7 @@ by nnmaildir-request-article.")
(write-region (point-min) (point-max) tmpfile nil 'no-message nil
'excl)
(unix-sync))) ;; no fsync :(
- (cancel-timer 24h)
+ (nnheader-cancel-timer 24h)
(condition-case err
(add-name-to-file tmpfile curfile)
(error
1.5 +6 -6 XEmacs/packages/xemacs-packages/gnus/lisp/nnmbox.el
Index: nnmbox.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnmbox.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- nnmbox.el 2004/09/28 02:21:18 1.4
+++ nnmbox.el 2005/11/15 03:45:57 1.5
@@ -1,7 +1,7 @@
;;; nnmbox.el --- mail mbox access for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Masanobu UMEDA <umerin(a)flab.flab.fujitsu.junet>
@@ -16,8 +16,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -475,7 +475,7 @@
(when (re-search-forward "^X-Gnus-Newsgroup: +\\([^:]+\\):\\([0-9]+\\) "
nil t)
(cons (buffer-substring (match-beginning 1) (match-end 1))
- (string-to-int
+ (string-to-number
(buffer-substring (match-beginning 2) (match-end 2)))))))
(defun nnmbox-in-header-p (pos)
@@ -681,7 +681,7 @@
(let (alist)
(while (re-search-forward " \\([^:]+\\):\\([0-9]+\\)" end-header t)
(push (cons (match-string 1)
- (string-to-int (match-string 2))) alist))
+ (string-to-number (match-string 2))) alist))
(nnmbox-insert-newsgroup-line alist))
;; this is really a new article
(nnmbox-save-mail
1.5 +10 -10 XEmacs/packages/xemacs-packages/gnus/lisp/nnmh.el
Index: nnmh.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnmh.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- nnmh.el 2004/09/28 02:21:18 1.4
+++ nnmh.el 2005/11/15 03:45:57 1.5
@@ -1,7 +1,7 @@
;;; nnmh.el --- mhspool access for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Masanobu UMEDA <umerin(a)flab.flab.fujitsu.junet>
@@ -21,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -150,7 +150,7 @@ as unread by Gnus.")
(file-exists-p file)
(not (file-directory-p file))
(save-excursion (nnmail-find-file file))
- (string-to-int (file-name-nondirectory file)))))
+ (string-to-number (file-name-nondirectory file)))))
(deffoo nnmh-request-group (group &optional server dont-check)
(nnheader-init-server-buffer)
@@ -176,7 +176,7 @@ as unread by Gnus.")
(nnheader-re-read-dir pathname)
(setq dir
(sort
- (mapcar (lambda (name) (string-to-int name))
+ (mapcar (lambda (name) (string-to-number name))
(directory-files pathname nil "^[0-9]+$" t))
'<))
(cond
@@ -224,7 +224,7 @@ as unread by Gnus.")
;; For each directory, generate an active file line.
(unless (string= (expand-file-name nnmh-toplev) dir)
(let ((files (mapcar
- (lambda (name) (string-to-int name))
+ (lambda (name) (string-to-number name))
(directory-files dir nil "^[0-9]+$" t))))
(when files
(save-excursion
@@ -358,7 +358,7 @@ as unread by Gnus.")
(nnmh-possibly-change-directory group server)
(let ((articles (mapcar
(lambda (file)
- (string-to-int file))
+ (string-to-number file))
(directory-files
nnmh-current-directory nil "^[0-9]+$"))))
(when articles
@@ -486,7 +486,7 @@ as unread by Gnus.")
(let ((files (sort
(mapcar
(lambda (f)
- (string-to-int f))
+ (string-to-number f))
(directory-files dir nil "^[0-9]+$"))
'>)))
(when files
@@ -509,7 +509,7 @@ as unread by Gnus.")
;; articles in this folder. The articles that are "new" will be
;; marked as unread by Gnus.
(let* ((dir nnmh-current-directory)
- (files (sort (mapcar (function (lambda (name) (string-to-int name)))
+ (files (sort (mapcar (function (lambda (name) (string-to-number name)))
(directory-files nnmh-current-directory
nil "^[0-9]+$" t))
'<))
1.6 +7 -6 XEmacs/packages/xemacs-packages/gnus/lisp/nnml.el
Index: nnml.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnml.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- nnml.el 2005/03/13 00:23:36 1.5
+++ nnml.el 2005/11/15 03:45:57 1.6
@@ -1,7 +1,8 @@
;;; nnml.el --- mail spool access for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Simon Josefsson <simon(a)josefsson.org> (adding MARKS)
;; Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Masanobu UMEDA <umerin(a)flab.flab.fujitsu.junet>
@@ -21,8 +22,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -212,7 +213,7 @@ marks file will be regenerated properly
(nnheader-report 'nnml "Article %s retrieved" id)
;; We return the article number.
(cons (if group-num (car group-num) group)
- (string-to-int (file-name-nondirectory path)))))))
+ (string-to-number (file-name-nondirectory path)))))))
(deffoo nnml-request-group (group &optional server dont-check)
(let ((file-name-coding-system nnmail-pathname-coding-system))
@@ -426,7 +427,7 @@ marks file will be regenerated properly
;; we should insert it. (This situation should never
;; occur, but one likes to make sure...)
(while (and (looking-at "[0-9]+\t")
- (< (string-to-int
+ (< (string-to-number
(buffer-substring
(match-beginning 0) (match-end 0)))
article)
1.3 +2 -2 XEmacs/packages/xemacs-packages/gnus/lisp/nnnil.el
Index: nnnil.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnnil.el,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- nnnil.el 2004/09/28 02:21:19 1.2
+++ nnnil.el 2005/11/15 03:45:58 1.3
@@ -15,8 +15,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.4 +5 -5 XEmacs/packages/xemacs-packages/gnus/lisp/nnoo.el
Index: nnoo.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnoo.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- nnoo.el 2004/09/28 02:21:19 1.3
+++ nnoo.el 2005/11/15 03:45:58 1.4
@@ -1,7 +1,7 @@
;;; nnoo.el --- OO Gnus Backends
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -254,7 +254,7 @@
(setcdr bstate (delq defs (cdr bstate)))
(pop defs)
(while defs
- (set (car (pop defs)) nil)))))
+ (set (car (pop defs)) nil)))))
t)
(defun nnoo-close (backend)
1.6 +451 -268 XEmacs/packages/xemacs-packages/gnus/lisp/nnrss.el
Index: nnrss.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnrss.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- nnrss.el 2005/03/13 00:23:36 1.5
+++ nnrss.el 2005/11/15 03:45:58 1.6
@@ -1,6 +1,7 @@
;;; nnrss.el --- interfacing with RSS
-;; Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Shenghuo Zhu <zsh(a)cs.rochester.edu>
;; Keywords: RSS
@@ -18,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -36,9 +37,11 @@
(require 'time-date)
(require 'rfc2231)
(require 'mm-url)
+(require 'rfc2047)
+(require 'mml)
(eval-when-compile
(ignore-errors
- (require 'xml)))
+ (require 'xml)))
(eval '(require 'xml))
(nnoo-declare nnrss)
@@ -75,20 +78,32 @@ To use the description in headers, put t
(defvar nnrss-content-function nil
"A function which is called in `nnrss-request-article'.
The arguments are (ENTRY GROUP ARTICLE).
-ENTRY is the record of the current headline. GROUP is the group name.
+ENTRY is the record of the current headline. GROUP is the group name.
ARTICLE is the article number of the current headline.")
+(defvar nnrss-file-coding-system mm-universal-coding-system
+ "Coding system used when reading and writing files.")
+
+(defvar nnrss-compatible-encoding-alist '((iso-8859-1 . windows-1252))
+ "Alist of encodings and those supersets.
+The cdr of each element is used to decode data if it is available when
+the car is what the data specify as the encoding. Or, the car is used
+for decoding when the cdr that the data specify is not available.")
+
(nnoo-define-basics nnrss)
;;; Interface functions
-(eval-when-compile
- (defmacro nnrss-string-as-multibyte (string)
- (if (featurep 'xemacs)
- string
- `(string-as-multibyte ,string))))
+(defsubst nnrss-format-string (string)
+ (gnus-replace-in-string string " *\n *" " "))
+(defun nnrss-decode-group-name (group)
+ (if (and group (mm-coding-system-p 'utf-8))
+ (setq group (mm-decode-coding-string group 'utf-8))
+ group))
+
(deffoo nnrss-retrieve-headers (articles &optional group server fetch-old)
+ (setq group (nnrss-decode-group-name group))
(nnrss-possibly-change-group group server)
(let (e)
(save-excursion
@@ -97,21 +112,26 @@ ARTICLE is the article number of the cur
(dolist (article articles)
(if (setq e (assq article nnrss-group-data))
(insert (number-to-string (car e)) "\t" ;; number
- (if (nth 3 e)
- (nnrss-format-string (nth 3 e)) "")
- "\t" ;; subject
- (if (nth 4 e)
- (nnrss-format-string (nth 4 e))
- "(nobody)")
- "\t" ;;from
+ ;; subject
+ (or (nth 3 e) "")
+ "\t"
+ ;; from
+ (or (nth 4 e) "(nobody)")
+ "\t"
+ ;; date
(or (nth 5 e) "")
- "\t" ;; date
+ "\t"
+ ;; id
(format "<%d(a)%s.nnrss>" (car e) group)
- "\t" ;; id
- "\t" ;; refs
- "-1" "\t" ;; chars
- "-1" "\t" ;; lines
- "" "\t" ;; Xref
+ "\t"
+ ;; refs
+ "\t"
+ ;; chars
+ "-1" "\t"
+ ;; lines
+ "-1" "\t"
+ ;; Xref
+ "" "\t"
(if (and (nth 6 e)
(memq nnrss-description-field
nnmail-extra-headers))
@@ -132,69 +152,115 @@ ARTICLE is the article number of the cur
'nov)
(deffoo nnrss-request-group (group &optional server dont-check)
+ (setq group (nnrss-decode-group-name group))
+ (nnheader-message 6 "nnrss: Requesting %s..." group)
(nnrss-possibly-change-group group server)
- (if dont-check
- t
- (nnrss-check-group group server)
- (nnheader-report 'nnrss "Opened group %s" group)
- (nnheader-insert
- "211 %d %d %d %s\n" nnrss-group-max nnrss-group-min nnrss-group-max
- (prin1-to-string group)
- t)))
+ (prog1
+ (if dont-check
+ t
+ (nnrss-check-group group server)
+ (nnheader-report 'nnrss "Opened group %s" group)
+ (nnheader-insert
+ "211 %d %d %d %s\n" nnrss-group-max nnrss-group-min nnrss-group-max
+ (prin1-to-string group)
+ t))
+ (nnheader-message 6 "nnrss: Requesting %s...done" group)))
(deffoo nnrss-close-group (group &optional server)
t)
(deffoo nnrss-request-article (article &optional group server buffer)
+ (setq group (nnrss-decode-group-name group))
+ (when (stringp article)
+ (setq article (if (string-match "\\`<\\([0-9]+\\)@" article)
+ (string-to-number (match-string 1 article))
+ 0)))
(nnrss-possibly-change-group group server)
(let ((e (assq article nnrss-group-data))
- (boundary "=-=-=-=-=-=-=-=-=-")
(nntp-server-buffer (or buffer nntp-server-buffer))
post err)
(when e
- (catch 'error
- (with-current-buffer nntp-server-buffer
- (erase-buffer)
- (goto-char (point-min))
- (insert "Mime-Version: 1.0\nContent-Type: multipart/alternative;
boundary=\"" boundary "\"\n")
- (if group
- (insert "Newsgroups: " group "\n"))
- (if (nth 3 e)
- (insert "Subject: " (nnrss-format-string (nth 3 e)) "\n"))
- (if (nth 4 e)
- (insert "From: " (nnrss-format-string (nth 4 e)) "\n"))
- (if (nth 5 e)
- (insert "Date: " (nnrss-format-string (nth 5 e)) "\n"))
- (insert "Message-ID: " (format "<%d(a)%s.nnrss>" (car e)
group) "\n")
- (insert "\n")
- (let ((text (if (nth 6 e)
- (nnrss-string-as-multibyte (nth 6 e))))
- (link (if (nth 2 e)
- (nth 2 e))))
- (insert "\n\n--" boundary "\nContent-Type: text/plain\n\n")
- (let ((point (point)))
- (if text
- (progn (insert text)
- (goto-char point)
- (while (re-search-forward "\n" nil t)
- (replace-match " "))
- (goto-char (point-max))
- (insert "\n\n")))
- (if link
- (insert link)))
- (insert "\n\n--" boundary "\nContent-Type: text/html\n\n")
- (let ((point (point)))
- (if text
- (progn (insert "<html><head></head><body>\n" text
"\n</body></html>")
- (goto-char point)
- (while (re-search-forward "\n" nil t)
- (replace-match " "))
- (goto-char (point-max))
- (insert "\n\n")))
- (if link
- (insert "<p><a href=\"" link
"\">link</a></p>\n"))))
- (if nnrss-content-function
- (funcall nnrss-content-function e group article)))))
+ (with-current-buffer nntp-server-buffer
+ (erase-buffer)
+ (if group
+ (insert "Newsgroups: " group "\n"))
+ (if (nth 3 e)
+ (insert "Subject: " (nth 3 e) "\n"))
+ (if (nth 4 e)
+ (insert "From: " (nth 4 e) "\n"))
+ (if (nth 5 e)
+ (insert "Date: " (nnrss-format-string (nth 5 e)) "\n"))
+ (let ((header (buffer-string))
+ (text (if (nth 6 e)
+ (mapconcat 'identity
+ (delete "" (split-string (nth 6 e) "\n+"))
+ " ")))
+ (link (nth 2 e))
+ (enclosure (nth 7 e))
+ (comments (nth 8 e))
+ ;; Enable encoding of Newsgroups header in XEmacs.
+ (default-enable-multibyte-characters t)
+ (rfc2047-header-encoding-alist
+ (if (mm-coding-system-p 'utf-8)
+ (cons '("Newsgroups" . utf-8)
+ rfc2047-header-encoding-alist)
+ rfc2047-header-encoding-alist))
+ rfc2047-encode-encoded-words body)
+ (when (or text link enclosure comments)
+ (insert "\n")
+ (insert "<#multipart type=alternative>\n"
+ "<#part type=\"text/plain\">\n")
+ (setq body (point))
+ (when text
+ (insert text "\n")
+ (when (or link enclosure)
+ (insert "\n")))
+ (when link
+ (insert link "\n"))
+ (when enclosure
+ (insert (car enclosure) " "
+ (nth 2 enclosure) " "
+ (nth 3 enclosure) "\n"))
+ (when comments
+ (insert comments "\n"))
+ (setq body (buffer-substring body (point)))
+ (insert "<#/part>\n"
+ "<#part type=\"text/html\">\n"
+ "<html><head></head><body>\n")
+ (when text
+ (insert text "\n"))
+ (when link
+ (insert "<p><a href=\"" link
"\">link</a></p>\n"))
+ (when enclosure
+ (insert "<p><a href=\"" (car enclosure)
"\">"
+ (cadr enclosure) "</a> " (nth 2 enclosure)
+ " " (nth 3 enclosure) "</p>\n"))
+ (when comments
+ (insert "<p><a href=\"" comments
"\">comments</a></p>\n"))
+ (insert "</body></html>\n"
+ "<#/part>\n"
+ "<#/multipart>\n"))
+ (condition-case nil
+ (mml-to-mime)
+ (error
+ (erase-buffer)
+ (insert header
+ "Content-Type: text/plain; charset=gnus-decoded\n"
+ "Content-Transfer-Encoding: 8bit\n\n"
+ body)
+ (nnheader-message
+ 3 "Warning - there might be invalid characters"))))
+ (goto-char (point-min))
+ (search-forward "\n\n")
+ (forward-line -1)
+ (insert (format "Message-ID: <%d(a)%s.nnrss>\n"
+ (car e)
+ (let ((rfc2047-encoding-type 'mime)
+ rfc2047-encode-max-chars)
+ (rfc2047-encode-string
+ (gnus-replace-in-string group "[\t\n ]+" "_")))))
+ (when nnrss-content-function
+ (funcall nnrss-content-function e group article))))
(cond
(err
(nnheader-report 'nnrss err))
@@ -217,6 +283,7 @@ ARTICLE is the article number of the cur
(deffoo nnrss-request-expire-articles
(articles group &optional server force)
+ (setq group (nnrss-decode-group-name group))
(nnrss-possibly-change-group group server)
(let (e days not-expirable changed)
(dolist (art articles)
@@ -234,18 +301,18 @@ ARTICLE is the article number of the cur
not-expirable))
(deffoo nnrss-request-delete-group (group &optional force server)
+ (setq group (nnrss-decode-group-name group))
(nnrss-possibly-change-group group server)
+ (let (elem)
+ ;; There may be two or more entries in `nnrss-group-alist' since
+ ;; this function didn't delete them formerly.
+ (while (setq elem (assoc group nnrss-group-alist))
+ (setq nnrss-group-alist (delq elem nnrss-group-alist))))
(setq nnrss-server-data
(delq (assoc group nnrss-server-data) nnrss-server-data))
(nnrss-save-server-data server)
- (let ((file (expand-file-name
- (nnrss-translate-file-chars
- (concat group (and server
- (not (equal server ""))
- "-")
- server ".el")) nnrss-directory)))
- (ignore-errors
- (delete-file file)))
+ (ignore-errors
+ (delete-file (nnrss-make-filename group server)))
t)
(deffoo nnrss-request-list-newsgroups (&optional server)
@@ -262,34 +329,67 @@ ARTICLE is the article number of the cur
;;; Internal functions
(eval-when-compile (defun xml-rpc-method-call (&rest args)))
+
+(defun nnrss-get-encoding ()
+ "Return an encoding attribute specified in the current xml contents.
+If `nnrss-compatible-encoding-alist' specifies the compatible encoding,
+it is used instead. If the xml contents doesn't specify the encoding,
+return `utf-8' which is the default encoding for xml if it is available,
+otherwise return nil."
+ (goto-char (point-min))
+ (if (re-search-forward
+
"<\\?[^>]*encoding=\\(\"\\([^\">]+\\)\"\\|'\\([^'>]+\\)'\\)"
+ nil t)
+ (let ((encoding (intern (downcase (or (match-string 2)
+ (match-string 3))))))
+ (or
+ (mm-coding-system-p (cdr (assq encoding
+ nnrss-compatible-encoding-alist)))
+ (mm-coding-system-p encoding)
+ (mm-coding-system-p (car (rassq encoding
+ nnrss-compatible-encoding-alist)))))
+ (mm-coding-system-p 'utf-8)))
+
(defun nnrss-fetch (url &optional local)
- "Fetch the url and put it in a the expected lisp structure."
- (with-temp-buffer
- ;some CVS versions of url.el need this to close the connection quickly
- (let* (xmlform htmlform)
+ "Fetch URL and put it in a the expected Lisp structure."
+ (mm-with-unibyte-buffer
+ ;;some CVS versions of url.el need this to close the connection quickly
+ (let (cs xmlform htmlform)
;; bit o' work necessary for w3 pre-cvs and post-cvs
(if local
(let ((coding-system-for-read 'binary))
(insert-file-contents url))
- (mm-url-insert url))
+ ;; FIXME: shouldn't binding `coding-system-for-read' be moved
+ ;; to `mm-url-insert'?
+ (let ((coding-system-for-read 'binary))
+ (mm-url-insert url)))
+ (nnheader-remove-cr-followed-by-lf)
+ ;; Decode text according to the encoding attribute.
+ (when (setq cs (nnrss-get-encoding))
+ (mm-decode-coding-region (point-min) (point-max) cs)
+ (mm-enable-multibyte))
+ (goto-char (point-min))
-;; Because xml-parse-region can't deal with anything that isn't
-;; xml and w3-parse-buffer can't deal with some xml, we have to
-;; parse with xml-parse-region first and, if that fails, parse
-;; with w3-parse-buffer. Yuck. Eventually, someone should find out
-;; why w3-parse-buffer fails to parse some well-formed xml and
-;; fix it.
-
- (condition-case err
- (setq xmlform (xml-parse-region (point-min) (point-max)))
- (error (if (fboundp 'w3-parse-buffer)
- (setq htmlform (caddar (w3-parse-buffer
- (current-buffer))))
- (message "nnrss: Not valid XML and w3 parse not available (%s)"
- url))))
- (if htmlform
- htmlform
- xmlform))))
+ ;; Because xml-parse-region can't deal with anything that isn't
+ ;; xml and w3-parse-buffer can't deal with some xml, we have to
+ ;; parse with xml-parse-region first and, if that fails, parse
+ ;; with w3-parse-buffer. Yuck. Eventually, someone should find out
+ ;; why w3-parse-buffer fails to parse some well-formed xml and
+ ;; fix it.
+
+ (condition-case err1
+ (setq xmlform (xml-parse-region (point-min) (point-max)))
+ (error
+ (condition-case err2
+ (setq htmlform (caddar (w3-parse-buffer
+ (current-buffer))))
+ (error
+ (message "\
+nnrss: %s: Not valid XML %s and w3-parse doesn't work %s"
+ url err1 err2)))))
+ (if htmlform
+ htmlform
+ xmlform))))
(defun nnrss-possibly-change-group (&optional group server)
(when (and server
@@ -302,9 +402,9 @@ ARTICLE is the article number of the cur
(defvar nnrss-extra-categories '(nnrss-snarf-moreover-categories))
(defun nnrss-generate-active ()
- (if (y-or-n-p "fetch extra categories? ")
- (dolist (func nnrss-extra-categories)
- (funcall func)))
+ (when (y-or-n-p "Fetch extra categories? ")
+ (dolist (func nnrss-extra-categories)
+ (funcall func)))
(save-excursion
(set-buffer nntp-server-buffer)
(erase-buffer)
@@ -318,41 +418,26 @@ ARTICLE is the article number of the cur
(defun nnrss-read-server-data (server)
(setq nnrss-server-data nil)
- (let ((file (expand-file-name
- (nnrss-translate-file-chars
- (concat "nnrss" (and server
- (not (equal server ""))
- "-")
- server
- ".el"))
- nnrss-directory)))
+ (let ((file (nnrss-make-filename "nnrss" server)))
(when (file-exists-p file)
- (with-temp-buffer
- (let ((coding-system-for-read 'binary)
- emacs-lisp-mode-hook)
+ ;; In Emacs 21.3 and earlier, `load' doesn't support non-ASCII
+ ;; file names. So, we use `insert-file-contents' instead.
+ (mm-with-multibyte-buffer
+ (let ((coding-system-for-read nnrss-file-coding-system)
+ (file-name-coding-system nnmail-pathname-coding-system))
(insert-file-contents file)
- (emacs-lisp-mode)
- (goto-char (point-min))
- (eval-buffer))))))
+ (eval-region (point-min) (point-max)))))))
(defun nnrss-save-server-data (server)
(gnus-make-directory nnrss-directory)
- (let ((file (expand-file-name
- (nnrss-translate-file-chars
- (concat "nnrss" (and server
- (not (equal server ""))
- "-")
- server ".el"))
- nnrss-directory)))
- (let ((coding-system-for-write 'binary)
- print-level print-length)
- (with-temp-file file
- (insert "(setq nnrss-group-alist '"
- (prin1-to-string nnrss-group-alist)
- ")\n")
- (insert "(setq nnrss-server-data '"
- (prin1-to-string nnrss-server-data)
- ")\n")))))
+ (let ((coding-system-for-write nnrss-file-coding-system)
+ (file-name-coding-system nnmail-pathname-coding-system))
+ (with-temp-file (nnrss-make-filename "nnrss" server)
+ (insert (format ";; -*- coding: %s; -*-\n"
+ nnrss-file-coding-system))
+ (gnus-prin1 `(setq nnrss-group-alist ',nnrss-group-alist))
+ (insert "\n")
+ (gnus-prin1 `(setq nnrss-server-data ',nnrss-server-data)))))
(defun nnrss-read-group-data (group server)
(setq nnrss-group-data nil)
@@ -360,43 +445,50 @@ ARTICLE is the article number of the cur
(let ((pair (assoc group nnrss-server-data)))
(setq nnrss-group-max (or (cadr pair) 0))
(setq nnrss-group-min (+ nnrss-group-max 1)))
- (let ((file (expand-file-name
- (nnrss-translate-file-chars
- (concat group (and server
- (not (equal server ""))
- "-")
- server ".el"))
- nnrss-directory)))
+ (let ((file (nnrss-make-filename group server)))
(when (file-exists-p file)
- (with-temp-buffer
- (let ((coding-system-for-read 'binary)
- emacs-lisp-mode-hook)
+ ;; In Emacs 21.3 and earlier, `load' doesn't support non-ASCII
+ ;; file names. So, we use `insert-file-contents' instead.
+ (mm-with-multibyte-buffer
+ (let ((coding-system-for-read nnrss-file-coding-system)
+ (file-name-coding-system nnmail-pathname-coding-system))
(insert-file-contents file)
- (emacs-lisp-mode)
- (goto-char (point-min))
- (eval-buffer)))
+ (eval-region (point-min) (point-max))))
(dolist (e nnrss-group-data)
- (gnus-sethash (nth 2 e) e nnrss-group-hashtb)
- (if (and (car e) (> nnrss-group-min (car e)))
- (setq nnrss-group-min (car e)))
- (if (and (car e) (< nnrss-group-max (car e)))
- (setq nnrss-group-max (car e)))))))
+ (gnus-sethash (or (nth 2 e) (nth 6 e)) t nnrss-group-hashtb)
+ (when (and (car e) (> nnrss-group-min (car e)))
+ (setq nnrss-group-min (car e)))
+ (when (and (car e) (< nnrss-group-max (car e)))
+ (setq nnrss-group-max (car e)))))))
(defun nnrss-save-group-data (group server)
(gnus-make-directory nnrss-directory)
- (let ((file (expand-file-name
- (nnrss-translate-file-chars
- (concat group (and server
- (not (equal server ""))
- "-")
- server ".el"))
- nnrss-directory)))
- (let ((coding-system-for-write 'binary)
- print-level print-length)
- (with-temp-file file
- (insert "(setq nnrss-group-data '"
- (prin1-to-string nnrss-group-data)
- ")\n")))))
+ (let ((coding-system-for-write nnrss-file-coding-system)
+ (file-name-coding-system nnmail-pathname-coding-system))
+ (with-temp-file (nnrss-make-filename group server)
+ (insert (format ";; -*- coding: %s; -*-\n"
+ nnrss-file-coding-system))
+ (gnus-prin1 `(setq nnrss-group-data ',nnrss-group-data)))))
+
+(defun nnrss-make-filename (name server)
+ (expand-file-name
+ (nnrss-translate-file-chars
+ (concat name
+ (and server
+ (not (equal server ""))
+ "-")
+ server
+ ".el"))
+ nnrss-directory))
+
+(gnus-add-shutdown 'nnrss-close 'gnus)
+
+(defun nnrss-close ()
+ "Clear internal nnrss variables."
+ (setq nnrss-group-data nil
+ nnrss-server-data nil
+ nnrss-group-hashtb nil
+ nnrss-group-alist nil))
;;; URL interface
@@ -407,20 +499,41 @@ ARTICLE is the article number of the cur
(mm-with-unibyte-current-buffer
(mm-url-insert url)))
-(defun nnrss-decode-entities-unibyte-string (string)
+(defun nnrss-decode-entities-string (string)
(if string
- (mm-with-unibyte-buffer
+ (mm-with-multibyte-buffer
(insert string)
(mm-url-decode-entities-nbsp)
(buffer-string))))
(defalias 'nnrss-insert 'nnrss-insert-w3)
+(defun nnrss-mime-encode-string (string)
+ (mm-with-multibyte-buffer
+ (insert string)
+ (mm-url-decode-entities-nbsp)
+ (goto-char (point-min))
+ (while (re-search-forward "[\t\n ]+" nil t)
+ (replace-match " "))
+ (goto-char (point-min))
+ (skip-chars-forward " ")
+ (delete-region (point-min) (point))
+ (goto-char (point-max))
+ (skip-chars-forward " ")
+ (delete-region (point) (point-max))
+ (let ((rfc2047-encoding-type 'mime)
+ rfc2047-encode-max-chars)
+ (rfc2047-encode-region (point-min) (point-max)))
+ (goto-char (point-min))
+ (while (search-forward "\n" nil t)
+ (delete-backward-char 1))
+ (buffer-string)))
+
;;; Snarf functions
(defun nnrss-check-group (group server)
- (let (file xml subject url extra changed author
- date rss-ns rdf-ns content-ns dc-ns)
+ (let (file xml subject url extra changed author date
+ enclosure comments rss-ns rdf-ns content-ns dc-ns)
(if (and nnrss-use-local
(file-exists-p (setq file (expand-file-name
(nnrss-translate-file-chars
@@ -431,11 +544,11 @@ ARTICLE is the article number of the cur
(second (assoc group nnrss-group-alist))))
(unless url
(setq url
- (cdr
- (assoc 'href
- (nnrss-discover-feed
- (read-string
- (format "URL to search for %s: " group)
"http://")))))
+ (cdr
+ (assoc 'href
+ (nnrss-discover-feed
+ (read-string
+ (format "URL to search for %s: " group) "http://")))))
(let ((pair (assoc group nnrss-server-data)))
(if pair
(setcdr (cdr pair) (list url))
@@ -451,12 +564,16 @@ ARTICLE is the article number of the cur
content-ns (nnrss-get-namespace-prefix xml
"http://purl.org/rss/1.0/modules/content/"))
(dolist (item (nreverse (nnrss-find-el (intern (concat rss-ns "item"))
xml)))
(when (and (listp item)
- (eq (intern (concat rss-ns "item")) (car item))
- (setq url (nnrss-decode-entities-unibyte-string
- (nnrss-node-text rss-ns 'link (cddr item))))
- (not (gnus-gethash url nnrss-group-hashtb)))
+ (string= (concat rss-ns "item") (car item))
+ (if (setq url (nnrss-decode-entities-string
+ (nnrss-node-text rss-ns 'link (cddr item))))
+ (not (gnus-gethash url nnrss-group-hashtb))
+ (setq extra (or (nnrss-node-text content-ns 'encoded item)
+ (nnrss-node-text rss-ns 'description item)))
+ (not (gnus-gethash extra nnrss-group-hashtb))))
(setq subject (nnrss-node-text rss-ns 'title item))
- (setq extra (or (nnrss-node-text content-ns 'encoded item)
+ (setq extra (or extra
+ (nnrss-node-text content-ns 'encoded item)
(nnrss-node-text rss-ns 'description item)))
(setq author (or (nnrss-node-text rss-ns 'author item)
(nnrss-node-text dc-ns 'creator item)
@@ -464,18 +581,43 @@ ARTICLE is the article number of the cur
(setq date (or (nnrss-node-text dc-ns 'date item)
(nnrss-node-text rss-ns 'pubDate item)
(message-make-date)))
+ (setq comments (nnrss-node-text rss-ns 'comments item))
+ (when (setq enclosure (cadr (assq (intern (concat rss-ns "enclosure"))
item)))
+ (let ((url (cdr (assq 'url enclosure)))
+ (len (cdr (assq 'length enclosure)))
+ (type (cdr (assq 'type enclosure)))
+ (name))
+ (setq len
+ (if (and len (integerp (setq len (string-to-number len))))
+ ;; actually already in `ls-lisp-format-file-size' but
+ ;; probably not worth to require it for one function
+ (do ((size (/ len 1.0) (/ size 1024.0))
+ (post-fixes (list "" "k" "M" "G"
"T" "P" "E")
+ (cdr post-fixes)))
+ ((< size 1024)
+ (format "%.1f%s" size (car post-fixes))))
+ "0"))
+ (setq url (or url ""))
+ (setq name (if (string-match "/\\([^/]*\\)$" url)
+ (match-string 1 url)
+ "file"))
+ (setq type (or type ""))
+ (setq enclosure (list url name len type))))
(push
(list
(incf nnrss-group-max)
(current-time)
url
- (and subject (nnrss-decode-entities-unibyte-string subject))
- (and author (nnrss-decode-entities-unibyte-string author))
+ (and subject (nnrss-mime-encode-string subject))
+ (and author (nnrss-mime-encode-string author))
date
- (and extra (nnrss-decode-entities-unibyte-string extra)))
+ (and extra (nnrss-decode-entities-string extra))
+ enclosure
+ comments)
nnrss-group-data)
- (gnus-sethash url (car nnrss-group-data) nnrss-group-hashtb)
- (setq changed t)))
+ (gnus-sethash (or url extra) t nnrss-group-hashtb)
+ (setq changed t))
+ (setq extra nil))
(when changed
(nnrss-save-group-data group server)
(let ((pair (assoc group nnrss-server-data)))
@@ -484,6 +626,45 @@ ARTICLE is the article number of the cur
(push (list group nnrss-group-max) nnrss-server-data)))
(nnrss-save-server-data server))))
+(defun nnrss-opml-import (opml-file)
+ "OPML subscriptions import.
+Read the file and attempt to subscribe to each Feed in the file."
+ (interactive "fImport file: ")
+ (mapcar
+ (lambda (node) (gnus-group-make-rss-group
+ (cdr (assq 'xmlUrl (cadr node)))))
+ (nnrss-find-el 'outline
+ (progn
+ (find-file opml-file)
+ (xml-parse-region (point-min)
+ (point-max))))))
+
+(defun nnrss-opml-export ()
+ "OPML subscription export.
+Export subscriptions to a buffer in OPML Format."
+ (interactive)
+ (with-current-buffer (get-buffer-create "*OPML Export*")
+ (mm-set-buffer-file-coding-system 'utf-8)
+ (insert "<?xml version=\"1.0\"
encoding=\"utf-8\"?>\n"
+ "<!-- OPML generated by Emacs Gnus' nnrss.el -->\n"
+ "<opml version=\"1.1\">\n"
+ " <head>\n"
+ " <title>mySubscriptions</title>\n"
+ " <dateCreated>" (format-time-string "%a, %d %b %Y %T
%z")
+ "</dateCreated>\n"
+ " <ownerEmail>" user-mail-address
"</ownerEmail>\n"
+ " <ownerName>" (user-full-name)
"</ownerName>\n"
+ " </head>\n"
+ " <body>\n")
+ (dolist (sub nnrss-group-alist)
+ (insert " <outline text=\"" (car sub)
+ "\" xmlUrl=\"" (cadr sub) "\"/>\n"))
+ (insert " </body>\n"
+ "</opml>\n"))
+ (pop-to-buffer "*OPML Export*")
+ (when (fboundp 'sgml-mode)
+ (sgml-mode)))
+
(defun nnrss-generate-download-script ()
"Generate a download script in the current buffer.
It is useful when `(setq nnrss-use-local t)'."
@@ -530,17 +711,17 @@ It is useful when `(setq nnrss-use-local
(if changed
(nnrss-save-server-data ""))))
-(defun nnrss-format-string (string)
- (gnus-replace-in-string (nnrss-string-as-multibyte string) " *\n *" "
"))
-
(defun nnrss-node-text (namespace local-name element)
(let* ((node (assq (intern (concat namespace (symbol-name local-name)))
element))
(text (if (and node (listp node))
(nnrss-node-just-text node)
node))
- (cleaned-text (if text (gnus-replace-in-string
- text "^[\000-\037\177]+\\|^ +\\| +$" ""))))
+ (cleaned-text (if text
+ (gnus-replace-in-string
+ (gnus-replace-in-string
+ text "^[\000-\037\177]+\\|^ +\\| +$" "")
+ "\r\n" "\n"))))
(if (string-equal "" cleaned-text)
nil
cleaned-text)))
@@ -551,56 +732,59 @@ It is useful when `(setq nnrss-use-local
node))
(defun nnrss-find-el (tag data &optional found-list)
- "Find the all matching elements in the data. Careful with this on
-large documents!"
- (if (listp data)
- (mapcar (lambda (bit)
- (if (car-safe bit)
- (progn (if (equal tag (car bit))
- (setq found-list
- (append found-list
- (list bit))))
- (if (and (listp (car-safe (caddr bit)))
- (not (stringp (caddr bit))))
- (setq found-list
- (append found-list
- (nnrss-find-el
- tag (caddr bit))))
- (setq found-list
- (append found-list
- (nnrss-find-el
- tag (cddr bit))))))))
- data))
+ "Find the all matching elements in the data.
+Careful with this on large documents!"
+ (when (consp data)
+ (dolist (bit data)
+ (when (car-safe bit)
+ (when (equal tag (car bit))
+ ;; Old xml.el may return a list of string.
+ (when (and (consp (caddr bit))
+ (stringp (caaddr bit)))
+ (setcar (cddr bit) (caaddr bit)))
+ (setq found-list
+ (append found-list
+ (list bit))))
+ (if (and (consp (car-safe (caddr bit)))
+ (not (stringp (caddr bit))))
+ (setq found-list
+ (append found-list
+ (nnrss-find-el
+ tag (caddr bit))))
+ (setq found-list
+ (append found-list
+ (nnrss-find-el
+ tag (cddr bit))))))))
found-list)
(defun nnrss-rsslink-p (el)
"Test if the element we are handed is an RSS autodiscovery link."
(and (eq (car-safe el) 'link)
(string-equal (cdr (assoc 'rel (cadr el))) "alternate")
- (or (string-equal (cdr (assoc 'type (cadr el)))
+ (or (string-equal (cdr (assoc 'type (cadr el)))
"application/rss+xml")
(string-equal (cdr (assoc 'type (cadr el))) "text/xml"))))
(defun nnrss-get-rsslinks (data)
"Extract the <link> elements that are links to RSS from the parsed
data."
- (delq nil (mapcar
+ (delq nil (mapcar
(lambda (el)
(if (nnrss-rsslink-p el) el))
(nnrss-find-el 'link data))))
(defun nnrss-extract-hrefs (data)
- "Recursively extract hrefs from a page's source. DATA should be
-the output of xml-parse-region or w3-parse-buffer."
+ "Recursively extract hrefs from a page's source.
+DATA should be the output of `xml-parse-region' or
+`w3-parse-buffer'."
(mapcar (lambda (ahref)
(cdr (assoc 'href (cadr ahref))))
(nnrss-find-el 'a data)))
-(defmacro nnrss-match-macro (base-uri item
- onsite-list offsite-list)
+(defmacro nnrss-match-macro (base-uri item onsite-list offsite-list)
`(cond ((or (string-match (concat "^" ,base-uri) ,item)
- (not (string-match "://" ,item)))
- (setq ,onsite-list (append ,onsite-list (list ,item))))
- (t (setq ,offsite-list (append ,offsite-list (list ,item))))))
+ (not (string-match "://" ,item)))
+ (setq ,onsite-list (append ,onsite-list (list ,item))))
+ (t (setq ,offsite-list (append ,offsite-list (list ,item))))))
(defun nnrss-order-hrefs (base-uri hrefs)
"Given a list of hrefs, sort them using the following priorities:
@@ -615,29 +799,28 @@ whether they are `offsite' or `onsite'."
(let (rss-onsite-end rdf-onsite-end xml-onsite-end
rss-onsite-in rdf-onsite-in xml-onsite-in
rss-offsite-end rdf-offsite-end xml-offsite-end
- rss-offsite-in rdf-offsite-in xml-offsite-in)
- (mapcar (lambda (href)
- (if (not (null href))
- (cond ((string-match "\\.rss$" href)
- (nnrss-match-macro
- base-uri href rss-onsite-end rss-offsite-end))
- ((string-match "\\.rdf$" href)
- (nnrss-match-macro
- base-uri href rdf-onsite-end rdf-offsite-end))
- ((string-match "\\.xml$" href)
- (nnrss-match-macro
- base-uri href xml-onsite-end xml-offsite-end))
- ((string-match "rss" href)
- (nnrss-match-macro
- base-uri href rss-onsite-in rss-offsite-in))
- ((string-match "rdf" href)
- (nnrss-match-macro
- base-uri href rdf-onsite-in rdf-offsite-in))
- ((string-match "xml" href)
- (nnrss-match-macro
- base-uri href xml-onsite-in xml-offsite-in)))))
- hrefs)
- (append
+ rss-offsite-in rdf-offsite-in xml-offsite-in)
+ (dolist (href hrefs)
+ (cond ((null href))
+ ((string-match "\\.rss$" href)
+ (nnrss-match-macro
+ base-uri href rss-onsite-end rss-offsite-end))
+ ((string-match "\\.rdf$" href)
+ (nnrss-match-macro
+ base-uri href rdf-onsite-end rdf-offsite-end))
+ ((string-match "\\.xml$" href)
+ (nnrss-match-macro
+ base-uri href xml-onsite-end xml-offsite-end))
+ ((string-match "rss" href)
+ (nnrss-match-macro
+ base-uri href rss-onsite-in rss-offsite-in))
+ ((string-match "rdf" href)
+ (nnrss-match-macro
+ base-uri href rdf-onsite-in rdf-offsite-in))
+ ((string-match "xml" href)
+ (nnrss-match-macro
+ base-uri href xml-onsite-in xml-offsite-in))))
+ (append
rss-onsite-end rdf-onsite-end xml-onsite-end
rss-onsite-in rdf-onsite-in xml-onsite-in
rss-offsite-end rdf-offsite-end xml-offsite-end
@@ -670,23 +853,23 @@ whether they are `offsite' or `onsite'."
;; - offsite links containing any of the above
(let* ((base-uri (progn (string-match ".*://[^/]+/?" url)
(match-string 0 url)))
- (hrefs (nnrss-order-hrefs
+ (hrefs (nnrss-order-hrefs
base-uri (nnrss-extract-hrefs parsed-page)))
(rss-link nil))
- (while (and (eq rss-link nil) (not (eq hrefs nil)))
- (let ((href-data (nnrss-fetch (car hrefs))))
- (if (nnrss-rss-p href-data)
- (let* ((rss-ns (nnrss-get-namespace-prefix href-data
"http://purl.org/rss/1.0/")))
- (setq rss-link (nnrss-rss-title-description
- rss-ns href-data (car hrefs))))
- (setq hrefs (cdr hrefs)))))
- (if rss-link rss-link
+ (while (and (eq rss-link nil) (not (eq hrefs nil)))
+ (let ((href-data (nnrss-fetch (car hrefs))))
+ (if (nnrss-rss-p href-data)
+ (let* ((rss-ns (nnrss-get-namespace-prefix href-data
"http://purl.org/rss/1.0/")))
+ (setq rss-link (nnrss-rss-title-description
+ rss-ns href-data (car hrefs))))
+ (setq hrefs (cdr hrefs)))))
+ (if rss-link rss-link
;; 4. check syndic8
- (nnrss-find-rss-via-syndic8 url))))))))
+ (nnrss-find-rss-via-syndic8 url))))))))
(defun nnrss-find-rss-via-syndic8 (url)
- "query syndic8 for the rss feeds it has for the url."
+ "Query syndic8 for the rss feeds it has for URL."
(if (not (locate-library "xml-rpc"))
(progn
(message "XML-RPC is not available... not checking Syndic8.")
@@ -697,22 +880,22 @@ whether they are `offsite' or `onsite'."
'syndic8.FindSites
url)))
(when feedid
- (let* ((feedinfo (xml-rpc-method-call
+ (let* ((feedinfo (xml-rpc-method-call
"http://www.syndic8.com/xmlrpc.php"
'syndic8.GetFeedInfo
feedid))
(urllist
- (delq nil
+ (delq nil
(mapcar
(lambda (listinfo)
- (if (string-equal
+ (if (string-equal
(cdr (assoc "status" listinfo))
"Syndicated")
(cons
(cdr (assoc "sitename" listinfo))
(list
(cons 'title
- (cdr (assoc
+ (cdr (assoc
"sitename" listinfo)))
(cons 'href
(cdr (assoc
@@ -721,20 +904,20 @@ whether they are `offsite' or `onsite'."
(if (not (> (length urllist) 1))
(cdar urllist)
(let ((completion-ignore-case t)
- (selection
+ (selection
(mapcar (lambda (listinfo)
- (cons (cdr (assoc "sitename" listinfo))
- (string-to-int
+ (cons (cdr (assoc "sitename" listinfo))
+ (string-to-number
(cdr (assoc "feedid" listinfo)))))
feedinfo)))
- (cdr (assoc
+ (cdr (assoc
(completing-read
"Multiple feeds found. Select one: "
selection nil t) urllist)))))))))
(defun nnrss-rss-p (data)
- "Test if data is an RSS feed. Simply ensures that the first
-element is rss or rdf."
+ "Test if DATA is an RSS feed.
+Simply ensures that the first element is rss or rdf."
(or (eq (caar data) 'rss)
(eq (caar data) 'rdf:RDF)))
@@ -755,13 +938,13 @@ element is rss or rdf."
that gives the URI for which you want to retrieve the namespace
prefix), return the prefix."
(let* ((prefix (car (rassoc uri (cadar el))))
- (nslist (if prefix
+ (nslist (if prefix
(split-string (symbol-name prefix) ":")))
(ns (cond ((eq (length nslist) 1) ; no prefix given
"")
((eq (length nslist) 2) ; extract prefix
(cadr nslist)))))
- (if (and ns (not (eq ns "")))
+ (if (and ns (not (string= ns "")))
(concat ns ":")
ns)))
1.4 +25 -36 XEmacs/packages/xemacs-packages/gnus/lisp/nnslashdot.el
Index: nnslashdot.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnslashdot.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- nnslashdot.el 2004/09/28 02:21:19 1.3
+++ nnslashdot.el 2005/11/15 03:45:58 1.4
@@ -1,6 +1,8 @@
;;; nnslashdot.el --- interfacing with Slashdot
-;; Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -18,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -85,7 +87,7 @@
(nnslashdot-possibly-change-server group server)
(condition-case why
(unless gnus-nov-is-evil
- (nnslashdot-retrieve-headers-1 articles group))
+ (nnslashdot-retrieve-headers-1 articles group))
(search-failed (nnslashdot-lose why))))
(deffoo nnslashdot-retrieve-headers-1 (articles group)
@@ -140,41 +142,30 @@
(setq article (if (and article (< start article)) article start))
(goto-char point)
(while (re-search-forward
- "<a
name=\"\\([0-9]+\\)\"><\\(b\\|H4\\)>\\([^<]+\\)</\\(b\\|H4\\)>.*score:\\([^)]+\\))"
+ "<a
name=\"\\([0-9]+\\)\">\\([^<]+\\)</a>.*\n.*score:\\([^)]+\\))"
nil t)
(setq cid (match-string 1)
- subject (match-string 3)
- score (match-string 5))
+ subject (match-string 2)
+ score (match-string 3))
(unless (assq article (nth 4 entry))
(setcar (nthcdr 4 entry) (cons (cons article cid) (nth 4 entry)))
(setq changed t))
(when (string-match "^Re: *" subject)
(setq subject (concat "Re: " (substring subject (match-end 0)))))
- (setq subject (mm-url-decode-entities-string subject))
- (search-forward "<BR>")
- (cond
- ((looking-at
- "by[ \t\n]+<a[^>]+>\\([^<]+\\)</a>[
\t\n]*(\\(<[^>]+>\\)*\\([^<>)]+\\))")
- (goto-char (- (match-end 0) 5))
- (setq from (concat
- (mm-url-decode-entities-string (match-string 1))
- " <" (match-string 3) ">")))
- ((looking-at "by[ \t\n]+<a[^>]+>\\([^<(]+\\)
(\\([0-9]+\\))</a>")
- (goto-char (- (match-end 0) 5))
- (setq from (concat
- (mm-url-decode-entities-string (match-string 1))
- " <" (match-string 2) ">")))
- ((looking-at "by \\([^<>]*\\)[\t\n\r ]+on ")
- (goto-char (- (match-end 0) 5))
- (setq from (mm-url-decode-entities-string (match-string 1))))
- (t
- (setq from "")))
+ (setq subject (mm-url-decode-entities-string subject)
+ from "")
+ (when (re-search-forward "by[ \t\n]+<[^>]+>\\([^<(]+\\)" nil
t)
+ (setq from
+ (concat
+ (mm-url-decode-entities-string (match-string 1))
+ " <nobody(a)slashdot.org>")))
(search-forward "on ")
(setq date
(nnslashdot-date-to-date
- (buffer-substring (point) (progn (skip-chars-forward "^()<>\n\r")
(point)))))
- (setq lines (/ (abs (- (search-forward "<td")
- (search-forward "</td>")))
+ (buffer-substring
+ (point) (progn (skip-chars-forward "^()<>\n\r") (point)))))
+ (setq lines (/ (abs (- (search-forward "<div")
+ (search-forward "</div>")))
70))
(if (not
(re-search-forward ".*cid=\\([0-9]+\\)\">Parent</A>" nil
t))
@@ -253,23 +244,21 @@
(when (numberp article)
(if (= article 1)
(progn
- (re-search-forward
- "Posted by")
- (search-forward "<BR>")
+ (search-forward "Posted by")
+ (search-forward "<div class=\"intro\">")
(setq contents
(buffer-substring
(point)
(progn
- (re-search-forward
- "<IFRAME\\|<SCRIPT LANGUAGE=\"JAVASCRIPT\">\\|<!--
no ad 6 -->\\|< [ \t\r\n]*<A
HREF=\"\\(\\(http:\\)?//slashdot\\.org\\)?/article")
+ (search-forward "commentwrap")
(match-beginning 0)))))
(setq cid (cdr (assq article
(nth 4 (assoc group nnslashdot-groups)))))
(search-forward (format "<a name=\"%s\">" cid))
(setq contents
(buffer-substring
- (re-search-forward "<td[^>]*>")
- (search-forward "</td>")))))))
+ (search-forward "<div class=\"commentBody\">")
+ (search-forward "</div>")))))))
(search-failed (nnslashdot-lose why)))
(when contents
1.4 +6 -6 XEmacs/packages/xemacs-packages/gnus/lisp/nnsoup.el
Index: nnsoup.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnsoup.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- nnsoup.el 2004/09/28 02:21:19 1.3
+++ nnsoup.el 2005/11/15 03:45:58 1.4
@@ -1,7 +1,7 @@
;;; nnsoup.el --- SOUP access for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Masanobu UMEDA <umerin(a)flab.flab.fujitsu.junet>
@@ -21,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -752,9 +752,9 @@ backend for the messages.")
(let ((files (sort (directory-files nnsoup-directory t "IDX$")
(lambda (f1 f2)
(< (progn (string-match "/\\([0-9]+\\)\\." f1)
- (string-to-int (match-string 1 f1)))
+ (string-to-number (match-string 1 f1)))
(progn (string-match "/\\([0-9]+\\)\\." f2)
- (string-to-int (match-string 1 f2)))))))
+ (string-to-number (match-string 1 f2)))))))
active group lines ident elem min)
(set-buffer (get-buffer-create " *nnsoup work*"))
(while files
1.6 +5 -6 XEmacs/packages/xemacs-packages/gnus/lisp/nnspool.el
Index: nnspool.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnspool.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- nnspool.el 2005/03/13 00:23:36 1.5
+++ nnspool.el 2005/11/15 03:45:58 1.6
@@ -1,8 +1,7 @@
;;; nnspool.el --- spool access for GNU Emacs
;; Copyright (C) 1988, 1989, 1990, 1993, 1994, 1995, 1996, 1997, 1998,
-;; 2000, 2002, 2003
-;; Free Software Foundation, Inc.
+;; 2000, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin(a)flab.flab.fujitsu.junet>
;; Lars Magne Ingebrigtsen <larsi(a)gnus.org>
@@ -22,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -248,7 +247,7 @@ there.")
;; Fix by Sudish Joseph <joseph(a)cis.ohio-state.edu>
(when (setq dir (directory-files pathname nil "^[0-9]+$" t))
(setq dir
- (sort (mapcar (lambda (name) (string-to-int name)) dir) '<)))
+ (sort (mapcar (lambda (name) (string-to-number name)) dir) '<)))
(if dir
(nnheader-insert
"211 %d %d %d %s\n" (length dir) (car dir)
@@ -440,7 +439,7 @@ there.")
(goto-char (point-min))
(prog1
(when (looking-at "<[^>]+>[ \t]+[-0-9~]+[ \t]+\\([^
/\t\n]+\\)/\\([0-9]+\\)[ \t\n]")
- (cons (match-string 1) (string-to-int (match-string 2))))
+ (cons (match-string 1) (string-to-number (match-string 2))))
(kill-buffer (current-buffer)))))
(defun nnspool-find-file (file)
1.6 +21 -21 XEmacs/packages/xemacs-packages/gnus/lisp/nntp.el
Index: nntp.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nntp.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- nntp.el 2004/09/28 02:21:19 1.5
+++ nntp.el 2005/11/15 03:45:58 1.6
@@ -1,7 +1,8 @@
;;; nntp.el --- nntp access for Gnus
-;; Copyright (C) 1987, 1988, 1989, 1990, 1992, 1993, 1994, 1995, 1996,
-;; 1997, 1998, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 1988, 1989, 1990, 1992, 1993,
+;; 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002,
+;; 2003, 2004, 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -20,7 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+;; MA 02110-1301, USA.
;;; Commentary:
@@ -175,9 +177,6 @@ then use this hook to rsh to the remote
server there that you can connect to. See also
`nntp-open-connection-function'")
-(defvoo nntp-warn-about-losing-connection t
- "*If non-nil, beep when a server closes connection.")
-
(defvoo nntp-coding-system-for-read 'binary
"*Coding system to read from NNTP.")
@@ -253,7 +252,7 @@ noticing asynchronous data.")
(defvar nntp-async-timer nil)
(defvar nntp-async-process-list nil)
-(defvar nntp-ssl-program
+(defvar nntp-ssl-program
"openssl s_client -quiet -ssl3 -connect %s:%p"
"A string containing commands for SSL connections.
Within a string, %s is replaced with the server address and %p with
@@ -887,7 +886,7 @@ command whose response triggered the err
(if (numberp article) (int-to-string article) article))))
(deffoo nntp-request-group (group &optional server dont-check)
- (nntp-with-open-group
+ (nntp-with-open-group
nil server
(when (nntp-send-command "^[245].*\n" "GROUP" group)
(let ((entry (nntp-find-connection-entry nntp-server-buffer)))
@@ -1127,7 +1126,7 @@ password contained in '~/.nntp-authinfo'
(nntp-kill-buffer pbuffer))
(when (and (buffer-name pbuffer)
process)
- (process-kill-without-query process)
+ (gnus-set-process-query-on-exit-flag process nil)
(if (and (nntp-wait-for process "^2.*\n" buffer nil t)
(memq (process-status process) '(open run)))
(prog1
@@ -1147,20 +1146,21 @@ password contained in '~/.nntp-authinfo'
(defun nntp-open-network-stream (buffer)
(open-network-stream "nntpd" buffer nntp-address nntp-port-number))
-(autoload 'format-spec "format")
-(autoload 'format-spec-make "format")
-(autoload 'open-tls-stream "tls")
+(eval-and-compile
+ (autoload 'format-spec "format-spec")
+ (autoload 'format-spec-make "format-spec")
+ (autoload 'open-tls-stream "tls"))
(defun nntp-open-ssl-stream (buffer)
(let* ((process-connection-type nil)
- (proc (start-process "nntpd" buffer
+ (proc (start-process "nntpd" buffer
shell-file-name
shell-command-switch
- (format-spec nntp-ssl-program
+ (format-spec nntp-ssl-program
(format-spec-make
?s nntp-address
?p nntp-port-number)))))
- (process-kill-without-query proc)
+ (gnus-set-process-query-on-exit-flag proc nil)
(save-excursion
(set-buffer buffer)
(let ((nntp-connection-alist (list proc buffer nil)))
@@ -1171,7 +1171,7 @@ password contained in '~/.nntp-authinfo'
(defun nntp-open-tls-stream (buffer)
(let ((proc (open-tls-stream "nntpd" buffer nntp-address
nntp-port-number)))
- (process-kill-without-query proc)
+ (gnus-set-process-query-on-exit-flag proc nil)
(save-excursion
(set-buffer buffer)
(let ((nntp-connection-alist (list proc buffer nil)))
@@ -1314,7 +1314,7 @@ password contained in '~/.nntp-authinfo'
;; that the server has closed the connection. This MUST be
;; handled here as the buffer restored by the save-excursion may
;; be the process's former output buffer (i.e. now killed)
- (or (and process
+ (or (and process
(memq (process-status process) '(open run)))
(nntp-report "Server closed connection"))))
@@ -1497,8 +1497,8 @@ password contained in '~/.nntp-authinfo'
(when (<= count 1)
(goto-char (point-min))
(when (re-search-forward "^[0-9][0-9][0-9] .*\n\\([0-9]+\\)" nil
t)
- (let ((low-limit (string-to-int
- (buffer-substring (match-beginning 1)
+ (let ((low-limit (string-to-number
+ (buffer-substring (match-beginning 1)
(match-end 1)))))
(while (and articles (<= (car articles) low-limit))
(setq articles (cdr articles))))))
@@ -1569,7 +1569,7 @@ password contained in '~/.nntp-authinfo'
(goto-char (point-min))
;; We first find the number by looking at the status line.
(let ((number (and (looking-at "2[0-9][0-9] +\\([0-9]+\\) ")
- (string-to-int
+ (string-to-number
(buffer-substring (match-beginning 1)
(match-end 1)))))
newsgroups xref)
@@ -1607,7 +1607,7 @@ password contained in '~/.nntp-authinfo'
"\\([^ :]+\\):\\([0-9]+\\)")
xref))
(setq group (match-string 1 xref)
- number (string-to-int (match-string 2 xref))))
+ number (string-to-number (match-string 2 xref))))
((and (setq newsgroups
(mail-fetch-field "newsgroups"))
(not (string-match "," newsgroups)))
1.4 +5 -3 XEmacs/packages/xemacs-packages/gnus/lisp/nnultimate.el
Index: nnultimate.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnultimate.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- nnultimate.el 2004/09/28 02:21:19 1.3
+++ nnultimate.el 2005/11/15 03:45:59 1.4
@@ -1,6 +1,7 @@
;;; nnultimate.el --- interfacing with the Ultimate Bulletin Board system
-;; Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -39,6 +40,7 @@
(require 'mm-util)
(require 'mm-url)
(require 'nnweb)
+(require 'parse-time)
(autoload 'w3-parse-buffer "w3-parse")
(nnoo-declare nnultimate)
1.4 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/nnvirtual.el
Index: nnvirtual.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnvirtual.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- nnvirtual.el 2004/09/28 02:21:19 1.3
+++ nnvirtual.el 2005/11/15 03:45:59 1.4
@@ -1,7 +1,8 @@
;;; nnvirtual.el --- virtual newsgroups access for Gnus
-;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+;; 2003, 2004, 2005 Free Software Foundation, Inc.
+
;; Author: David Moore <dmoore(a)ucsd.edu>
;; Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Masanobu UMEDA <umerin(a)flab.flab.fujitsu.junet>
@@ -21,8 +22,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.4 +5 -3 XEmacs/packages/xemacs-packages/gnus/lisp/nnwarchive.el
Index: nnwarchive.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnwarchive.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- nnwarchive.el 2004/09/28 02:21:20 1.3
+++ nnwarchive.el 2005/11/15 03:45:59 1.4
@@ -1,6 +1,8 @@
;;; nnwarchive.el --- interfacing with web archives
-;; Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Shenghuo Zhu <zsh(a)cs.rochester.edu>
;; Keywords: news egroups mail-archive
@@ -18,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.6 +34 -33 XEmacs/packages/xemacs-packages/gnus/lisp/nnweb.el
Index: nnweb.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnweb.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- nnweb.el 2005/03/13 00:23:36 1.5
+++ nnweb.el 2005/11/15 03:45:59 1.6
@@ -1,7 +1,8 @@
;;; nnweb.el --- retrieving articles via web search engines
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -19,13 +20,19 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
;; Note: You need to have `w3' installed for some functions to work.
+;; FIXME: Due to changes in the HTML output of Google Groups and Gmane, stuff
+;; related to web groups (gnus-group-make-web-group) doesn't work anymore.
+
+;; Fetching an article by MID (cf. gnus-refer-article-method) over Google
+;; Groups should work.
+
;;; Code:
(eval-when-compile (require 'cl))
@@ -53,13 +60,13 @@ Valid types include `google', `dejanews'
(defvar nnweb-type-definition
'((google
- (article . ignore)
- (id . "http://groups.google.de/groups?selm=%s&output=gplain")
+ (id .
"http://www.google.com/groups?as_umsgid=%s&hl=en&dmode=source")
+ (article . nnweb-google-wash-article)
(reference . identity)
(map . nnweb-google-create-mapping)
(search . nnweb-google-search)
- (address . "http://groups.google.de/groups")
- (base . "http://groups.google.de")
+ (address . "http://groups.google.com/groups")
+ (base . "http://groups.google.com")
(identifier . nnweb-google-identity))
(dejanews ;; alias of google
(article . ignore)
@@ -305,35 +312,29 @@ Valid types include `google', `dejanews'
(current-buffer))))))
;;;
-;;; Deja bought by
google.com
+;;;
groups.google.com
;;;
(defun nnweb-google-wash-article ()
- (let ((case-fold-search t) url)
- (goto-char (point-min))
- (re-search-forward "^<pre>" nil t)
- (narrow-to-region (point-min) (point))
- (search-backward "<table " nil t 2)
- (delete-region (point-min) (point))
- (if (re-search-forward "Search Result [0-9]+" nil t)
- (replace-match ""))
- (if (re-search-forward "View complete thread ([0-9]+ articles?)" nil t)
- (replace-match ""))
+ ;; We have Google's masked e-mail addresses here. :-/
+ (let ((case-fold-search t))
(goto-char (point-min))
- (while (search-forward "<br>" nil t)
- (replace-match "\n"))
- (mm-url-remove-markup)
- (goto-char (point-min))
- (while (re-search-forward "^[ \t]*\n" nil t)
- (replace-match ""))
- (goto-char (point-max))
- (insert "\n")
- (widen)
- (narrow-to-region (point) (point-max))
- (search-forward "</pre>" nil t)
- (delete-region (point) (point-max))
- (mm-url-remove-markup)
- (widen)))
+ (if (save-excursion
+ (or (re-search-forward "The requested message.*could not be found."
+ nil t)
+ (not (and (re-search-forward "^<pre>" nil t)
+ (re-search-forward "^</pre>" nil t)))))
+ ;; FIXME: Don't know how to indicate "not found".
+ ;; Should this function throw an error? --rsteib
+ (progn
+ (gnus-message 3 "Requested article not found")
+ (erase-buffer))
+ (delete-region (point-min)
+ (1+ (re-search-forward "^<pre>" nil t)))
+ (goto-char (point-min))
+ (delete-region (- (re-search-forward "^</pre>" nil t) (length
"</pre>"))
+ (point-max))
+ (mm-url-decode-entities))))
(defun nnweb-google-parse-1 (&optional Message-ID)
(let ((i 0)
1.4 +4 -3 XEmacs/packages/xemacs-packages/gnus/lisp/nnwfm.el
Index: nnwfm.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/nnwfm.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- nnwfm.el 2004/09/28 02:21:20 1.3
+++ nnwfm.el 2005/11/15 03:45:59 1.4
@@ -1,6 +1,7 @@
;;; nnwfm.el --- interfacing with a web forum
-;; Copyright (C) 2000 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news
@@ -18,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.4 +2 -2 XEmacs/packages/xemacs-packages/gnus/lisp/parse-time.el
Index: parse-time.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/parse-time.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- parse-time.el 2004/09/28 02:21:20 1.3
+++ parse-time.el 2005/11/15 03:45:59 1.4
@@ -19,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.5 +11 -15 XEmacs/packages/xemacs-packages/gnus/lisp/qp.el
Index: qp.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/qp.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- qp.el 2004/09/28 02:21:20 1.4
+++ qp.el 2005/11/15 03:45:59 1.5
@@ -1,6 +1,7 @@
;;; qp.el --- Quoted-Printable functions
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: mail, extensions
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -68,9 +69,9 @@ them into characters should be done sepa
(cond ((eq (char-after (1+ (point))) ?\n)
(delete-char 2))
((looking-at "=[0-9A-F][0-9A-F]")
- (let ((byte (string-to-int (buffer-substring (1+ (point))
- (+ 3 (point)))
- 16)))
+ (let ((byte (string-to-number (buffer-substring (1+ (point))
+ (+ 3 (point)))
+ 16)))
(mm-insert-byte byte 1)
(delete-char 3)))
(t
@@ -100,20 +101,15 @@ You should probably avoid non-ASCII char
If `mm-use-ultra-safe-encoding' is set, fold lines unconditionally and
encode lines starting with \"From\"."
(interactive "r")
- (save-excursion
- (goto-char from)
- (if (fboundp 'string-to-multibyte) ; Emacs 22
- (if (re-search-forward (string-to-multibyte "[^\x0-\x7f\x80-\xff]")
- to t)
- ;; Fixme: This is somewhat misleading.
- (error "Multibyte character in QP encoding region"))
- (if (re-search-forward (mm-string-as-multibyte "[^\0-\377]") to t)
- (error "Multibyte character in QP encoding region"))))
(unless class
;; Avoid using 8bit characters. = is \075.
;; Equivalent to "^\000-\007\013\015-\037\200-\377="
(setq class "\010-\012\014\040-\074\076-\177"))
(save-excursion
+ (goto-char from)
+ (if (re-search-forward (mm-string-to-multibyte "[^\x0-\x7f\x80-\xff]")
+ to t)
+ (error "Multibyte character in QP encoding region"))
(save-restriction
(narrow-to-region from to)
;; Encode all the non-ascii and control characters.
1.4 +9 -3 XEmacs/packages/xemacs-packages/gnus/lisp/rfc1843.el
Index: rfc1843.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/rfc1843.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- rfc1843.el 2004/09/28 02:21:20 1.3
+++ rfc1843.el 2005/11/15 03:45:59 1.4
@@ -1,6 +1,8 @@
;;; rfc1843.el --- HZ (rfc1843) decoding
-;; Copyright (c) 1998, 1999, 2000, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Shenghuo Zhu <zsh(a)cs.rochester.edu>
;; Keywords: news HZ HZ+ mail i18n
@@ -18,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -34,6 +36,10 @@
(eval-when-compile (require 'cl))
(require 'mm-util)
+
+(defvar gnus-decode-encoded-word-function)
+(defvar gnus-decode-header-function)
+(defvar gnus-newsgroup-name)
(defvar rfc1843-word-regexp
"~\\({\\([\041-\167][\041-\176]\\| \\)+\\)\\(~}\\|$\\)")
1.4 +4 -3 XEmacs/packages/xemacs-packages/gnus/lisp/rfc2045.el
Index: rfc2045.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/rfc2045.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- rfc2045.el 2004/09/28 02:21:20 1.3
+++ rfc2045.el 2005/11/15 03:46:00 1.4
@@ -1,6 +1,7 @@
;;; rfc2045.el --- Functions for decoding rfc2045 headers
-;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; This file is part of GNU Emacs.
@@ -17,8 +18,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;; RFC 2045 is: "Multipurpose Internet Mail Extensions (MIME) Part
;; One: Format of Internet Message Bodies".
1.7 +505 -292 XEmacs/packages/xemacs-packages/gnus/lisp/rfc2047.el
Index: rfc2047.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/rfc2047.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- rfc2047.el 2005/03/13 00:23:37 1.6
+++ rfc2047.el 2005/11/15 03:46:00 1.7
@@ -1,7 +1,7 @@
;;; rfc2047.el --- functions for encoding and decoding rfc2047 messages
-;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; MORIOKA Tomohiko <morioka(a)jaist.ac.jp>
@@ -19,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -119,12 +119,15 @@ The values can be:
Valid encodings are nil, `Q' and `B'. These indicate binary (no) encoding,
quoted-printable and base64 respectively.")
-(defvar rfc2047-encoding-function-alist
- '((Q . rfc2047-q-encode-region)
- (B . rfc2047-b-encode-region)
- (nil . ignore))
+(defvar rfc2047-encode-function-alist
+ '((Q . rfc2047-q-encode-string)
+ (B . rfc2047-b-encode-string)
+ (nil . identity))
"Alist of RFC2047 encodings to encoding functions.")
+(defvar rfc2047-encode-encoded-words t
+ "Whether encoded words should be encoded again.")
+
;;;
;;; Functions for encoding RFC2047 messages
;;;
@@ -166,7 +169,7 @@ This is either `base64' or `quoted-print
(save-restriction
(rfc2047-narrow-to-field)
(re-search-forward ":[ \t\n]*" nil t)
- (buffer-substring (point) (point-max)))))
+ (buffer-substring-no-properties (point) (point-max)))))
(defvar rfc2047-encoding-type 'address-mime
"The type of encoding done by `rfc2047-encode-region'.
@@ -186,24 +189,25 @@ Should be called narrowed to the head of
(rfc2047-narrow-to-field)
(if (not (rfc2047-encodable-p))
(prog1
- (if (and (eq (mm-body-7-or-8) '8bit)
- (mm-multibyte-p)
- (mm-coding-system-p
- (car message-posting-charset)))
- ;; 8 bit must be decoded.
- (mm-encode-coding-region
- (point-min) (point-max)
- (mm-charset-to-coding-system
- (car message-posting-charset))))
+ (if (and (eq (mm-body-7-or-8) '8bit)
+ (mm-multibyte-p)
+ (mm-coding-system-p
+ (car message-posting-charset)))
+ ;; 8 bit must be decoded.
+ (mm-encode-coding-region
+ (point-min) (point-max)
+ (mm-charset-to-coding-system
+ (car message-posting-charset))))
;; No encoding necessary, but folding is nice
- (rfc2047-fold-region
- (save-excursion
- (goto-char (point-min))
- (skip-chars-forward "^:")
- (when (looking-at ": ")
- (forward-char 2))
- (point))
- (point-max)))
+ (when nil
+ (rfc2047-fold-region
+ (save-excursion
+ (goto-char (point-min))
+ (skip-chars-forward "^:")
+ (when (looking-at ": ")
+ (forward-char 2))
+ (point))
+ (point-max))))
;; We found something that may perhaps be encoded.
(setq method nil
alist rfc2047-header-encoding-alist)
@@ -213,7 +217,6 @@ Should be called narrowed to the head of
(eq (car elem) t))
(setq alist nil
method (cdr elem))))
- (goto-char (point-min))
(re-search-forward "^[^:]+: *" nil t)
(cond
((eq method 'address-mime)
@@ -267,8 +270,13 @@ The buffer may be narrowed."
(require 'message) ; for message-posting-charset
(let ((charsets
(mm-find-mime-charset-region (point-min) (point-max))))
- (and charsets
- (not (equal charsets (list (car message-posting-charset)))))))
+ (goto-char (point-min))
+ (or (and rfc2047-encode-encoded-words
+ (prog1
+ (search-forward "=?" nil t)
+ (goto-char (point-min))))
+ (and charsets
+ (not (equal charsets (list (car message-posting-charset))))))))
;; Use this syntax table when parsing into regions that may need
;; encoding. Double quotes are string delimiters, backslash is
@@ -292,8 +300,8 @@ The buffer may be narrowed."
table))))
(modify-syntax-entry ?\\ "\\" table)
(modify-syntax-entry ?\" "\"" table)
- (modify-syntax-entry ?\( "." table)
- (modify-syntax-entry ?\) "." table)
+ (modify-syntax-entry ?\( "(" table)
+ (modify-syntax-entry ?\) ")" table)
(modify-syntax-entry ?\< "." table)
(modify-syntax-entry ?\> "." table)
(modify-syntax-entry ?\[ "." table)
@@ -310,183 +318,341 @@ By default, the region is treated as con
Dynamically bind `rfc2047-encoding-type' to change that."
(save-restriction
(narrow-to-region b e)
- (if (eq 'mime rfc2047-encoding-type)
- ;; Simple case. Treat as single word after any initial ASCII
- ;; part and before any tailing ASCII part. The leading ASCII
- ;; is relevant for instance in Subject headers with `Re:' for
- ;; interoperability with non-MIME clients, and we might as
- ;; well avoid the tail too.
- (progn
- (goto-char (point-min))
- ;; Does it need encoding?
- (skip-chars-forward "\000-\177")
- (unless (eobp)
- (skip-chars-backward "^ \n") ; beginning of space-delimited word
- (rfc2047-encode (point) (progn
- (goto-char e)
- (skip-chars-backward "\000-\177")
- (skip-chars-forward "^ \n")
- ;; end of space-delimited word
- (point)))))
- ;; `address-mime' case -- take care of quoted words, comments.
- (with-syntax-table rfc2047-syntax-table
- (let ((start) ; start of current token
- end ; end of current token
- ;; Whether there's an encoded word before the current
- ;; token, either immediately or separated by space.
- last-encoded)
+ (let ((encodable-regexp (if rfc2047-encode-encoded-words
+ "[^\000-\177]+\\|=\\?"
+ "[^\000-\177]+"))
+ start ; start of current token
+ end begin csyntax
+ ;; Whether there's an encoded word before the current token,
+ ;; either immediately or separated by space.
+ last-encoded
+ (orig-text (buffer-substring-no-properties b e)))
+ (if (eq 'mime rfc2047-encoding-type)
+ ;; Simple case. Continuous words in which all those contain
+ ;; non-ASCII characters are encoded collectively. Encoding
+ ;; ASCII words, including `Re:' used in Subject headers, is
+ ;; avoided for interoperability with non-MIME clients and
+ ;; for making it easy to find keywords.
+ (progn
+ (goto-char (point-min))
+ (while (progn (skip-chars-forward " \t\n")
+ (not (eobp)))
+ (setq start (point))
+ (while (and (looking-at "[ \t\n]*\\([^ \t\n]+\\)")
+ (progn
+ (setq end (match-end 0))
+ (re-search-forward encodable-regexp end t)))
+ (goto-char end))
+ (if (> (point) start)
+ (rfc2047-encode start (point))
+ (goto-char end))))
+ ;; `address-mime' case -- take care of quoted words, comments.
+ (with-syntax-table rfc2047-syntax-table
(goto-char (point-min))
- (condition-case nil ; in case of unbalanced quotes
+ (condition-case err ; in case of unbalanced quotes
;; Look for rfc2822-style: sequences of atoms, quoted
;; strings, specials, whitespace. (Specials mustn't be
;; encoded.)
(while (not (eobp))
- (setq start (point))
;; Skip whitespace.
- (unless (= 0 (skip-chars-forward " \t\n"))
- (setq start (point)))
+ (skip-chars-forward " \t\n")
+ (setq start (point))
(cond
((not (char-after))) ; eob
;; else token start
- ((eq ?\" (char-syntax (char-after)))
+ ((eq ?\" (setq csyntax (char-syntax (char-after))))
;; Quoted word.
(forward-sexp)
(setq end (point))
;; Does it need encoding?
(goto-char start)
- (skip-chars-forward "\000-\177" end)
- (if (= end (point))
- (setq last-encoded nil)
- ;; It needs encoding. Strip the quotes first,
- ;; since encoded words can't occur in quotes.
- (goto-char end)
- (delete-backward-char 1)
- (goto-char start)
- (delete-char 1)
- (when last-encoded
- ;; There was a preceding quoted word. We need
- ;; to include any separating whitespace in this
- ;; word to avoid it getting lost.
- (skip-chars-backward " \t")
- ;; A space is needed between the encoded words.
- (insert ? )
- (setq start (point)
- end (1+ end)))
- ;; Adjust the end position for the deleted quotes.
- (rfc2047-encode start (- end 2))
- (setq last-encoded t))) ; record that it was encoded
- ((eq ?. (char-syntax (char-after)))
+ (if (re-search-forward encodable-regexp end 'move)
+ ;; It needs encoding. Strip the quotes first,
+ ;; since encoded words can't occur in quotes.
+ (progn
+ (goto-char end)
+ (delete-backward-char 1)
+ (goto-char start)
+ (delete-char 1)
+ (when last-encoded
+ ;; There was a preceding quoted word. We need
+ ;; to include any separating whitespace in this
+ ;; word to avoid it getting lost.
+ (skip-chars-backward " \t")
+ ;; A space is needed between the encoded words.
+ (insert ? )
+ (setq start (point)
+ end (1+ end)))
+ ;; Adjust the end position for the deleted quotes.
+ (rfc2047-encode start (- end 2))
+ (setq last-encoded t)) ; record that it was encoded
+ (setq last-encoded nil)))
+ ((eq ?. csyntax)
;; Skip other delimiters, but record that they've
;; potentially separated quoted words.
(forward-char)
(setq last-encoded nil))
+ ((eq ?\) csyntax)
+ (error "Unbalanced parentheses"))
+ ((eq ?\( csyntax)
+ ;; Look for the end of parentheses.
+ (forward-list)
+ ;; Encode text as an unstructured field.
+ (let ((rfc2047-encoding-type 'mime))
+ (rfc2047-encode-region (1+ start) (1- (point))))
+ (skip-chars-forward ")"))
(t ; normal token/whitespace sequence
;; Find the end.
- (forward-word 1)
- (skip-chars-backward " \t")
+ ;; Skip one ASCII word, or encode continuous words
+ ;; in which all those contain non-ASCII characters.
+ (setq end nil)
+ (while (not (or end (eobp)))
+ (when (looking-at "[\000-\177]+")
+ (setq begin (point)
+ end (match-end 0))
+ (when (progn
+ (while (and (or (re-search-forward
+ "[ \t\n]\\|\\Sw" end 'move)
+ (setq end nil))
+ (eq ?\\ (char-syntax (char-before))))
+ ;; Skip backslash-quoted characters.
+ (forward-char))
+ end)
+ (setq end (match-beginning 0))
+ (if rfc2047-encode-encoded-words
+ (progn
+ (goto-char begin)
+ (when (search-forward "=?" end 'move)
+ (goto-char (match-beginning 0))
+ (setq end nil)))
+ (goto-char end))))
+ ;; Where the value nil of `end' means there may be
+ ;; text to have to be encoded following the point.
+ ;; Otherwise, the point reached to the end of ASCII
+ ;; words separated by whitespace or a special char.
+ (unless end
+ (when (looking-at encodable-regexp)
+ (goto-char (setq begin (match-end 0)))
+ (while (and (looking-at "[ \t\n]+\\([^ \t\n]+\\)")
+ (setq end (match-end 0))
+ (progn
+ (while (re-search-forward
+ encodable-regexp end t))
+ (< begin (point)))
+ (goto-char begin)
+ (or (not (re-search-forward "\\Sw" end t))
+ (progn
+ (goto-char (match-beginning 0))
+ nil)))
+ (goto-char end))
+ (when (looking-at "[^ \t\n]+")
+ (setq end (match-end 0))
+ (if (re-search-forward "\\Sw+" end t)
+ ;; There are special characters better
+ ;; to be encoded so that MTAs may parse
+ ;; them safely.
+ (cond ((= end (point)))
+ ((looking-at (concat "\\sw*\\("
+ encodable-regexp
+ "\\)"))
+ (setq end nil))
+ (t
+ (goto-char (1- (match-end 0)))
+ (unless (= (point) (match-beginning 0))
+ ;; Separate encodable text and
+ ;; delimiter.
+ (insert " "))))
+ (goto-char end)
+ (skip-chars-forward " \t\n")
+ (if (and (looking-at "[^ \t\n]+")
+ (string-match encodable-regexp
+ (match-string 0)))
+ (setq end nil)
+ (goto-char end)))))))
+ (skip-chars-backward " \t\n")
(setq end (point))
- ;; Deal with encoding and leading space as for
- ;; quoted words.
(goto-char start)
- (skip-chars-forward "\000-\177" end)
- (if (= end (point))
- (setq last-encoded nil)
- (when last-encoded
- (goto-char start)
- (skip-chars-backward " \t")
- (insert ? )
- (setq start (point)
- end (1+ end)))
- (rfc2047-encode start end)
- (setq last-encoded t)))))
+ (if (re-search-forward encodable-regexp end 'move)
+ (progn
+ (unless (memq (char-before start) '(nil ?\t ? ))
+ (if (progn
+ (goto-char start)
+ (skip-chars-backward "^ \t\n")
+ (and (looking-at "\\Sw+")
+ (= (match-end 0) start)))
+ ;; Also encode bogus delimiters.
+ (setq start (point))
+ ;; Separate encodable text and delimiter.
+ (goto-char start)
+ (insert " ")
+ (setq start (1+ start)
+ end (1+ end))))
+ (rfc2047-encode start end)
+ (setq last-encoded t))
+ (setq last-encoded nil)))))
(error
- (error "Invalid data for rfc2047 encoding: %s"
- (buffer-substring b e)))))))
- (rfc2047-fold-region b (point))))
+ (if (or debug-on-quit debug-on-error)
+ (signal (car err) (cdr err))
+ (error "Invalid data for rfc2047 encoding: %s"
+ (mm-replace-in-string orig-text "[ \t\n]+" " "))))))))
+ (rfc2047-fold-region b (point))
+ (goto-char (point-max))))
(defun rfc2047-encode-string (string)
"Encode words in STRING.
By default, the string is treated as containing addresses (see
`rfc2047-encoding-type')."
- (with-temp-buffer
+ (mm-with-multibyte-buffer
(insert string)
(rfc2047-encode-region (point-min) (point-max))
(buffer-string)))
+(defvar rfc2047-encode-max-chars 76
+ "Maximum characters of each header line that contain encoded-words.
+If it is nil, encoded-words will not be folded. Too small value may
+cause an error. Don't change this for no particular reason.")
+
+(defun rfc2047-encode-1 (column string cs encoder start crest tail
+ &optional eword)
+ "Subroutine used by `rfc2047-encode'."
+ (cond ((string-equal string "")
+ (or eword ""))
+ ((not rfc2047-encode-max-chars)
+ (concat start
+ (funcall encoder (if cs
+ (mm-encode-coding-string string cs)
+ string))
+ "?="))
+ ((>= column rfc2047-encode-max-chars)
+ (when eword
+ (cond ((string-match "\n[ \t]+\\'" eword)
+ ;; Reomove a superfluous empty line.
+ (setq eword (substring eword 0 (match-beginning 0))))
+ ((string-match "(+\\'" eword)
+ ;; Break the line before the open parenthesis.
+ (setq crest (concat crest (match-string 0 eword))
+ eword (substring eword 0 (match-beginning 0))))))
+ (rfc2047-encode-1 (length crest) string cs encoder start " " tail
+ (concat eword "\n" crest)))
+ (t
+ (let ((index 0)
+ (limit (1- (length string)))
+ (prev "")
+ next len)
+ (while (and prev
+ (<= index limit))
+ (setq next (concat start
+ (funcall encoder
+ (if cs
+ (mm-encode-coding-string
+ (substring string 0 (1+ index))
+ cs)
+ (substring string 0 (1+ index))))
+ "?=")
+ len (+ column (length next)))
+ (if (> len rfc2047-encode-max-chars)
+ (setq next prev
+ prev nil)
+ (if (or (< index limit)
+ (<= (+ len (or (string-match "\n" tail)
+ (length tail)))
+ rfc2047-encode-max-chars))
+ (setq prev next
+ index (1+ index))
+ (if (string-match "\\`)+" tail)
+ ;; Break the line after the close parenthesis.
+ (setq tail (concat (substring tail 0 (match-end 0))
+ "\n "
+ (substring tail (match-end 0)))
+ prev next
+ index (1+ index))
+ (setq next prev
+ prev nil)))))
+ (if (> index limit)
+ (concat eword next tail)
+ (if (= 0 index)
+ (if (and eword
+ (string-match "(+\\'" eword))
+ (setq crest (concat crest (match-string 0 eword))
+ eword (substring eword 0 (match-beginning 0)))
+ (setq eword (concat eword next)))
+ (setq crest " "
+ eword (concat eword next)))
+ (when (string-match "\n[ \t]+\\'" eword)
+ ;; Reomove a superfluous empty line.
+ (setq eword (substring eword 0 (match-beginning 0))))
+ (rfc2047-encode-1 (length crest) (substring string index)
+ cs encoder start " " tail
+ (concat eword "\n" crest)))))))
+
(defun rfc2047-encode (b e)
"Encode the word(s) in the region B to E.
-By default, the region is treated as containing addresses (see
-`rfc2047-encoding-type')."
- (let* ((mime-charset (mm-find-mime-charset-region b e))
- (cs (if (> (length mime-charset) 1)
- ;; Fixme: Instead of this, try to break region into
- ;; parts that can be encoded separately.
- (error "Can't rfc2047-encode `%s'"
- (buffer-substring b e))
- (setq mime-charset (car mime-charset))
- (mm-charset-to-coding-system mime-charset)))
- ;; Fixme: Better, calculate the number of non-ASCII
- ;; characters, at least for 8-bit charsets.
- (encoding (or (cdr (assq mime-charset
+Point moves to the end of the region."
+ (let ((mime-charset (or (mm-find-mime-charset-region b e) (list 'us-ascii)))
+ cs encoding tail crest eword)
+ (cond ((> (length mime-charset) 1)
+ (error "Can't rfc2047-encode `%s'"
+ (buffer-substring-no-properties b e)))
+ ((= (length mime-charset) 1)
+ (setq mime-charset (car mime-charset)
+ cs (mm-charset-to-coding-system mime-charset))
+ (unless (and (mm-multibyte-p)
+ (mm-coding-system-p cs))
+ (setq cs nil))
+ (save-restriction
+ (narrow-to-region b e)
+ (setq encoding
+ (or (cdr (assq mime-charset
rfc2047-charset-encoding-alist))
;; For the charsets that don't have a preferred
;; encoding, choose the one that's shorter.
- (save-restriction
- (narrow-to-region b e)
- (if (eq (rfc2047-qp-or-base64) 'base64)
- 'B
- 'Q))))
- (start (concat
- "=?" (downcase (symbol-name mime-charset)) "?"
- (downcase (symbol-name encoding)) "?"))
- (factor (case mime-charset
- ((iso-8859-5 iso-8859-7 iso-8859-8 koi8-r) 1)
- ((big5 gb2312 euc-kr) 2)
- (utf-8 4)
- (t 8)))
- (pre (- b (save-restriction
- (widen)
- (rfc2047-point-at-bol))))
- ;; encoded-words must not be longer than 75 characters,
- ;; including charset, encoding etc. This leaves us with
- ;; 75 - (length start) - 2 - 2 characters. The last 2 is for
- ;; possible base64 padding. In the worst case (iso-2022-*)
- ;; each character expands to 8 bytes which is expanded by a
- ;; factor of 4/3 by base64 encoding.
- (length (floor (- 75 (length start) 4) (* factor (/ 4.0 3.0))))
- ;; Limit line length to 76 characters.
- (length1 (max 1 (floor (- 76 (length start) 4 pre)
- (* factor (/ 4.0 3.0)))))
- (first t))
- (if mime-charset
- (save-restriction
- (narrow-to-region b e)
- (when (eq encoding 'B)
- ;; break into lines before encoding
- (goto-char (point-min))
- (while (not (eobp))
- (if first
- (progn
- (goto-char (min (point-max) (+ length1 (point))))
- (setq first nil))
- (goto-char (min (point-max) (+ length (point)))))
- (unless (eobp)
- (insert ?\n)))
- (setq first t))
- (if (and (mm-multibyte-p)
- (mm-coding-system-p cs))
- (mm-encode-coding-region (point-min) (point-max) cs))
- (funcall (cdr (assq encoding rfc2047-encoding-function-alist))
- (point-min) (point-max))
- (goto-char (point-min))
- (while (not (eobp))
- (unless first
- (insert ? ))
- (setq first nil)
- (insert start)
- (end-of-line)
- (insert "?=")
- (forward-line 1))))))
+ (if (eq (rfc2047-qp-or-base64) 'base64)
+ 'B
+ 'Q)))
+ (widen)
+ (goto-char e)
+ (skip-chars-forward "^ \t\n")
+ ;; `tail' may contain a close parenthesis.
+ (setq tail (buffer-substring-no-properties e (point)))
+ (goto-char b)
+ (setq b (point-marker)
+ e (set-marker (make-marker) e))
+ (rfc2047-fold-region (rfc2047-point-at-bol) b)
+ (goto-char b)
+ (skip-chars-backward "^ \t\n")
+ (unless (= 0 (skip-chars-backward " \t"))
+ ;; `crest' may contain whitespace and an open parenthesis.
+ (setq crest (buffer-substring-no-properties (point) b)))
+ (setq eword (rfc2047-encode-1
+ (- b (rfc2047-point-at-bol))
+ (mm-replace-in-string
+ (buffer-substring-no-properties b e)
+ "\n\\([ \t]?\\)" "\\1")
+ cs
+ (or (cdr (assq encoding
+ rfc2047-encode-function-alist))
+ 'identity)
+ (concat "=?" (downcase (symbol-name mime-charset))
+ "?" (upcase (symbol-name encoding)) "?")
+ (or crest " ")
+ tail))
+ (delete-region (if (eq (aref eword 0) ?\n)
+ (if (bolp)
+ ;; The line was folded before encoding.
+ (1- (point))
+ (point))
+ (goto-char b))
+ (+ e (length tail)))
+ ;; `eword' contains `crest' and `tail'.
+ (insert eword)
+ (set-marker b nil)
+ (set-marker e nil)
+ (unless (or (/= 0 (length tail))
+ (eobp)
+ (looking-at "[ \t\n)]"))
+ (insert " "))))
+ (t
+ (goto-char e)))))
(defun rfc2047-fold-field ()
"Fold the current header field."
@@ -512,6 +678,7 @@ By default, the region is treated as con
(goto-char (or break qword-break))
(setq break nil
qword-break nil)
+ (skip-chars-backward " \t")
(if (looking-at "[ \t]")
(insert ?\n)
(insert "\n "))
@@ -533,10 +700,8 @@ By default, the region is treated as con
(forward-char 1))
((memq (char-after) '(? ?\t))
(skip-chars-forward " \t")
- (if first
- ;; Don't break just after the header name.
- (setq first nil)
- (setq break (1- (point)))))
+ (unless first ;; Don't break just after the header name.
+ (setq break (point))))
((not break)
(if (not (looking-at "=\\?[^=]"))
(if (eq (char-after) ?=)
@@ -547,15 +712,17 @@ By default, the region is treated as con
(setq qword-break (point)))
(skip-chars-forward "^ \t\n\r")))
(t
- (skip-chars-forward "^ \t\n\r"))))
+ (skip-chars-forward "^ \t\n\r")))
+ (setq first nil))
(when (and (or break qword-break)
(> (- (point) bol) 76))
(goto-char (or break qword-break))
(setq break nil
qword-break nil)
- (if (looking-at "[ \t]")
- (insert ?\n)
- (insert "\n "))
+ (if (or (> 0 (skip-chars-backward " \t"))
+ (looking-at "[ \t]"))
+ (insert ?\n)
+ (insert "\n "))
(setq bol (1- (point)))
;; Don't break before the first non-LWSP characters.
(skip-chars-forward " \t")
@@ -590,48 +757,48 @@ By default, the region is treated as con
(setq eol (rfc2047-point-at-eol))
(forward-line 1)))))
-(defun rfc2047-b-encode-region (b e)
- "Base64-encode the header contained in region B to E."
- (save-restriction
- (narrow-to-region (goto-char b) e)
- (while (not (eobp))
- (base64-encode-region (point) (progn (end-of-line) (point)) t)
- (if (and (bolp) (eolp))
- (delete-backward-char 1))
- (forward-line))))
+(defun rfc2047-b-encode-string (string)
+ "Base64-encode the header contained in STRING."
+ (base64-encode-string string t))
+
+(defun rfc2047-q-encode-string (string)
+ "Quoted-printable-encode the header in STRING."
+ (mm-with-unibyte-buffer
+ (insert string)
+ (quoted-printable-encode-region
+ (point-min) (point-max) nil
+ ;; = (\075), _ (\137), ? (\077) are used in the encoded word.
+ ;; Avoid using 8bit characters.
+ ;; This list excludes `especials' (see the RFC2047 syntax),
+ ;; meaning that some characters in non-structured fields will
+ ;; get encoded when they con't need to be. The following is
+ ;; what it used to be.
+ ;;; ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?"
+ ;;; "\010\012\014\040-\074\076\100-\136\140-\177")
+ "-\b\n\f !#-'*+0-9A-Z\\^`-~\d")
+ (subst-char-in-region (point-min) (point-max) ? ?_)
+ (buffer-string)))
-(defun rfc2047-q-encode-region (b e)
- "Quoted-printable-encode the header in region B to E."
- (save-excursion
- (save-restriction
- (narrow-to-region (goto-char b) e)
- (let ((bol (save-restriction
- (widen)
- (rfc2047-point-at-bol))))
- (quoted-printable-encode-region
- b e nil
- ;; = (\075), _ (\137), ? (\077) are used in the encoded word.
- ;; Avoid using 8bit characters.
- ;; This list excludes `especials' (see the RFC2047 syntax),
- ;; meaning that some characters in non-structured fields will
- ;; get encoded when they con't need to be. The following is
- ;; what it used to be.
-;;; ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?"
-;;; "\010\012\014\040-\074\076\100-\136\140-\177")
- "-\b\n\f !#-'*+0-9A-Z\\^`-~\d")
- (subst-char-in-region (point-min) (point-max) ? ?_)
- ;; The size of QP encapsulation is about 20, so set limit to
- ;; 56=76-20.
- (unless (< (- (point-max) (point-min)) 56)
- ;; Don't break if it could fit in one line.
- ;; Let rfc2047-encode-region break it later.
- (goto-char (1+ (point-min)))
- (while (and (not (bobp)) (not (eobp)))
- (goto-char (min (point-max) (+ 56 bol)))
- (search-backward "=" (- (point) 2) t)
- (unless (or (bobp) (eobp))
- (insert ?\n)
- (setq bol (point)))))))))
+(defun rfc2047-encode-parameter (param value)
+ "Return and PARAM=VALUE string encoded in the RFC2047-like style.
+This is a replacement for the `rfc2231-encode-string' function.
+
+When attaching files as MIME parts, we should use the RFC2231 encoding
+to specify the file names containing non-ASCII characters. However,
+many mail softwares don't support it in practice and recipients won't
+be able to extract files with correct names. Instead, the RFC2047-like
+encoding is acceptable generally. This function provides the very
+RFC2047-like encoding, resigning to such a regrettable trend. To use
+it, put the following line in your ~/.gnus.el file:
+
+\(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter)
+"
+ (let* ((rfc2047-encoding-type 'mime)
+ (rfc2047-encode-max-chars nil)
+ (string (rfc2047-encode-string value)))
+ (if (string-match (concat "[" ietf-drums-tspecials "]")
string)
+ (format "%s=%S" param string)
+ (concat param "=" string))))
;;;
;;; Functions for decoding RFC2047 messages
@@ -639,12 +806,91 @@ By default, the region is treated as con
(eval-and-compile
(defconst rfc2047-encoded-word-regexp
- "=\\?\\([^][\000-\040()<>@,\;:\\\"/?.=]+\\)\\?\\(B\\|Q\\)\
-\\?\\([!->@-~ +]*\\)\\?="))
+ "=\\?\\([^][\000-\040()<>@,\;:*\\\"/?.=]+\\)\\(\\*[^?]+\\)?\
+\\?\\(B\\|Q\\)\\?\\([!->@-~ ]*\\)\\?="))
(defvar rfc2047-quote-decoded-words-containing-tspecials nil
"If non-nil, quote decoded words containing special characters.")
+(defvar rfc2047-allow-incomplete-encoded-text t
+ "*Non-nil means allow incomplete encoded-text in successive encoded-words.
+Dividing of encoded-text in the place other than character boundaries
+violates RFC2047 section 5, while we have a capability to decode it.
+If it is non-nil, the decoder will decode B- or Q-encoding in each
+encoded-word, concatenate them, and decode it by charset. Otherwise,
+the decoder will fully decode each encoded-word before concatenating
+them.")
+
+(defun rfc2047-charset-to-coding-system (charset)
+ "Return coding-system corresponding to MIME CHARSET.
+If your Emacs implementation can't decode CHARSET, return nil."
+ (when (stringp charset)
+ (setq charset (intern (downcase charset))))
+ (when (or (not charset)
+ (eq 'gnus-all mail-parse-ignored-charsets)
+ (memq 'gnus-all mail-parse-ignored-charsets)
+ (memq charset mail-parse-ignored-charsets))
+ (setq charset mail-parse-charset))
+ (let ((cs (mm-coding-system-p (mm-charset-to-coding-system charset))))
+ (cond ((eq cs 'ascii)
+ (setq cs (or (mm-charset-to-coding-system mail-parse-charset)
+ 'raw-text)))
+ (cs)
+ ((and charset
+ (listp mail-parse-ignored-charsets)
+ (memq 'gnus-unknown mail-parse-ignored-charsets))
+ (setq cs (mm-charset-to-coding-system mail-parse-charset))))
+ (if (eq cs 'ascii)
+ 'raw-text
+ cs)))
+
+(defun rfc2047-decode-encoded-words (words)
+ "Decode successive encoded-words in WORDS and return a decoded string.
+Each element of WORDS looks like (CHARSET ENCODING ENCODED-TEXT
+ENCODED-WORD)."
+ (let (word charset cs encoding text rest)
+ (while words
+ (setq word (pop words))
+ (if (and (or (setq cs (rfc2047-charset-to-coding-system
+ (setq charset (car word))))
+ (progn
+ (message "Unknown charset: %s" charset)
+ nil))
+ (condition-case code
+ (cond ((char-equal ?B (nth 1 word))
+ (setq text (base64-decode-string
+ (rfc2047-pad-base64 (nth 2 word)))))
+ ((char-equal ?Q (nth 1 word))
+ (setq text (quoted-printable-decode-string
+ (mm-subst-char-in-string
+ ?_ ? (nth 2 word) t)))))
+ (error
+ (message "%s" (error-message-string code))
+ nil)))
+ (if (and rfc2047-allow-incomplete-encoded-text
+ (eq cs (caar rest)))
+ ;; Concatenate text of which the charset is the same.
+ (setcdr (car rest) (concat (cdar rest) text))
+ (push (cons cs text) rest))
+ ;; Don't decode encoded-word.
+ (push (cons nil (nth 3 word)) rest)))
+ (while rest
+ (setq words (concat
+ (or (and (setq cs (caar rest))
+ (condition-case code
+ (mm-decode-coding-string (cdar rest) cs)
+ (error
+ (message "%s" (error-message-string code))
+ nil)))
+ (concat (when (cdr rest) " ")
+ (cdar rest)
+ (when (and words
+ (not (eq (string-to-char words) ? )))
+ " ")))
+ words)
+ rest (cdr rest)))
+ words))
+
;; Fixme: This should decode in place, not cons intermediate strings.
;; Also check whether it needs to worry about delimiting fields like
;; encoding.
@@ -659,32 +905,32 @@ By default, the region is treated as con
"Decode MIME-encoded words in region between START and END."
(interactive "r")
(let ((case-fold-search t)
- b e)
+ (eword-regexp (eval-when-compile
+ ;; Ignore whitespace between encoded-words.
+ (concat "[\n\t ]*\\(" rfc2047-encoded-word-regexp
+ "\\)")))
+ b e match words)
(save-excursion
(save-restriction
(narrow-to-region start end)
- (goto-char (point-min))
- ;; Remove whitespace between encoded words.
- (while (re-search-forward
- (eval-when-compile
- (concat "\\(" rfc2047-encoded-word-regexp "\\)"
- "\\(\n?[ \t]\\)+"
- "\\(" rfc2047-encoded-word-regexp "\\)"))
- nil t)
- (delete-region (goto-char (match-end 1)) (match-beginning 6)))
- ;; Decode the encoded words.
- (setq b (goto-char (point-min)))
- (while (re-search-forward rfc2047-encoded-word-regexp nil t)
- (setq e (match-beginning 0))
- (insert (rfc2047-parse-and-decode
- (prog1
- (match-string 0)
- (delete-region e (match-end 0)))))
- (while (looking-at rfc2047-encoded-word-regexp)
- (insert (rfc2047-parse-and-decode
- (prog1
- (match-string 0)
- (delete-region (point) (match-end 0))))))
+ (goto-char (setq b start))
+ ;; Look for the encoded-words.
+ (while (setq match (re-search-forward eword-regexp nil t))
+ (setq e (match-beginning 1)
+ end (match-end 0)
+ words nil)
+ (while match
+ (push (list (match-string 2) ;; charset
+ (char-after (match-beginning 4)) ;; encoding
+ (match-string 5) ;; encoded-text
+ (match-string 1)) ;; encoded-word
+ words)
+ ;; Look for the subsequent encoded-words.
+ (when (setq match (looking-at eword-regexp))
+ (goto-char (setq end (match-end 0)))))
+ ;; Replace the encoded-words with the decoded one.
+ (delete-region e end)
+ (insert (rfc2047-decode-encoded-words (nreverse words)))
(save-restriction
(narrow-to-region e (point))
(goto-char e)
@@ -774,24 +1020,22 @@ By default, the region is treated as con
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)
+ ;; `decode-coding-string' in Emacs offers a third optional
+ ;; arg NOCOPY to avoid consing a new string if the decoding
+ ;; is "trivial". Unfortunately it currently doesn't
+ ;; consider anything else than a `nil' coding system
+ ;; trivial.
+ ;; `rfc2047-decode-string' is called multiple times for each
+ ;; article during summary buffer generation, and we really
+ ;; want to avoid unnecessary consing. So we bypass
+ ;; `decode-coding-string' if the string is purely ASCII.
+ (if (and (fboundp 'detect-coding-string)
+ ;; string is purely ASCII
+ (eq (detect-coding-string string t) 'undecided))
+ string
+ (mm-decode-coding-string string mail-parse-charset))
(mm-string-as-multibyte string)))))
-(defun rfc2047-parse-and-decode (word)
- "Decode WORD and return it if it is an encoded word.
-Return WORD if it is not not an encoded word or if the charset isn't
-decodable."
- (if (not (string-match rfc2047-encoded-word-regexp word))
- word
- (or
- (condition-case nil
- (rfc2047-decode
- (match-string 1 word)
- (upcase (match-string 2 word))
- (match-string 3 word))
- (error word))
- word))) ; un-decodable
-
(defun rfc2047-pad-base64 (string)
"Pad STRING to quartets."
;; Be more liberal to accept buggy base64 strings. If
@@ -806,37 +1050,6 @@ decodable."
(1 string) ;; Error, don't pad it.
(2 (concat string "=="))
(3 (concat string "=")))))
-
-(defun rfc2047-decode (charset encoding string)
- "Decode STRING from the given MIME CHARSET in the given ENCODING.
-Valid ENCODINGs are \"B\" and \"Q\".
-If your Emacs implementation can't decode CHARSET, return nil."
- (if (stringp charset)
- (setq charset (intern (downcase charset))))
- (if (or (not charset)
- (eq 'gnus-all mail-parse-ignored-charsets)
- (memq 'gnus-all mail-parse-ignored-charsets)
- (memq charset mail-parse-ignored-charsets))
- (setq charset mail-parse-charset))
- (let ((cs (mm-charset-to-coding-system charset)))
- (if (and (not cs) charset
- (listp mail-parse-ignored-charsets)
- (memq 'gnus-unknown mail-parse-ignored-charsets))
- (setq cs (mm-charset-to-coding-system mail-parse-charset)))
- (when cs
- (when (and (eq cs 'ascii)
- mail-parse-charset)
- (setq cs mail-parse-charset))
- (mm-decode-coding-string
- (cond
- ((equal "B" encoding)
- (base64-decode-string
- (rfc2047-pad-base64 string)))
- ((equal "Q" encoding)
- (quoted-printable-decode-string
- (mm-replace-chars-in-string string ?_ ? )))
- (t (error "Invalid encoding: %s" encoding)))
- cs))))
(provide 'rfc2047)
1.6 +14 -8 XEmacs/packages/xemacs-packages/gnus/lisp/rfc2231.el
Index: rfc2231.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/rfc2231.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- rfc2231.el 2005/03/13 00:23:37 1.5
+++ rfc2231.el 2005/11/15 03:46:00 1.6
@@ -1,6 +1,6 @@
;;; rfc2231.el --- Functions for decoding rfc2231 headers
-;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004
+;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005
;; Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
@@ -18,8 +18,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -52,7 +52,7 @@ The list will be on the form
(prev-value "")
display-name mailbox c display-string parameters
attribute value type subtype number encoded
- prev-attribute)
+ prev-attribute prev-encoded)
(ietf-drums-init (mail-header-remove-whitespace
(mail-header-remove-comments string)))
(let ((table (copy-syntax-table ietf-drums-syntax-table)))
@@ -106,9 +106,14 @@ The list will be on the form
;; See if we have any previous continuations.
(when (and prev-attribute
(not (eq prev-attribute attribute)))
- (push (cons prev-attribute prev-value) parameters)
+ (push (cons prev-attribute
+ (if prev-encoded
+ (rfc2231-decode-encoded-string prev-value)
+ prev-value))
+ parameters)
(setq prev-attribute nil
- prev-value ""))
+ prev-value ""
+ prev-encoded nil))
(unless (eq c ?=)
(error "Invalid header: %s" string))
(forward-char 1)
@@ -127,7 +132,8 @@ The list will be on the form
(error "Invalid header: %s" string)))
(if number
(setq prev-attribute attribute
- prev-value (concat prev-value value))
+ prev-value (concat prev-value value)
+ prev-encoded encoded)
(push (cons attribute
(if encoded
(rfc2231-decode-encoded-string value)
@@ -137,7 +143,7 @@ The list will be on the form
;; Take care of any final continuations.
(when prev-attribute
(push (cons prev-attribute
- (if encoded
+ (if prev-encoded
(rfc2231-decode-encoded-string prev-value)
prev-value))
parameters))
1.4 +6 -5 XEmacs/packages/xemacs-packages/gnus/lisp/score-mode.el
Index: score-mode.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/score-mode.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- score-mode.el 2004/09/28 02:21:21 1.3
+++ score-mode.el 2005/11/15 03:46:00 1.4
@@ -1,6 +1,7 @@
;;; score-mode.el --- mode for editing Gnus score files
-;; Copyright (C) 1996, 2001, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: news, mail
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -28,7 +29,7 @@
(eval-when-compile (require 'cl))
(require 'mm-util) ; for mm-universal-coding-system
-(require 'gnus-util) ; for gnus-pp
+(require 'gnus-util) ; for gnus-pp, gnus-run-mode-hooks
(defvar gnus-score-mode-hook nil
"*Hook run in score mode buffers.")
@@ -71,7 +72,7 @@ This mode is an extended emacs-lisp mode
(setq mode-name "Score")
(lisp-mode-variables nil)
(make-local-variable 'gnus-score-edit-exit-function)
- (run-hooks 'emacs-lisp-mode-hook 'gnus-score-mode-hook))
+ (gnus-run-mode-hooks 'emacs-lisp-mode-hook 'gnus-score-mode-hook))
(defun gnus-score-make-menu-bar ()
(unless (boundp 'gnus-score-menu)
1.4 +4 -3 XEmacs/packages/xemacs-packages/gnus/lisp/smiley.el.upstream
Index: smiley.el.upstream
===================================================================
RCS file:
/pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/smiley.el.upstream,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- smiley.el.upstream 2005/03/13 00:23:37 1.3
+++ smiley.el.upstream 2005/11/15 03:46:00 1.4
@@ -1,6 +1,7 @@
;;; smiley.el --- displaying smiley faces
-;; Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Dave Love <fx(a)gnu.org>
;; Keywords: news mail multimedia
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.7 +16 -11 XEmacs/packages/xemacs-packages/gnus/lisp/smime.el
Index: smime.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/smime.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- smime.el 2005/03/13 00:23:37 1.6
+++ smime.el 2005/11/15 03:46:00 1.7
@@ -1,6 +1,8 @@
;;; smime.el --- S/MIME support library
-;; Copyright (c) 2000, 2001, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Simon Josefsson <simon(a)josefsson.org>
;; Keywords: SMIME X.509 PEM OpenSSL
@@ -18,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -122,7 +124,8 @@
(eval-when-compile (require 'cl))
(defgroup smime nil
- "S/MIME configuration.")
+ "S/MIME configuration."
+ :group 'mime)
(defcustom smime-keys nil
"*Map mail addresses to a file containing Certificate (and private key).
@@ -338,9 +341,10 @@ KEYFILE should contain a PEM encoded key
keyfile
(smime-get-key-with-certs-by-email
(completing-read
- (concat "Sign using which key? "
- (if smime-keys (concat "(default " (caar smime-keys) ") ")
- ""))
+ (concat "Sign using key"
+ (if smime-keys
+ (concat " (default " (caar smime-keys) "): ")
+ ": "))
smime-keys nil nil (car-safe (car-safe smime-keys))))))
(error "Signing failed"))))
@@ -469,9 +473,9 @@ in the buffer specified by `smime-detail
(or keyfile
(smime-get-key-by-email
(completing-read
- (concat "Decipher using which key? "
- (if smime-keys (concat "(default " (caar smime-keys) ") ")
- ""))
+ (concat "Decipher using key"
+ (if smime-keys (concat " (default " (caar smime-keys) "): ")
+ ": "))
smime-keys nil nil (car-safe (car-safe smime-keys)))))))))
;; Various operations
@@ -595,7 +599,8 @@ The following commands are available:
(use-local-map smime-mode-map)
(buffer-disable-undo)
(setq truncate-lines t)
- (setq buffer-read-only t))
+ (setq buffer-read-only t)
+ (gnus-run-mode-hooks 'smime-mode-hook))
(defun smime-certificate-info (certfile)
(interactive "fCertificate file: ")
1.6 +165 -27 XEmacs/packages/xemacs-packages/gnus/lisp/spam-report.el
Index: spam-report.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/spam-report.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- spam-report.el 2005/03/13 00:23:37 1.5
+++ spam-report.el 2005/11/15 03:46:00 1.6
@@ -1,6 +1,7 @@
;;; spam-report.el --- Reporting spam
-;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Teodor Zlatanov <tzz(a)lifelogs.com>
;; Keywords: network
@@ -18,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -35,7 +36,9 @@
(autoload 'mm-url-insert "mm-url"))
(defgroup spam-report nil
- "Spam reporting configuration.")
+ "Spam reporting configuration."
+ :group 'mail
+ :group 'news)
(defcustom spam-report-gmane-regex nil
"Regexp matching Gmane newsgroups, e.g. \"^nntp\\+.*:gmane\\.\"
@@ -46,12 +49,6 @@ instead."
(regexp :value "^nntp\+.*:gmane\."))
:group 'spam-report)
-(defcustom spam-report-gmane-spam-header
- "^X-Report-Spam: http://\\([^/]+\\)\\(.*\\)$"
- "String matching Gmane spam-reporting header. Two match groups are
needed."
- :type 'regexp
- :group 'spam-report)
-
(defcustom spam-report-gmane-use-article-number t
"Whether the article number (faster!) or the header should be used."
:type 'boolean
@@ -59,14 +56,32 @@ instead."
(defcustom spam-report-url-ping-function
'spam-report-url-ping-plain
- "Function to use for url ping spam reporting."
+ "Function to use for url ping spam reporting.
+The function must accept the arguments `host' and `report'."
:type '(choice
(const :tag "Connect directly"
spam-report-url-ping-plain)
(const :tag "Use the external program specified in `mm-url-program'"
- spam-report-url-ping-mm-url))
+ spam-report-url-ping-mm-url)
+ (const :tag "Store request URLs in `spam-report-requests-file'"
+ spam-report-url-to-file)
+ (function :tag "User defined function" nil))
+ :group 'spam-report)
+
+(defcustom spam-report-requests-file
+ (nnheader-concat gnus-directory "spam/"
"spam-report-requests.url")
+ ;; Is there a convention for the extension of such a file?
+ ;; Should we use `spam-directory'?
+ "File where spam report request are stored."
+ :type 'file
:group 'spam-report)
+(defvar spam-report-url-ping-temp-agent-function nil
+ "Internal variable for `spam-report-agentize' and
`spam-report-deagentize'.
+This variable will store the value of `spam-report-url-ping-function' from
+before `spam-report-agentize' was run, so that `spam-report-deagentize' can
+undo that change.")
+
(defun spam-report-gmane (&rest articles)
"Report an article as spam through Gmane"
(dolist (article articles)
@@ -75,25 +90,49 @@ instead."
(string-match spam-report-gmane-regex gnus-newsgroup-name)))
(gnus-message 6 "Reporting spam article %d to spam.gmane.org..."
article)
(if spam-report-gmane-use-article-number
- (spam-report-url-ping "spam.gmane.org"
- (format "/%s:%d"
- (gnus-group-real-name gnus-newsgroup-name)
- article))
+ (spam-report-url-ping
+ "spam.gmane.org"
+ (format "/%s:%d"
+ (gnus-group-real-name gnus-newsgroup-name)
+ article))
(with-current-buffer nntp-server-buffer
(gnus-request-head article gnus-newsgroup-name)
- (goto-char (point-min))
- (if (re-search-forward spam-report-gmane-spam-header nil t)
- (let* ((host (match-string 1))
- (report (match-string 2))
- (url (format "http://%s%s" host report)))
- (gnus-message 7 "Reporting spam through URL %s..." url)
- (spam-report-url-ping host report))
- (gnus-message 3 "Could not find X-Report-Spam in article %d..."
- article)))))))
+ (let ((case-fold-search t)
+ field host report url)
+ ;; First check for X-Report-Spam because it's more specific to
+ ;; spam reporting than Archived-At. OTOH, all new articles on
+ ;; Gmane don't have X-Report-Spam anymore (unless Lars changes his
+ ;; mind :-)).
+ ;;
+ ;; There might be more than one Archived-At header so we need to
+ ;; find (and transform) the one related to Gmane.
+ (setq field (or (gnus-fetch-field "X-Report-Spam")
+ (gnus-fetch-field "Archived-At")))
+ (setq host (progn
+ (string-match
+ (concat "http://\\([a-z]+\\.gmane\\.org\\)"
+ "\\(/[^:/]+[:/][0-9]+\\)")
+ field)
+ (match-string 1 field)))
+ (setq report (match-string 2 field))
+ (when (string-equal "permalink.gmane.org" host)
+ (setq host "spam.gmane.org")
+ (setq report (gnus-replace-in-string
+ report "/\\([0-9]+\\)$" ":\\1")))
+ (setq url (format "http://%s%s" host report))
+ (if (not (and host report url))
+ (gnus-message
+ 3 "Could not find a spam report header in article %d..."
+ article)
+ (gnus-message 7 "Reporting spam through URL %s..." url)
+ (spam-report-url-ping host report))))))))
(defun spam-report-url-ping (host report)
"Ping a host through HTTP, addressing a specific GET resource using
the function specified by `spam-report-url-ping-function'."
+ ;; Example:
+ ;; host: "spam.gmane.org"
+ ;; report: "/gmane.some.group:123456"
(funcall spam-report-url-ping-function host report))
(defun spam-report-url-ping-plain (host report)
@@ -111,15 +150,114 @@ the function specified by `spam-report-u
(process-send-string
tcp-connection
(format "GET %s HTTP/1.1\nUser-Agent: %s (spam-report.el)\nHost:
%s\n\n"
- report (gnus-emacs-version) host)))))
+ report (gnus-extended-version) host)))))
+
+;;;###autoload
+(defun spam-report-process-queue (&optional file keep)
+ "Report all queued requests from `spam-report-requests-file'.
+
+If FILE is given, use it instead of `spam-report-requests-file'.
+If KEEP is t, leave old requests in the file. If KEEP is the
+symbol `ask', query before flushing the queue file."
+ (interactive
+ (list (read-file-name
+ "File: "
+ (file-name-directory spam-report-requests-file)
+ spam-report-requests-file
+ nil
+ (file-name-nondirectory spam-report-requests-file))
+ current-prefix-arg))
+ (if (eq spam-report-url-ping-function 'spam-report-url-to-file)
+ (error (concat "Cannot process requests when "
+ "`spam-report-url-ping-function' is "
+ "`spam-report-url-to-file'."))
+ (gnus-message 7 "Processing requests using `%s'."
+ spam-report-url-ping-function))
+ (or file (setq file spam-report-requests-file))
+ (save-excursion
+ (set-buffer (find-file-noselect file))
+ (goto-char (point-min))
+ (while (and (not (eobp))
+ (re-search-forward
+ "http://\\([^/]+\\)\\(/.*\\) *$" (gnus-point-at-eol) t))
+ (funcall spam-report-url-ping-function (match-string 1) (match-string 2))
+ (forward-line 1))
+ (if (or (eq keep nil)
+ (and (eq keep 'ask)
+ (y-or-n-p
+ (format
+ "Flush requests from `%s'? " (current-buffer)))))
+ (progn
+ (gnus-message 7 "Flushing request file `%s'"
+ spam-report-requests-file)
+ (erase-buffer)
+ (save-buffer)
+ (kill-buffer (current-buffer)))
+ (gnus-message 7 "Keeping requests in `%s'"
spam-report-requests-file))))
+;;;###autoload
(defun spam-report-url-ping-mm-url (host report)
"Ping a host through HTTP, addressing a specific GET resource. Use
the external program specified in `mm-url-program' to connect to
server."
(with-temp-buffer
- (let ((url (concat "http://" host "/" report)))
+ (let ((url (format "http://%s%s" host report)))
(mm-url-insert url t))))
+
+;;;###autoload
+(defun spam-report-url-to-file (host report)
+ "Collect spam report requests in `spam-report-requests-file'.
+Customize `spam-report-url-ping-function' to use this function."
+ (let ((url (format "http://%s%s" host report))
+ (file spam-report-requests-file))
+ (gnus-make-directory (file-name-directory file))
+ (gnus-message 9 "Writing URL `%s' to file `%s'" url file)
+ (with-temp-buffer
+ (insert url)
+ (newline)
+ (append-to-file (point-min) (point-max) file))))
+
+;;;###autoload
+(defun spam-report-agentize ()
+ "Add spam-report support to the Agent.
+Spam reports will be queued with \\[spam-report-url-to-file] when
+the Agent is unplugged, and will be submitted in a batch when the
+Agent is plugged."
+ (interactive)
+ (add-hook 'gnus-agent-plugged-hook 'spam-report-plug-agent)
+ (add-hook 'gnus-agent-unplugged-hook 'spam-report-unplug-agent))
+
+;;;###autoload
+(defun spam-report-deagentize ()
+ "Remove spam-report support from the Agent.
+Spam reports will be queued with the method used when
+\\[spam-report-agentize] was run."
+ (interactive)
+ (remove-hook 'gnus-agent-plugged-hook 'spam-report-plug-agent)
+ (remove-hook 'gnus-agent-unplugged-hook 'spam-report-unplug-agent))
+
+(defun spam-report-plug-agent ()
+ "Adjust spam report settings for plugged state.
+Process queued spam reports."
+ ;; Process the queue, unless the user only wanted to report to a file
+ ;; anyway.
+ (unless (equal spam-report-url-ping-temp-agent-function
+ 'spam-report-url-to-file)
+ (spam-report-process-queue))
+ ;; Set the reporting function, if we have memorized something otherwise,
+ ;; stick with plain URL reporting.
+ (setq spam-report-url-ping-function
+ (or spam-report-url-ping-temp-agent-function
+ 'spam-report-url-ping-plain)))
+
+(defun spam-report-unplug-agent ()
+ "Restore spam report settings for unplugged state."
+ ;; save the old value
+ (setq spam-report-url-ping-temp-agent-function
+ spam-report-url-ping-function)
+ ;; store all reports to file
+ (setq spam-report-url-ping-function
+ 'spam-report-url-to-file))
(provide 'spam-report)
1.5 +7 -5 XEmacs/packages/xemacs-packages/gnus/lisp/spam-stat.el
Index: spam-stat.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/spam-stat.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- spam-stat.el 2005/03/13 00:23:37 1.4
+++ spam-stat.el 2005/11/15 03:46:00 1.5
@@ -1,6 +1,6 @@
;;; spam-stat.el --- detecting spam based on statistics
-;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
;; Author: Alex Schroeder <alex(a)gnu.org>
;; Keywords: network
@@ -20,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -123,6 +123,8 @@
;;; Code:
+(defvar gnus-original-article-buffer)
+
(defgroup spam-stat nil
"Statistical spam detection for Emacs.
Use the functions to build a dictionary of words and their statistical
@@ -370,7 +372,7 @@ Use `spam-stat-ngood', `spam-stat-nbad',
(lambda (word count)
(let ((entry (gethash word spam-stat)))
(if (not entry)
- (error "This buffer has unknown words in it.")
+ (error "This buffer has unknown words in it")
(spam-stat-set-good entry (- (spam-stat-good entry) count))
(spam-stat-set-bad entry (+ (spam-stat-bad entry) count))
(spam-stat-set-score entry (spam-stat-compute-score entry))
@@ -386,7 +388,7 @@ Use `spam-stat-ngood', `spam-stat-nbad',
(lambda (word count)
(let ((entry (gethash word spam-stat)))
(if (not entry)
- (error "This buffer has unknown words in it.")
+ (error "This buffer has unknown words in it")
(spam-stat-set-good entry (+ (spam-stat-good entry) count))
(spam-stat-set-bad entry (- (spam-stat-bad entry) count))
(spam-stat-set-score entry (spam-stat-compute-score entry))
1.6 +15 -9 XEmacs/packages/xemacs-packages/gnus/lisp/spam.el
Index: spam.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/spam.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- spam.el 2005/03/13 00:23:37 1.5
+++ spam.el 2005/11/15 03:46:01 1.6
@@ -1,6 +1,7 @@
;;; spam.el --- Identifying spam
-;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Keywords: network
@@ -18,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -77,7 +78,9 @@
(defgroup spam nil
"Spam configuration."
- :version "22.1")
+ :version "22.1"
+ :group 'mail
+ :group 'news)
(defcustom spam-directory (nnheader-concat gnus-directory "spam/")
"Directory for spam whitelists and blacklists."
@@ -298,7 +301,7 @@ All unmarked article in such group recei
:type '(radio (const nil) regexp)
:group 'spam)
-(defface spam-face
+(defface spam
'((((class color) (type tty) (background dark))
(:foreground "gray80" :background "gray50"))
(((class color) (type tty) (background light))
@@ -308,9 +311,12 @@ All unmarked article in such group recei
(((class color) (background light))
(:foreground "ivory4"))
(t :inverse-video t))
- "Face for spam-marked articles.")
+ "Face for spam-marked articles."
+ :group 'spam)
+;; backward-compatibility alias
+(put 'spam-face 'face-alias 'spam)
-(defcustom spam-face 'spam-face
+(defcustom spam-face 'spam
"Face for spam-marked articles."
:type 'face
:group 'spam)
@@ -1802,8 +1808,8 @@ REMOVE not nil, remove the ADDRESSES."
"Install the spam.el hooks and do other initialization"
(interactive)
(setq spam-install-hooks t)
- ;; TODO: How do we redo this every time spam-face is customized?
- (push '((eq mark gnus-spam-mark) . spam-face)
+ ;; TODO: How do we redo this every time the `spam' face is customized?
+ (push '((eq mark gnus-spam-mark) . spam)
gnus-summary-highlight)
;; Add hooks for loading and saving the spam stats
(add-hook 'gnus-save-newsrc-hook 'spam-maybe-spam-stat-save)
1.4 +111 -48 XEmacs/packages/xemacs-packages/gnus/lisp/time-date.el
Index: time-date.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/time-date.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- time-date.el 2004/09/28 02:21:21 1.3
+++ time-date.el 2005/11/15 03:46:01 1.4
@@ -1,5 +1,6 @@
;;; time-date.el --- Date and time handling functions
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005
+;; Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi(a)gnus.org>
;; Masanobu Umeda <umerin(a)mse.kyutech.ac.jp>
@@ -19,15 +20,78 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
+;; Time values come in three formats. The oldest format is a cons
+;; cell of the form (HIGH . LOW). This format is obsolete, but still
+;; supported. The two other formats are the lists (HIGH LOW) and
+;; (HIGH LOW MICRO). The first two formats specify HIGH * 2^16 + LOW
+;; seconds; the third format specifies HIGH * 2^16 + LOW + MICRO /
+;; 1000000 seconds. We should have 0 <= MICRO < 1000000 and 0 <= LOW
+;; < 2^16. If the time value represents a point in time, then HIGH is
+;; nonnegative. If the time value is a time difference, then HIGH can
+;; be negative as well. The macro `with-decoded-time-value' and the
+;; function `encode-time-value' make it easier to deal with these
+;; three formats. See `time-subtract' for an example of how to use
+;; them.
+
;;; Code:
+
+(defmacro with-decoded-time-value (varlist &rest body)
+ "Decode a time value and bind it according to VARLIST, then eval BODY.
-(require 'parse-time)
+The value of the last form in BODY is returned.
+Each element of the list VARLIST is a list of the form
+\(HIGH-SYMBOL LOW-SYMBOL MICRO-SYMBOL [TYPE-SYMBOL] TIME-VALUE).
+The time value TIME-VALUE is decoded and the result it bound to
+the symbols HIGH-SYMBOL, LOW-SYMBOL and MICRO-SYMBOL.
+
+The optional TYPE-SYMBOL is bound to the type of the time value.
+Type 0 is the cons cell (HIGH . LOW), type 1 is the list (HIGH
+LOW), and type 3 is the list (HIGH LOW MICRO)."
+ (declare (indent 1)
+ (debug ((&rest (symbolp symbolp symbolp &or [symbolp form] form))
+ body)))
+ (if varlist
+ (let* ((elt (pop varlist))
+ (high (pop elt))
+ (low (pop elt))
+ (micro (pop elt))
+ (type (unless (eq (length elt) 1)
+ (pop elt)))
+ (time-value (car elt))
+ (gensym (make-symbol "time")))
+ `(let* ,(append `((,gensym ,time-value)
+ (,high (pop ,gensym))
+ ,low ,micro)
+ (when type `(,type)))
+ (if (consp ,gensym)
+ (progn
+ (setq ,low (pop ,gensym))
+ (if ,gensym
+ ,(append `(setq ,micro (car ,gensym))
+ (when type `(,type 2)))
+ ,(append `(setq ,micro 0)
+ (when type `(,type 1)))))
+ ,(append `(setq ,low ,gensym ,micro 0)
+ (when type `(,type 0))))
+ (with-decoded-time-value ,varlist ,@body)))
+ `(progn ,@body)))
+
+(defun encode-time-value (high low micro type)
+ "Encode HIGH, LOW, and MICRO into a time value of type TYPE.
+Type 0 is the cons cell (HIGH . LOW), type 1 is the list (HIGH LOW),
+and type 3 is the list (HIGH LOW MICRO)."
+ (cond
+ ((eq type 0) (cons high low))
+ ((eq type 1) (list high low))
+ ((eq type 2) (list high low micro))))
+
+(autoload 'parse-time-string "parse-time")
(autoload 'timezone-make-date-arpa-standard "timezone")
;;;###autoload
@@ -48,9 +112,10 @@
(defun time-to-seconds (time)
"Convert time value TIME to a floating point number.
You can use `float-time' instead."
- (+ (* (car time) 65536.0)
- (cadr time)
- (/ (or (nth 2 time) 0) 1000000.0)))
+ (with-decoded-time-value ((high low micro time))
+ (+ (* 1.0 high 65536)
+ low
+ (/ micro 1000000.0))))
;;;###autoload
(defun seconds-to-time (seconds)
@@ -62,19 +127,22 @@ You can use `float-time' instead."
;;;###autoload
(defun time-less-p (t1 t2)
"Say whether time value T1 is less than time value T2."
- (or (< (car t1) (car t2))
- (and (= (car t1) (car t2))
- (< (nth 1 t1) (nth 1 t2)))))
+ (with-decoded-time-value ((high1 low1 micro1 t1)
+ (high2 low2 micro2 t2))
+ (or (< high1 high2)
+ (and (= high1 high2)
+ (or (< low1 low2)
+ (and (= low1 low2)
+ (< micro1 micro2)))))))
;;;###autoload
(defun days-to-time (days)
"Convert DAYS into a time value."
(let* ((seconds (* 1.0 days 60 60 24))
- (rest (expt 2 16))
- (ms (condition-case nil (floor (/ seconds rest))
- (range-error (expt 2 16)))))
- (list ms (condition-case nil (round (- seconds (* ms rest)))
- (range-error (expt 2 16))))))
+ (high (condition-case nil (floor (/ seconds 65536))
+ (range-error most-positive-fixnum))))
+ (list high (condition-case nil (floor (- seconds (* 1.0 high 65536)))
+ (range-error 65535)))))
;;;###autoload
(defun time-since (time)
@@ -83,11 +151,7 @@ TIME should be either a time value or a
(when (stringp time)
;; Convert date strings to internal time.
(setq time (date-to-time time)))
- (let* ((current (current-time))
- (rest (when (< (nth 1 current) (nth 1 time))
- (expt 2 16))))
- (list (- (+ (car current) (if rest -1 0)) (car time))
- (- (+ (or rest 0) (nth 1 current)) (nth 1 time)))))
+ (time-subtract (current-time) time))
;;;###autoload
(defalias 'subtract-time 'time-subtract)
@@ -96,37 +160,36 @@ TIME should be either a time value or a
(defun time-subtract (t1 t2)
"Subtract two time values.
Return the difference in the format of a time value."
- (let ((borrow (< (cadr t1) (cadr t2))))
- (list (- (car t1) (car t2) (if borrow 1 0))
- (- (+ (if borrow 65536 0) (cadr t1)) (cadr t2)))))
+ (with-decoded-time-value ((high low micro type t1)
+ (high2 low2 micro2 type2 t2))
+ (setq high (- high high2)
+ low (- low low2)
+ micro (- micro micro2)
+ type (max type type2))
+ (when (< micro 0)
+ (setq low (1- low)
+ micro (+ micro 1000000)))
+ (when (< low 0)
+ (setq high (1- high)
+ low (+ low 65536)))
+ (encode-time-value high low micro type)))
;;;###autoload
(defun time-add (t1 t2)
"Add two time values. One should represent a time difference."
- (let ((high (car t1))
- (low (if (consp (cdr t1)) (nth 1 t1) (cdr t1)))
- (micro (if (numberp (car-safe (cdr-safe (cdr t1))))
- (nth 2 t1)
- 0))
- (high2 (car t2))
- (low2 (if (consp (cdr t2)) (nth 1 t2) (cdr t2)))
- (micro2 (if (numberp (car-safe (cdr-safe (cdr t2))))
- (nth 2 t2)
- 0)))
- ;; Add
- (setq micro (+ micro micro2))
- (setq low (+ low low2))
- (setq high (+ high high2))
-
- ;; Normalize
- ;; `/' rounds towards zero while `mod' returns a positive number,
- ;; so we can't rely on (= a (+ (* 100 (/ a 100)) (mod a 100))).
- (setq low (+ low (/ micro 1000000) (if (< micro 0) -1 0)))
- (setq micro (mod micro 1000000))
- (setq high (+ high (/ low 65536) (if (< low 0) -1 0)))
- (setq low (logand low 65535))
-
- (list high low micro)))
+ (with-decoded-time-value ((high low micro type t1)
+ (high2 low2 micro2 type2 t2))
+ (setq high (+ high high2)
+ low (+ low low2)
+ micro (+ micro micro2)
+ type (max type type2))
+ (when (>= micro 1000000)
+ (setq low (1+ low)
+ micro (- micro 1000000)))
+ (when (>= low 65536)
+ (setq high (1+ high)
+ low (- low 65536)))
+ (encode-time-value high low micro type)))
;;;###autoload
(defun date-to-day (date)
@@ -179,7 +242,7 @@ The Gregorian date Sunday, December 31,
(defun time-to-number-of-days (time)
"Return the number of days represented by TIME.
The number of days will be returned as a floating point number."
- (/ (+ (* 1.0 65536 (car time)) (cadr time)) (* 60 60 24)))
+ (/ (time-to-seconds time) (* 60 60 24)))
;;;###autoload
(defun safe-date-to-time (date)
1.5 +5 -3 XEmacs/packages/xemacs-packages/gnus/lisp/utf7.el
Index: utf7.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/utf7.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- utf7.el 2005/03/13 00:23:37 1.4
+++ utf7.el 2005/11/15 03:46:01 1.5
@@ -1,6 +1,8 @@
;;; utf7.el --- UTF-7 encoding/decoding for Emacs -*-coding: iso-8859-1;-*-
-;; Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Jon K Hellan <hellan(a)acm.org>
;; Maintainer: bugs(a)gnus.org
;; Keywords: mail
@@ -19,8 +21,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.4 +5 -4 XEmacs/packages/xemacs-packages/gnus/lisp/uudecode.el
Index: uudecode.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/uudecode.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- uudecode.el 2004/09/28 02:21:21 1.3
+++ uudecode.el 2005/11/15 03:46:01 1.4
@@ -1,6 +1,7 @@
;;; uudecode.el -- elisp native uudecode
-;; Copyright (c) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Shenghuo Zhu <zsh(a)cs.rochester.edu>
;; Keywords: uudecode news
@@ -19,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
@@ -51,7 +52,7 @@ input and write the converted data to it
(defcustom uudecode-use-external
(executable-find uudecode-decoder-program)
"*Use external uudecode program."
- :version "21.4"
+ :version "22.1"
:group 'gnus-extract
:type 'boolean)
1.6 +1 -1 XEmacs/packages/xemacs-packages/gnus/lisp/vcard.el
Index: vcard.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/vcard.el,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- vcard.el 2004/09/28 02:21:22 1.5
+++ vcard.el 2005/11/15 03:46:01 1.6
@@ -20,7 +20,7 @@
;; You should have received a copy of the GNU General Public License
;; along with this program; if not, you can either send email to this
;; program's maintainer or write to: The Free Software Foundation,
-;; Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA.
+;; Inc.; 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
;;; Commentary:
1.4 +5 -3 XEmacs/packages/xemacs-packages/gnus/lisp/webmail.el
Index: webmail.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/webmail.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- webmail.el 2004/09/28 02:21:22 1.3
+++ webmail.el 2005/11/15 03:46:01 1.4
@@ -1,6 +1,8 @@
;;; webmail.el --- interface of web mail
-;; Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
+
;; Author: Shenghuo Zhu <zsh(a)cs.rochester.edu>
;; Keywords: hotmail netaddress my-deja netscape
@@ -18,8 +20,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.3 +4 -3 XEmacs/packages/xemacs-packages/gnus/lisp/yenc.el
Index: yenc.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/lisp/yenc.el,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- yenc.el 2004/09/28 02:21:22 1.2
+++ yenc.el 2005/11/15 03:46:02 1.3
@@ -1,6 +1,7 @@
;;; yenc.el --- elisp native yenc decoder
-;; Copyright (c) 2002 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
;; Author: Jesper Harder <harder(a)ifa.au.dk>
;; Keywords: yenc news
@@ -18,8 +19,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.7 +213 -8 XEmacs/packages/xemacs-packages/gnus/texi/ChangeLog.upstream
Index: ChangeLog.upstream
===================================================================
RCS file:
/pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/texi/ChangeLog.upstream,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- ChangeLog.upstream 2005/03/13 00:25:33 1.6
+++ ChangeLog.upstream 2005/11/15 03:46:31 1.7
@@ -1,3 +1,209 @@
+2005-11-14 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (Various Various): Fix the default value of
+ nnheader-max-head-length.
+ (Gnus Versions): Fix typo.
+
+2005-11-10 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (XVarious): Fix description of gnus-use-toolbar; add
+ new variable gnus-toolbar-thickness.
+
+2005-11-08 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (XVarious): Revert description of gnus-use-toolbar.
+
+2005-11-07 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (X-Face): Fix description.
+ (XVarious): Remove gnus-xmas-logo-color-alist and
+ gnus-xmas-logo-color-style; fix description of gnus-use-toolbar.
+
+2005-11-04 Ken Manheimer <ken.manheimer(a)gmail.com>
+
+ * pgg.texi (User Commands): Document additional passphrase
+ argument for pgg-encrypt-*, pgg-decrypt-*, and pgg-sign-* functions.
+ (Backend methods): Likewise for corresponding pgg-scheme-* functions.
+
+2005-11-01 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (Group Parameters): Mention new varable
+ gnus-parameters-case-fold-search.
+ (Home Score File): Addition.
+
+2005-10-29 Sascha Wilde <wilde(a)sha-bang.de>
+
+ * pgg.texi (How to use): Update the example to add autoload of
+ pgg-encrypt-symmetric-region.
+ (User Commands): Document pgg-encrypt-symmetric-region.
+ (Backend methods): Document pgg-scheme-encrypt-symmetric-region.
+
+2005-10-17 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (Document Groups): Remove duplicate item.
+
+2005-10-14 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (Document Server Internals): Addition.
+
+2005-10-13 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (A note on namespaces): Fix RFC reference.
+
+2005-10-12 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (RSS): Fix key description.
+
+2005-10-11 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi: Emacs/w3 -> Emacs/W3.
+ (Browsing the Web): Fix description.
+ (Web Searches): Ditto.
+ (Customizing W3): Ditto.
+
+2005-10-07 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (Maildir): Clarify expire-age and expire-group.
+
+2005-09-28 Simon Josefsson <jas(a)extundo.com>
+
+ * message.texi (IDNA): Fix.
+
+2005-09-28 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (NNTP): Remove nntp-buggy-select, nntp-read-timeout,
+ nntp-server-hook, and nntp-warn-about-losing-connection; fix
+ description of nntp-open-connection-function.
+ (Common Variables): Fix descriptions.
+
+2005-09-26 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (Server Buffer Format): Document the %a format spec.
+
+2005-09-22 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (Mail): Fix gnus-confirm-mail-reply-to-news entry.
+
+2005-09-15 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (Finding the Parent): Fix description of how Gnus
+ finds article.
+
+2005-09-14 Jari Aalto <jari.aalto(a)cante.net>
+
+ * gnus.texi (Advanced Scoring Examples): New exmples to teach how
+ to drop off non-answered articles.
+
+2005-09-04 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * gnus.texi (Mail Source Customization): Fix descriptions of
+ mail-source-incoming-file-prefix.
+
+2005-09-02 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (Choosing Variables): Fix descriptions.
+
+2005-08-19 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * emacs-mime.texi (time-date): Fix description of safe-date-to-time.
+
+2005-08-18 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * emacs-mime.texi (Handles): Remove duplicate item.
+ (Encoding Customization): Fix the default value for
+ mm-coding-system-priorities.
+ (Charset Translation): Emacs doesn't use mm-mime-mule-charset-alist.
+ (Basic Functions): Fix reference.
+
+2005-08-09 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (Charsets): Fj hierarchy uses iso-2022-jp.
+
+2005-07-27 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * gnus.texi (Startup Files): Fix name of gnus-site-init-file.
+ Mention that gnus-init-file is not read when Emacs is invoked with
+ --no-init-file or -q.
+
+2005-06-29 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (NoCeM): gnus-nocem-verifyer defaults to pgg-verify.
+
+2005-06-23 Juanma Barranquero <lekktu(a)gmail.com>
+
+ * gnus.texi (MIME Commands, Fancy Mail Splitting, Agent Visuals)
+ (Agent Variables):
+ * message.texi (Message Headers):
+ Texinfo usage fix.
+
+2005-04-06 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * gnus.texi (RSS): Addition.
+
+2005-03-30 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * Makefile.in (gnus-booklet.dvi, gnus-booklet.pdf): Simplify.
+ (gnus-faq-texi): Renamed from gnus-faq.texi to avoid unsolicited
+ download.
+
+2005-03-29 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * Makefile.in (gnus-booklet.dvi, gnus-booklet.pdf)
+ (gnus-refcard.dvi, gnus-refcard.pdf): New targets replacing
+ refcard.* and booklet.*.
+
+ * gnus-refcard.tex: Merged from refcard.tex and gnusref.tex.
+ Removed refcard.tex gnusref.tex booklet.tex bk-lt.tex bk-a4.tex.
+
+ * gnus-logo.eps: Renamed from gnuslogo-booklet.eps.
+ gnuslogo-refcard.eps: Removed.
+
+ * Makefile.in (gnus-faq.texi): Depend on xml2texi.*. Fix sed
+ command.
+
+2005-03-25 Katsumi Yamaoka <yamaoka(a)jpl.org>
+
+ * emacs-mime.texi (Display Customization): Markup fixes.
+ (rfc2047): Update.
+
+2005-03-23 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * Makefile.in (gnus-faq-full-update, gnus-faq-clean)
+ (gnus-faq.texi): New targets.
+ (distclean): Remove some gnus-faq.* files.
+
+ * xml2texi.sh: Mention requirements.
+
+ * xml2texi.scm (boilerplate): Add "Do not modify ...".
+
+ * gnus-faq.texi: Generated.
+
+2005-03-22 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * gnus-faq.texi: Generated from gnus-faq.xml using xml2texi.*.
+
+ * message.texi, gnus.texi: Update copyright.
+
+ * xml2texi.scm (+tag-for-gnus-faq-texi+): New variable.
+ (transform): Use it. From Karl Pfl,Ad(Bsterer <sigurd(a)12move.de> with
+ minor modifications.
+ (boilerplate): Update copyright for the output file.
+
+2005-03-21 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * xml2texi.sh: Fix arch tag.
+
+2005-03-20 Reiner Steib <Reiner.Steib(a)gmx.de>
+
+ * xml2texi.scm, xml2texi.sh: Added copyright.
+ (transform): Avoid redundant entries in @urefs.
+ (format-node): Don't insert optional arguments of @node.
+
+2005-03-20 Karl Pfl,Ad(Bsterer <sigurd(a)12move.de>
+
+ * xml2texi.scm, xml2texi.sh: New files. PLT Scheme program to
+ convert FAQ from xml to texi.
+
2005-03-03 Reiner Steib <Reiner.Steib(a)gmx.de>
* gnus.texi (Slow/Expensive Connection): Don't abbreviate "very".
@@ -135,28 +341,27 @@
2004-09-10 Teodor Zlatanov <tzz(a)lifelogs.com>
- * gnus.texi (IMAP): add comments about imaps synonym to imap in
- netrc syntax
+ * gnus.texi (IMAP): Add comments about imaps synonym to imap in
+ netrc syntax.
2004-09-10 Teodor Zlatanov <tzz(a)lifelogs.com>
- * gnus.texi (Spam ELisp Package Sequence of Events): some clarifications
- (Spam ELisp Package Global Variables)
- (Spam ELisp Package Global Variables): more clarifications
+ * gnus.texi (Spam ELisp Package Sequence of Events): Some clarifications.
+ (Spam ELisp Package Global Variables): More clarifications.
2004-09-10 Teodor Zlatanov <tzz(a)lifelogs.com>
* gnus.texi (Spam ELisp Package Filtering of Incoming Mail):
- mention spam-split does not modify incoming mail
+ Mention spam-split does not modify incoming mail.
2004-09-10 Teodor Zlatanov <tzz(a)lifelogs.com>
- * gnus.texi (Spam ELisp Package Sequence of Events): fix typo
+ * gnus.texi (Spam ELisp Package Sequence of Events): Fix typo.
2004-08-31 Reiner Steib <Reiner.Steib(a)gmx.de>
* emacs-mime.texi, gnus-faq.texi, gnus.texi, message.texi,
- pgg.texi, sieve.texi: Use @copying and @insertcopying.
+ * pgg.texi, sieve.texi: Use @copying and @insertcopying.
2004-08-26 Katsumi Yamaoka <yamaoka(a)jpl.org>
1.3 +1 -1 XEmacs/packages/xemacs-packages/gnus/texi/doclicense.texi
Index: doclicense.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/texi/doclicense.texi,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- doclicense.texi 2005/03/13 00:25:33 1.2
+++ doclicense.texi 2005/11/15 03:46:32 1.3
@@ -6,7 +6,7 @@
@display
Copyright (C) 2000 Free Software Foundation, Inc.
-59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
1.6 +40 -18 XEmacs/packages/xemacs-packages/gnus/texi/emacs-mime.texi
Index: emacs-mime.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/texi/emacs-mime.texi,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- emacs-mime.texi 2005/03/13 00:25:34 1.5
+++ emacs-mime.texi 2005/11/15 03:46:32 1.6
@@ -9,12 +9,12 @@
@copying
This file documents the Emacs MIME interface functionality.
-Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
+Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
+under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with the Front-Cover texts being ``A GNU
Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
@@ -56,7 +56,7 @@ license to the document, as described in
This manual documents the libraries used to compose and display
@acronym{MIME} messages.
-This manual is directed at users who want to modify the behaviour of
+This manual is directed at users who want to modify the behavior of
the @acronym{MIME} encoding/decoding process or want a more detailed
picture of how the Emacs @acronym{MIME} library works, and people who want
to write functions and commands that manipulate @acronym{MIME} elements.
@@ -213,10 +213,6 @@ Set the undisplayer object.
@findex mm-handle-disposition
Return the parsed @code{Content-Disposition} of the part.
-@item mm-handle-disposition
-@findex mm-handle-disposition
-Return the description of the part.
-
@item mm-get-content-id
Returns the handle(s) referred to by @code{Content-ID}.
@@ -387,15 +383,15 @@ The program used to start an external te
@item mm-enable-external
@vindex mm-enable-external
-Indicate whether external MIME handlers should be used.
+Indicate whether external @acronym{MIME} handlers should be used.
-If @code{t}, all defined external MIME handlers are used. If
+If @code{t}, all defined external @acronym{MIME} handlers are used. If
@code{nil}, files are saved to disk (@code{mailcap-save-binary-file}).
If it is the symbol @code{ask}, you are prompted before the external
@acronym{MIME} handler is invoked.
When you launch an attachment through mailcap (@pxref{mailcap}) an
-attempt is made to use a safe viewer with the safest options--this isn't
+attempt is made to use a safe viewer with the safest options---this isn't
the case if you save it to disk and launch it in a different way
(command line or double-clicking). Anyhow, if you want to be sure not
to launch any external programs, set this variable to @code{nil} or
@@ -795,7 +791,7 @@ This plain text part is an attachment.
Mapping from @acronym{MIME} charset to encoding to use. This variable is
usually used except, e.g., when other requirements force a specific
encoding (digitally signed messages require 7bit encodings). The
-default is
+default is
@lisp
((iso-2022-jp . 7bit)
@@ -813,7 +809,9 @@ by using the @code{encoding} @acronym{MM
@item mm-coding-system-priorities
@vindex mm-coding-system-priorities
Prioritize coding systems to use for outgoing messages. The default
-is @code{nil}, which means to use the defaults in Emacs. It is a list of
+is @code{nil}, which means to use the defaults in Emacs, but is
+@code{(iso-8859-1 iso-2022-jp iso-2022-jp-2 shift_jis utf-8)} when
+running Emacs in the Japanese language environment. It is a list of
coding system symbols (aliases of coding systems are also allowed, use
@kbd{M-x describe-coding-system} to make sure you are specifying correct
coding system names). For example, if you have configured Emacs
@@ -880,8 +878,9 @@ used, of course.
@vindex mm-mime-mule-charset-alist
Things are slightly more complicated when running Emacs with @sc{mule}
support. In this case, a list of the @sc{mule} charsets used in the
-part is obtained, and the @sc{mule} charsets are translated to @acronym{MIME}
-charsets by consulting the variable @code{mm-mime-mule-charset-alist}.
+part is obtained, and the @sc{mule} charsets are translated to
+@acronym{MIME} charsets by consulting the table provided by Emacs itself
+or the variable @code{mm-mime-mule-charset-alist} for XEmacs.
If this results in a single @acronym{MIME} charset, this is used to encode
the part. But if the resulting list of @acronym{MIME} charsets contains more
than one element, two things can happen: If it is possible to encode the
@@ -1168,7 +1167,7 @@ in the subsequent sections.
This chapter describes the basic, ground-level functions for parsing and
handling. Covered here is parsing @code{From} lines, removing comments
from header lines, decoding encoded words, parsing date headers and so
-on. High-level functionality is dealt with in the next chapter
+on. High-level functionality is dealt with in the first chapter
(@pxref{Decoding and Viewing}).
@menu
@@ -1327,8 +1326,8 @@ RFC2047 specifies two forms of encoding-
Quoted-Printable-like encoding) and @code{B} (base64). This alist
specifies which charset should use which encoding.
-@item rfc2047-encoding-function-alist
-@vindex rfc2047-encoding-function-alist
+@item rfc2047-encode-function-alist
+@vindex rfc2047-encode-function-alist
This is an alist of encoding / function pairs. The encodings are
@code{Q}, @code{B} and @code{nil}.
@@ -1336,6 +1335,11 @@ This is an alist of encoding / function
@vindex rfc2047-encoded-word-regexp
When decoding words, this library looks for matches to this regexp.
+@item rfc2047-encode-encoded-words
+@vindex rfc2047-encode-encoded-words
+The boolean variable specifies whether encoded words
+(e.g. @samp{=?hello?=}) should be encoded again.
+
@end table
Those were the variables, and these are this functions:
@@ -1366,6 +1370,24 @@ Decode the encoded words in the region.
@findex rfc2047-decode-string
Decode a string and return the results.
+@item rfc2047-encode-parameter
+@findex rfc2047-encode-parameter
+Encode a parameter in the RFC2047-like style. This is a replacement for
+the @code{rfc2231-encode-string} function. @xref{rfc2231}.
+
+When attaching files as @acronym{MIME} parts, we should use the RFC2231
+encoding to specify the file names containing non-@acronym{ASCII}
+characters. However, many mail softwares don't support it in practice
+and recipients won't be able to extract files with correct names.
+Instead, the RFC2047-like encoding is acceptable generally. This
+function provides the very RFC2047-like encoding, resigning to such a
+regrettable trend. To use it, put the following line in your
+(a)file{~/.gnus.el} file:
+
+@lisp
+(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter)
+@end lisp
+
@end table
@@ -1481,7 +1503,7 @@ Take a time and return the number of day
@item safe-date-to-time
Take a date and return a time. If the date is not syntactically valid,
-return a ``zero'' date.
+return a ``zero'' time.
@item time-less-p
Take two times and say whether the first time is less (i. e., earlier)
1.6 +1601 -1912XEmacs/packages/xemacs-packages/gnus/texi/gnus-faq.texi
Index: gnus-faq.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/texi/gnus-faq.texi,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- gnus-faq.texi 2005/03/13 00:25:34 1.5
+++ gnus-faq.texi 2005/11/15 03:46:32 1.6
@@ -1,210 +1,203 @@
-@c Insert "\input texinfo" at 1st line before texing this file alone.
-@c -*-texinfo-*-
-@c Copyright (C) 1995, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
+@c \input texinfo @c -*-texinfo-*-
+@c Uncomment 1st line before texing this file alone.
+@c %**start of header
+@c Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+@c
+@c Do not modify this file, it was generated from gnus-faq.xml, available from
+@c <
URL:http://my.gnus.org/FAQ/>.
+@c
@setfilename gnus-faq.info
+@settitle Frequently Asked Questions
+@c %**end of header
+@c
-@c Frequently Asked Questions, FAQ - Introduction, Emacs for Heathens, Top
-
@node Frequently Asked Questions
-@comment node-name, next, previous, up
-
-@c @chapter Frequently Asked Questions
@section Frequently Asked Questions
-@cindex FAQ
-@cindex Frequently Asked Questions
-@c - Uncomment @chapter, comment @section
-@c - run (texinfo-every-node-update)
-@c - revert it.
-
@menu
-* FAQ - Introduction:: About Gnus and this FAQ.
-* FAQ 1 - Installation:: Installation of Gnus.
-* FAQ 2 - Startup / Group buffer:: Start up questions and the first
- buffer Gnus shows you.
-* FAQ 3 - Getting messages:: Making Gnus read your mail and news.
-* FAQ 4 - Reading messages:: How to efficiently read messages.
-* FAQ 5 - Composing messages:: Composing mails or Usenet postings.
-* FAQ 6 - Old messages:: Importing, archiving, searching
- and deleting messages.
-* FAQ 7 - Gnus in a dial-up environment:: Reading mail and news while offline.
-* FAQ 8 - Getting help:: When this FAQ isn't enough.
-* FAQ 9 - Tuning Gnus:: How to make Gnus faster.
-* FAQ - Glossary:: Terms used in the FAQ explained.
+* FAQ - Changes::
+* FAQ - Introduction:: About Gnus and this FAQ.
+* FAQ 1 - Installation FAQ:: Installation of Gnus.
+* FAQ 2 - Startup / Group buffer:: Start up questions and the
+ first buffer Gnus shows you.
+* FAQ 3 - Getting Messages:: Making Gnus read your mail
+ and news.
+* FAQ 4 - Reading messages:: How to efficiently read
+ messages.
+* FAQ 5 - Composing messages:: Composing mails or Usenet
+ postings.
+* FAQ 6 - Old messages:: Importing, archiving,
+ searching and deleting messages.
+* FAQ 7 - Gnus in a dial-up environment:: Reading mail and news while
+ offline.
+* FAQ 8 - Getting help:: When this FAQ isn't enough.
+* FAQ 9 - Tuning Gnus:: How to make Gnus faster.
+* FAQ - Glossary:: Terms used in the FAQ
+ explained.
@end menu
-
@subheading Abstract
- This is the new Gnus Frequently Asked Questions list. If you have a
-Web browser, the official hypertext version is at
-@uref{http://my.gnus.org/FAQ/}, the Docbook source is available from
-@uref{http://sourceforge.net/projects/gnus/}.
-
+This is the new Gnus Frequently Asked Questions list.
+If you have a Web browser, the official hypertext version is at
+@uref{http://my.gnus.org/FAQ/},
+the Docbook source is available from
+@uref{http://sourceforge.net/projects/gnus/,
http://sourceforge.net}.
+
+Please submit features and suggestions to the
+@email{faq-discuss@(a)my.gnus.org, FAQ discussion list}.
+The list is protected against junk mail with
+@uref{http://smarden.org/qconfirm/index.html, qconfirm}. As
+a subscriber, your submissions will automatically pass. You can
+also subscribe to the list by sending a blank email to
+@email{faq-discuss-subscribe@(a)my.gnus.org, faq-discuss-subscribe@(a)my.gnus.org}
+and
@uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss,
browse
+the archive}.
- Please submit features and suggestions to the
- @email{faq-discuss@(a)my.gnus.org,FAQ discussion list}.
- The list is protected against junk mail with
- @uref{http://smarden.org/qconfirm/index.html,qconfirm, qconfirm}. As
- a subscriber, your submissions will automatically pass. You can
- also subscribe to the list by sending a blank email to
- @email{faq-discuss-subscribe@(a)my.gnus.org}
- and
-
@uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss,browse
- the archive, browse the archive}.
-
-@node FAQ - Introduction, FAQ 1 - Installation, Frequently Asked Questions, Frequently
Asked Questions
-@comment node-name, next, previous, up
-@heading Introduction
+@node FAQ - Changes
+@subheading Changes
-This is the Gnus Frequently Asked Questions list.
-Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented
- as a part of Emacs. It's been around in some form for almost a decade
- now, and has been distributed as a standard part of Emacs for much of
- that time. Gnus 5 is the latest (and greatest) incarnation. The
- original version was called GNUS, and was written by Masanobu UMEDA.
- When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and
- decided to rewrite Gnus.
-
- Its biggest strength is the fact that it is extremely
- customizable. It is somewhat intimidating at first glance, but
- most of the complexity can be ignored until you're ready to take
- advantage of it. If you receive a reasonable volume of e-mail
- (you're on various mailing lists), or you would like to read
- high-volume mailing lists but cannot keep up with them, or read
- high volume newsgroups or are just bored, then Gnus is what you
- want.
-
- This FAQ was maintained by Justin Sheehy until March 2002. He
- would like to thank Steve Baur and Per Abrahamsen for doing a wonderful
- job with this FAQ before him. We would like to do the same - thanks,
- Justin!
-
- If you have a Web browser, the official hypertext version is at:@*
- @uref{http://my.gnus.org/FAQ/}.
- This version is much nicer than the unofficial hypertext
- versions that are archived at Utrecht, Oxford, Smart Pages, Ohio
- State, and other FAQ archives. See the resources question below
- if you want information on obtaining it in another format.
-
+@itemize @bullet
+
+@item
+Updated FAQ to reflect release of Gnus 5.10 and start of
+No Gnus development.
+@end itemize
- The information contained here was compiled with the assistance
- of the Gnus development mailing list, and any errors or
- misprints are the
my.gnus.org team's fault, sorry.
+@node FAQ - Introduction
+@subheading Introduction
+This is the Gnus Frequently Asked Questions list.
-@ifnottex
-@node FAQ 1 - Installation, FAQ 2 - Startup / Group buffer, FAQ - Introduction,
Frequently Asked Questions
-@end ifnottex
-@subsection Installation
+Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented
+as a part of Emacs. It's been around in some form for almost a decade
+now, and has been distributed as a standard part of Emacs for much of
+that time. Gnus 5 is the latest (and greatest) incarnation. The
+original version was called GNUS, and was written by Masanobu UMEDA.
+When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and
+decided to rewrite Gnus.
+
+Its biggest strength is the fact that it is extremely
+customizable. It is somewhat intimidating at first glance, but
+most of the complexity can be ignored until you're ready to take
+advantage of it. If you receive a reasonable volume of e-mail
+(you're on various mailing lists), or you would like to read
+high-volume mailing lists but cannot keep up with them, or read
+high volume newsgroups or are just bored, then Gnus is what you
+want.
+
+This FAQ was maintained by Justin Sheehy until March 2002. He
+would like to thank Steve Baur and Per Abrahamsen for doing a wonderful
+job with this FAQ before him. We would like to do the same - thanks,
+Justin!
+
+If you have a Web browser, the official hypertext version is at:
+@uref{http://my.gnus.org/FAQ/}.
+This version is much nicer than the unofficial hypertext
+versions that are archived at Utrecht, Oxford, Smart Pages, Ohio
+State, and other FAQ archives. See the resources question below
+if you want information on obtaining it in another format.
+
+The information contained here was compiled with the assistance
+of the Gnus development mailing list, and any errors or
+misprints are the
my.gnus.org team's fault, sorry.
+@node FAQ 1 - Installation FAQ
+@subsection Installation FAQ
+
@menu
-* [1.1]:: What is the latest version of Gnus?
-* [1.2]:: What's new in 5.10?
-* [1.3]:: Where and how to get Gnus?
-* [1.4]:: What to do with the tarball now?
-* [1.5]:: Which version of Emacs do I need?
-* [1.6]:: How do I run Gnus on both Emacs and XEmacs?
+* [1.1]:: What is the latest version of Gnus?
+* [1.2]:: What's new in 5.10?
+* [1.3]:: Where and how to get Gnus?
+* [1.4]:: What to do with the tarball now?
+* [1.5]:: I sometimes read references to No Gnus and Oort Gnus, what
+ are those?
+* [1.6]:: Which version of Emacs do I need?
+* [1.7]:: How do I run Gnus on both Emacs and XEmacs?
@end menu
-
-@ifnottex
-@node [1.1], [1.2], FAQ 1 - Installation, FAQ 1 - Installation
-@end ifnottex
-@subsubheading Question 1.1:
+@node [1.1]
+@subsubheading Question 1.1
What is the latest version of Gnus?
-Answer:
+@subsubheading Answer
- Jingle please: Gnus 5.10 is released, get it while it's
- hot! As well as the step in version number is rather
- small, Gnus 5.10 has tons of new features which you
- shouldn't miss, however if you are cautious, you might
- prefer to stay with 5.8.8 respectively 5.9 (they are
- basically the same) until some bugfix releases are out.
-
-@ifnottex
-@node [1.2], [1.3], [1.1], FAQ 1 - Installation
-@end ifnottex
-@subsubheading Question 1.2:
+Jingle please: Gnus 5.10 is released, get it while it's
+hot! As well as the step in version number is rather
+small, Gnus 5.10 has tons of new features which you
+shouldn't miss. The current release (5.10.6) should be at
+least as stable as the latest release of the 5.8 series.
-What's new in 5.10?
+@node [1.2]
+@subsubheading Question 1.2
-Answer:
+What's new in 5.10?
- First of all, you should have a look into the file
- GNUS-NEWS in the toplevel directory of the Gnus tarball,
- there the most important changes are listed. Here's a
- short list of the changes I find especially
- important/interesting:
-
+@subsubheading Answer
-
+First of all, you should have a look into the file
+GNUS-NEWS in the toplevel directory of the Gnus tarball,
+there the most important changes are listed. Here's a
+short list of the changes I find especially
+important/interesting:
-@itemize @bullet{}
+@itemize @bullet
@item
- Major rewrite of the Gnus agent, Gnus agent is now
- active by default.
-
+Major rewrite of the Gnus agent, Gnus agent is now
+active by default.
+
@item
- Many new article washing functions for dealing with
- ugly formatted articles.
-
+Many new article washing functions for dealing with
+ugly formatted articles.
+
@item
- Anti Spam features.
-
+Anti Spam features.
+
@item
- message-utils now included in Gnus.
-
+Message-utils now included in Gnus.
+
@item
- New format specifiers for summary lines, e.g. %B for
- a complex trn-style thread tree.
-
+New format specifiers for summary lines, e.g. %B for
+a complex trn-style thread tree.
@end itemize
-
-@ifnottex
-@node [1.3], [1.4], [1.2], FAQ 1 - Installation
-@end ifnottex
-@subsubheading Question 1.3:
-
-Where and how to get Gnus?
-
-Answer:
- The latest released version of Gnus isn't included in
- Emacs 21 and until now it also isn't available through the
- package system of XEmacs 21.4, therefor you should get the
- Gnus tarball from
- @uref{http://www.gnus.org/dist/gnus.tar.gz}
- or via anonymous FTP from
- @uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}.
-
-@ifnottex
-@node [1.4], [1.5], [1.3], FAQ 1 - Installation
-@end ifnottex
-@subsubheading Question 1.4:
+@node [1.3]
+@subsubheading Question 1.3
- What to do with the tarball now?
-
+Where and how to get Gnus?
-Answer:
+@subsubheading Answer
- Untar it via @samp{tar xvzf gnus.tar.gz} and do the common
- @samp{./configure; make; make install} circle.
- (under MS-Windows either get the Cygwin environment from
- @uref{http://www.cygwin.com}
- which allows you to do what's described above or unpack the
- tarball with some packer (e.g. Winace from
- @uref{http://www.winace.com})
- and use the batch-file make.bat included in the tarball to install
- Gnus. If you don't want to (or aren't allowed to) install Gnus
- system-wide, you can install it in your home directory and add the
- following lines to your ~/.xemacs/init.el or ~/.emacs:
-
+The latest released version of Gnus isn't included in
+Emacs 21, therefor you should get the Gnus tarball from
+@uref{http://www.gnus.org/dist/gnus.tar.gz}
+or via anonymous FTP from
+@uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}.
+If you use XEmacs instead of Emacs you can use XEmacs'
+package system instead.
+
+@node [1.4]
+@subsubheading Question 1.4
+
+What to do with the tarball now?
+
+@subsubheading Answer
+
+Untar it via @samp{tar xvzf gnus.tar.gz} and do the common
+(a)samp{./configure; make; make install} circle.
+(under MS-Windows either get the Cygwin environment from
+@uref{http://www.cygwin.com}
+which allows you to do what's described above or unpack the
+tarball with some packer (e.g. Winace from
+@uref{http://www.winace.com})
+and use the batch-file make.bat included in the tarball to install
+Gnus.) If you don't want to (or aren't allowed to) install Gnus
+system-wide, you can install it in your home directory and add the
+following lines to your ~/.xemacs/init.el or ~/.emacs:
@example
(add-to-list 'load-path "/path/to/gnus/lisp")
@@ -212,436 +205,395 @@ Answer:
(add-to-list 'Info-directory-list "/path/to/gnus/texi/")
(add-to-list 'Info-default-directory-list "/path/to/gnus/texi/"))
@end example
-
@noindent
- Make sure that you don't have any Gnus related stuff
- before this line, on MS Windows use something like
- "C:/path/to/lisp" (yes, "/").
-
-@ifnottex
-@node [1.5], [1.6], [1.4], FAQ 1 - Installation
-@end ifnottex
-@subsubheading Question 1.5:
+Make sure that you don't have any Gnus related stuff
+before this line, on MS Windows use something like
+"C:/path/to/lisp" (yes, "/").
+
+@node [1.5]
+@subsubheading Question 1.5
+
+I sometimes read references to No Gnus and Oort Gnus,
+what are those?
+
+@subsubheading Answer
+
+Oort Gnus was the name of the development version of
+Gnus, which became Gnus 5.10 in autumn 2003. No Gnus is
+the name of the current development version which will
+once become Gnus 5.12 or Gnus 6. (If you're wondering why
+not 5.11, the odd version numbers are normally used for
+the Gnus versions bundled with Emacs)
+
+@node [1.6]
+@subsubheading Question 1.6
+
Which version of Emacs do I need?
-Answer:
+@subsubheading Answer
- Gnus 5.10 requires an Emacs version that is greater
- than or equal to Emacs 20.7 or XEmacs 21.1.
-
-@ifnottex
-@node [1.6], , [1.5], FAQ 1 - Installation
-@end ifnottex
-@subsubheading Question 1.6:
+Gnus 5.10 requires an Emacs version that is greater
+than or equal to Emacs 20.7 or XEmacs 21.1. The
+development versions of Gnus (aka No Gnus) require Emacs
+21 or XEmacs 21.4.
+@node [1.7]
+@subsubheading Question 1.7
+
How do I run Gnus on both Emacs and XEmacs?
-Answer:
+@subsubheading Answer
- You can't use the same copy of Gnus in both as the Lisp
- files are byte-compiled to a format which is different
- depending on which Emacs did the compilation. Get one copy
- of Gnus for Emacs and one for XEmacs.
-
-@ifnottex
-@node FAQ 2 - Startup / Group buffer, FAQ 3 - Getting messages, FAQ 1 - Installation,
Frequently Asked Questions
-@end ifnottex
+You can't use the same copy of Gnus in both as the Lisp
+files are byte-compiled to a format which is different
+depending on which Emacs did the compilation. Get one copy
+of Gnus for Emacs and one for XEmacs.
+
+@node FAQ 2 - Startup / Group buffer
@subsection Startup / Group buffer
@menu
-* [2.1]:: Every time I start Gnus I get a message
- "Gnus auto-save file exists. Do you want to read it?",
- what does this mean and how to prevent it?
-* [2.2]:: Gnus doesn't remember which groups I'm subscribed to, what's
this?
-* [2.3]:: How to change the format of the lines in Group buffer?
-* [2.4]:: My group buffer becomes a bit crowded, is there a way to sort my
- groups into categories so I can easier browse through them?
-* [2.5]:: How to manually sort the groups in Group buffer? How to sort the
- groups in a topic?
+* [2.1]:: Every time I start Gnus I get a message "Gnus auto-save
+ file exists. Do you want to read it?", what does this mean and
+ how to prevent it?
+* [2.2]:: Gnus doesn't remember which groups I'm subscribed to,
+ what's this?
+* [2.3]:: How to change the format of the lines in Group buffer?
+* [2.4]:: My group buffer becomes a bit crowded, is there a way to
+ sort my groups into categories so I can easier browse through
+ them?
+* [2.5]:: How to manually sort the groups in Group buffer? How to
+ sort the groups in a topic?
@end menu
-@ifnottex
-@node [2.1], [2.2], FAQ 2 - Startup / Group buffer, FAQ 2 - Startup / Group buffer
-@end ifnottex
-@subsubheading Question 2.1:
-
- Every time I start Gnus I get a message "Gnus auto-save
- file exists. Do you want to read it?", what does this mean
- and how to prevent it?
-
+@node [2.1]
+@subsubheading Question 2.1
-Answer:
+Every time I start Gnus I get a message "Gnus auto-save
+file exists. Do you want to read it?", what does this mean
+and how to prevent it?
- This message means that the last time you used Gnus, it
- wasn't properly exited and therefor couldn't write its
- informations to disk (e.g. which messages you read), you
- are now asked if you want to restore those informations
- from the auto-save file.
-
+@subsubheading Answer
- To prevent this message make sure you exit Gnus
- via @samp{q} in group buffer instead of
- just killing Emacs.
-
-@ifnottex
-@node [2.2], [2.3], [2.1], FAQ 2 - Startup / Group buffer
-@end ifnottex
-@subsubheading Question: 2.2
+This message means that the last time you used Gnus, it
+wasn't properly exited and therefor couldn't write its
+informations to disk (e.g. which messages you read), you
+are now asked if you want to restore those informations
+from the auto-save file.
- Gnus doesn't remember which groups I'm subscribed to,
- what's this?
-
+To prevent this message make sure you exit Gnus
+via @samp{q} in group buffer instead of
+just killing Emacs.
-Answer:
+@node [2.2]
+@subsubheading Question 2.2
- You get the message described in the q/a pair above while
- starting Gnus, right? It's an other symptom for the same
- problem, so read the answer above.
-
-@ifnottex
-@node [2.3], [2.4], [2.2], FAQ 2 - Startup / Group buffer
-@end ifnottex
-@subsubheading Question 2.3:
+Gnus doesn't remember which groups I'm subscribed to,
+what's this?
- How to change the format of the lines in Group buffer?
-
+@subsubheading Answer
-Answer:
+You get the message described in the q/a pair above while
+starting Gnus, right? It's an other symptom for the same
+problem, so read the answer above.
- You've got to tweak the value of the variable
- gnus-group-line-format. See the manual node "Group Line
- Specification" for information on how to do this. An
- example for this (guess from whose .gnus :-)):
-
+@node [2.3]
+@subsubheading Question 2.3
-@example
+How to change the format of the lines in Group buffer?
-(setq gnus-group-line-format "%P%M%S[%5t]%5y : %(%g%)\n")
-
-@end example
-
-@ifnottex
-@node [2.4], [2.5], [2.3], FAQ 2 - Startup / Group buffer
-@end ifnottex
-@subsubheading Question 2.4:
-
- My group buffer becomes a bit crowded, is there a way to
- sort my groups into categories so I can easier browse
- through them?
-
+@subsubheading Answer
-Answer:
+You've got to tweak the value of the variable
+gnus-group-line-format. See the manual node "Group Line
+Specification" for information on how to do this. An
+example for this (guess from whose .gnus :-)):
- Gnus offers the topic mode, it allows you to sort your
- groups in, well, topics, e.g. all groups dealing with
- Linux under the topic linux, all dealing with music under
- the topic music and all dealing with scottish music under
- the topic scottish which is a subtopic of music.
-
+@example
+(setq gnus-group-line-format "%P%M%S[%5t]%5y : %(%g%)\n")
+@end example
+@noindent
- To enter topic mode, just hit t while in Group buffer. Now
- you can use @samp{T n} to create a topic
- at point and @samp{T m} to move a group to
- a specific topic. For more commands see the manual or the
- menu. You might want to include the %P specifier at the
- beginning of your gnus-group-line-format variable to have
- the groups nicely indented.
-
-@ifnottex
-@node [2.5], , [2.4], FAQ 2 - Startup / Group buffer
-@end ifnottex
-@subsubheading Question 2.5:
+@node [2.4]
+@subsubheading Question 2.4
- How to manually sort the groups in Group buffer? How to
- sort the groups in a topic?
-
+My group buffer becomes a bit crowded, is there a way to
+sort my groups into categories so I can easier browse
+through them?
+
+@subsubheading Answer
+
+Gnus offers the topic mode, it allows you to sort your
+groups in, well, topics, e.g. all groups dealing with
+Linux under the topic linux, all dealing with music under
+the topic music and all dealing with scottish music under
+the topic scottish which is a subtopic of music.
+
+To enter topic mode, just hit t while in Group buffer. Now
+you can use @samp{T n} to create a topic
+at point and @samp{T m} to move a group to
+a specific topic. For more commands see the manual or the
+menu. You might want to include the %P specifier at the
+beginning of your gnus-group-line-format variable to have
+the groups nicely indented.
+
+@node [2.5]
+@subsubheading Question 2.5
+
+How to manually sort the groups in Group buffer? How to
+sort the groups in a topic?
+
+@subsubheading Answer
+
+Move point over the group you want to move and
+hit @samp{C-k}, now move point to the
+place where you want the group to be and
+hit @samp{C-y}.
-Answer:
+@node FAQ 3 - Getting Messages
+@subsection Getting Messages
- Move point over the group you want to move and
- hit @samp{C-k}, now move point to the
- place where you want the group to be and
- hit @samp{C-y}.
-
-@ifnottex
-@node FAQ 3 - Getting messages, FAQ 4 - Reading messages, FAQ 2 - Startup / Group
buffer, Frequently Asked Questions
-@end ifnottex
-@subsection Getting messages
-
@menu
-* [3.1]:: I just installed Gnus, started it via M-x gnus but it only says
- "nntp (news) open error", what to do?
-* [3.2]:: I'm working under Windows and have no idea what ~/.gnus means.
-* [3.3]:: My news server requires authentication, how to store user name
- and password on disk?
-* [3.4]:: Gnus seems to start up OK, but I can't find out how to
- subscribe to a group.
-* [3.5]:: Gnus doesn't show all groups / Gnus says I'm not allowed to
- post on this server as well as I am, what's that?
-* [3.6]:: I want Gnus to fetch news from several servers, is this possible?
-* [3.7]:: And how about local spool files?
-* [3.8]:: OK, reading news works now, but I want to be able to read my mail
- with Gnus, too. How to do it?
-* [3.9]:: And what about IMAP?
-* [3.10]:: At the office we use one of those MS Exchange servers,
- can I use Gnus to read my mail from it?
-* [3.11]:: Can I tell Gnus not to delete the mails on the server
- it retrieves via POP3?
+* [3.1]:: I just installed Gnus, started it via @samp{M-x gnus}
+ but it only says "nntp (news) open error", what to do?
+* [3.2]:: I'm working under Windows and have no idea what ~/.gnus.el
+ means.
+* [3.3]:: My news server requires authentication, how to store user
+ name and password on disk?
+* [3.4]:: Gnus seems to start up OK, but I can't find out how to
+ subscribe to a group.
+* [3.5]:: Gnus doesn't show all groups / Gnus says I'm not allowed
+ to post on this server as well as I am, what's that?
+* [3.6]:: I want Gnus to fetch news from several servers, is this
+ possible?
+* [3.7]:: And how about local spool files?
+* [3.8]:: OK, reading news works now, but I want to be able to read
+ my mail with Gnus, too. How to do it?
+* [3.9]:: And what about IMAP?
+* [3.10]:: At the office we use one of those MS Exchange servers, can
+ I use Gnus to read my mail from it?
+* [3.11]:: Can I tell Gnus not to delete the mails on the server it
+ retrieves via POP3?
@end menu
-
-@ifnottex
-@node [3.1], [3.2], FAQ 3 - Getting messages, FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.1:
-
- I just installed Gnus, started it via
- @samp{M-x gnus}
- but it only says "nntp (news) open error", what to do?
-
-Answer:
+@node [3.1]
+@subsubheading Question 3.1
- You've got to tell Gnus where to fetch the news from. Read
- the documentation for information on how to do this. As a
- first start, put those lines in ~/.gnus:
-
+I just installed Gnus, started it via
+@samp{M-x gnus}
+but it only says "nntp (news) open error", what to do?
+
+@subsubheading Answer
+
+You've got to tell Gnus where to fetch the news from. Read
+the documentation for information on how to do this. As a
+first start, put those lines in ~/.gnus.el:
@example
(setq gnus-select-method '(nntp "news.yourprovider.net"))
(setq user-mail-address "you@(a)yourprovider.net")
(setq user-full-name "Your Name")
@end example
-
-@ifnottex
-@node [3.2], [3.3], [3.1], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.2:
+@noindent
- I'm working under Windows and have no idea what ~/.gnus means.
-
+@node [3.2]
+@subsubheading Question 3.2
-Answer:
+I'm working under Windows and have no idea what ~/.gnus.el means.
- The ~/ means the home directory where Gnus and Emacs look for the
-configuration files. However, you don't really need to know what this
-means, it suffices that Emacs knows what it means :-) You can type
-@samp{C-x C-f ~/.gnus RET } (yes, with the forward slash, even on
-Windows), and Emacs will open the right file for you. (It will most
-likely be new, and thus empty.) However, I'd discourage you from
-doing so, since the directory Emacs chooses will most certainly not be
-what you want, so let's do it the correct way. The first thing you've
-got to do is to create a suitable directory (no blanks in directory
-name please) e.g. @file{c:\myhome}. Then you must set the environment
-variable HOME to this directory. To do this under Win9x or Me include
-the line
-
+@subsubheading Answer
-@example
+The ~/ means the home directory where Gnus and Emacs look
+for the configuration files. However, you don't really
+need to know what this means, it suffices that Emacs knows
+what it means :-) You can type
+@samp{C-x C-f ~/.gnus.el RET }
+(yes, with the forward slash, even on Windows), and
+Emacs will open the right file for you. (It will most
+likely be new, and thus empty.)
+However, I'd discourage you from doing so, since the
+directory Emacs chooses will most certainly not be what
+you want, so let's do it the correct way.
+The first thing you've got to do is to
+create a suitable directory (no blanks in directory name
+please) e.g. c:\myhome. Then you must set the environment
+variable HOME to this directory. To do this under Win9x
+or Me include the line
+@example
SET HOME=C:\myhome
-
@end example
-
@noindent
- in your autoexec.bat and reboot. Under NT, 2000 and XP,
- hit Winkey+Pause/Break to enter system options (if it
- doesn't work, go to Control Panel -> System). There you'll
- find the possibility to set environment variables, create
- a new one with name HOME and value @file{c:\myhome}, a reboot is
- not necessary.
-
- Now to create ~/.gnus, say
- @samp{C-x C-f ~/.gnus RET C-x C-s}.
- in Emacs.
-
-@ifnottex
-@node [3.3], [3.4], [3.2], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.3:
+in your autoexec.bat and reboot. Under NT, 2000 and XP,
+hit Winkey+Pause/Break to enter system options (if it
+doesn't work, go to Control Panel -> System). There you'll
+find the possibility to set environment variables, create
+a new one with name HOME and value C:\myhome, a reboot is
+not necessary.
+
+Now to create ~/.gnus.el, say
+@samp{C-x C-f ~/.gnus.el RET C-x C-s}.
+in Emacs.
+
+@node [3.3]
+@subsubheading Question 3.3
- My news server requires authentication, how to store
- user name and password on disk?
-
+My news server requires authentication, how to store
+user name and password on disk?
-Answer:
+@subsubheading Answer
- Create a file ~/.authinfo which includes for each server a line like this
-
+Create a file ~/.authinfo which includes for each server a line like this
@example
machine
news.yourprovider.net login YourUserName password YourPassword
@end example
-
@noindent
.
- Make sure that the file isn't readable to others if you
- work on a OS which is capable of doing so. (Under Unix
- say
-
+Make sure that the file isn't readable to others if you
+work on a OS which is capable of doing so. (Under Unix
+say
@example
chmod 600 ~/.authinfo
@end example
-
@noindent
- in a shell.)
-
-@ifnottex
-@node [3.4], [3.5], [3.3], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.4:
- Gnus seems to start up OK, but I can't find out how to
- subscribe to a group.
-
+in a shell.)
-Answer:
+@node [3.4]
+@subsubheading Question 3.4
- If you know the name of the group say @samp{U
- name.of.group RET} in group buffer (use the
- tab-completion Luke). Otherwise hit ^ in group buffer,
- this brings you to the server buffer. Now place point (the
- cursor) over the server which carries the group you want,
- hit @samp{RET}, move point to the group
- you want to subscribe to and say @samp{u}
- to subscribe to it.
-
-@ifnottex
-@node [3.5], [3.6], [3.4], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.5:
+Gnus seems to start up OK, but I can't find out how to
+subscribe to a group.
- Gnus doesn't show all groups / Gnus says I'm not allowed to
- post on this server as well as I am, what's that?
-
+@subsubheading Answer
-Answer:
+If you know the name of the group say @samp{U
+name.of.group RET} in group buffer (use the
+tab-completion Luke). Otherwise hit ^ in group buffer,
+this brings you to the server buffer. Now place point (the
+cursor) over the server which carries the group you want,
+hit @samp{RET}, move point to the group
+you want to subscribe to and say @samp{u}
+to subscribe to it.
- Some providers allow restricted anonymous access and full
- access only after authorization. To make Gnus send authinfo
- to those servers append
-
+@node [3.5]
+@subsubheading Question 3.5
+
+Gnus doesn't show all groups / Gnus says I'm not allowed to
+post on this server as well as I am, what's that?
+
+@subsubheading Answer
+
+Some providers allow restricted anonymous access and full
+access only after authorization. To make Gnus send authinfo
+to those servers append
@example
force yes
@end example
-
-
@noindent
- to the line for those servers in ~/.authinfo.
-@ifnottex
-@node [3.6], [3.7], [3.5], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.6:
+to the line for those servers in ~/.authinfo.
- I want Gnus to fetch news from several servers, is this possible?
-
+@node [3.6]
+@subsubheading Question 3.6
-Answer:
+I want Gnus to fetch news from several servers, is this possible?
- Of course. You can specify more sources for articles in the
- variable gnus-secondary-select-methods. Add something like
- this in ~/.gnus:
-
+@subsubheading Answer
+Of course. You can specify more sources for articles in the
+variable gnus-secondary-select-methods. Add something like
+this in ~/.gnus.el:
+
@example
-(add-to-list 'gnus-secondary-select-methods
+(add-to-list 'gnus-secondary-select-methods
'(nntp "news.yourSecondProvider.net"))
-(add-to-list 'gnus-secondary-select-methods
- '(nntp "news.yourThirdProvider.net"))
+(add-to-list 'gnus-secondary-select-methods
+ '(nntp "news.yourThirdProvider.net"))
@end example
-
-@ifnottex
-@node [3.7], [3.8], [3.6], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.7:
+@noindent
- And how about local spool files?
-
+@node [3.7]
+@subsubheading Question 3.7
-Answer:
+And how about local spool files?
- No problem, this is just one more select method called
- nnspool, so you want this:
-
+@subsubheading Answer
+No problem, this is just one more select method called
+nnspool, so you want this:
+
@example
(add-to-list 'gnus-secondary-select-methods '(nnspool ""))
@end example
-
@noindent
- Or this if you don't want an NNTP Server as primary news source:
-
+
+Or this if you don't want an NNTP Server as primary news source:
@example
(setq gnus-select-method '(nnspool ""))
@end example
-
@noindent
- Gnus will look for the spool file in /usr/spool/news, if you
- want something different, change the line above to something like this:
-
+Gnus will look for the spool file in /usr/spool/news, if you
+want something different, change the line above to something like this:
+
@example
(add-to-list 'gnus-secondary-select-methods
- '(nnspool "" (nnspool-directory
"/usr/local/myspoolddir")))
+ '(nnspool ""
+ (nnspool-directory "/usr/local/myspoolddir")))
@end example
-
@noindent
- This sets the spool directory for this server only.
- You might have to specify more stuff like the program used
- to post articles, see the Gnus manual on how to do this.
-
-@ifnottex
-@node [3.8], [3.9], [3.7], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.8:
-
- OK, reading news works now, but I want to be able to read my mail
- with Gnus, too. How to do it?
-
-
-Answer:
- That's a bit harder since there are many possible sources
- for mail, many possible ways for storing mail and many
- different ways for sending mail. The most common cases are
- these: 1: You want to read your mail from a pop3 server and
- send them directly to a SMTP Server 2: Some program like
- fetchmail retrieves your mail and stores it on disk from
- where Gnus shall read it. Outgoing mail is sent by
- Sendmail, Postfix or some other MTA. Sometimes, you even
- need a combination of the above cases.
-
-
- However, the first thing to do is to tell Gnus in which way
- it should store the mail, in Gnus terminology which back end
- to use. Gnus supports many different back ends, the most
- commonly used one is nnml. It stores every mail in one file
- and is therefor quite fast. However you might prefer a one
- file per group approach if your file system has problems with
- many small files, the nnfolder back end is then probably the
- choice for you. To use nnml add the following to ~/.gnus:
-
+This sets the spool directory for this server only.
+You might have to specify more stuff like the program used
+to post articles, see the Gnus manual on how to do this.
+
+@node [3.8]
+@subsubheading Question 3.8
+
+OK, reading news works now, but I want to be able to read my mail
+with Gnus, too. How to do it?
+
+@subsubheading Answer
+
+That's a bit harder since there are many possible sources
+for mail, many possible ways for storing mail and many
+different ways for sending mail. The most common cases are
+these: 1: You want to read your mail from a pop3 server and
+send them directly to a SMTP Server 2: Some program like
+fetchmail retrieves your mail and stores it on disk from
+where Gnus shall read it. Outgoing mail is sent by
+Sendmail, Postfix or some other MTA. Sometimes, you even
+need a combination of the above cases.
+
+However, the first thing to do is to tell Gnus in which way
+it should store the mail, in Gnus terminology which back end
+to use. Gnus supports many different back ends, the most
+commonly used one is nnml. It stores every mail in one file
+and is therefor quite fast. However you might prefer a one
+file per group approach if your file system has problems with
+many small files, the nnfolder back end is then probably the
+choice for you. To use nnml add the following to ~/.gnus.el:
@example
(add-to-list 'gnus-secondary-select-methods '(nnml ""))
@end example
-
@noindent
- As you might have guessed, if you want nnfolder, it's
-
+As you might have guessed, if you want nnfolder, it's
+
@example
(add-to-list 'gnus-secondary-select-methods '(nnfolder ""))
@end example
-
+@noindent
- Now we need to tell Gnus, where to get it's mail from. If
- it's a POP3 server, then you need something like this:
-
+Now we need to tell Gnus, where to get it's mail from. If
+it's a POP3 server, then you need something like this:
@example
(eval-after-load "mail-source"
@@ -649,75 +601,68 @@ Answer:
:user "yourUserName"
:password "yourPassword")))
@end example
-
@noindent
- Make sure ~/.gnus isn't readable to others if you store
- your password there. If you want to read your mail from a
- traditional spool file on your local machine, it's
-
+Make sure ~/.gnus.el isn't readable to others if you store
+your password there. If you want to read your mail from a
+traditional spool file on your local machine, it's
+
@example
(eval-after-load "mail-source"
- '(add-to-list 'mail-sources '(file :path
"/path/to/spool/file")))
+ '(add-to-list 'mail-sources '(file :path
"/path/to/spool/file"))
@end example
-
@noindent
- If it's a Maildir, with one file per message as used by
- postfix, Qmail and (optionally) fetchmail it's
-
+
+If it's a Maildir, with one file per message as used by
+postfix, Qmail and (optionally) fetchmail it's
@example
(eval-after-load "mail-source"
'(add-to-list 'mail-sources '(maildir :path
"/path/to/Maildir/"
:subdirs ("cur" "new")))
@end example
-
@noindent
- And finally if you want to read your mail from several files
- in one directory, for example because procmail already split your
- mail, it's
-
+And finally if you want to read your mail from several files
+in one directory, for example because procmail already split your
+mail, it's
+
@example
(eval-after-load "mail-source"
- '(add-to-list 'mail-sources '(directory :path
"/path/to/procmail-dir/"
- :suffix ".prcml"))
+ '(add-to-list 'mail-sources
+ '(directory :path "/path/to/procmail-dir/"
+ :suffix ".prcml")))
@end example
-
@noindent
- Where :suffix ".prcml" tells Gnus only to use files with the
- suffix .prcml.
-
- OK, now you only need to tell Gnus how to send mail. If you
- want to send mail via sendmail (or whichever MTA is playing
- the role of sendmail on your system), you don't need to do
- anything. However, if you want to send your mail to an
- SMTP Server you need the following in your ~/.gnus
-
+Where :suffix ".prcml" tells Gnus only to use files with the
+suffix .prcml.
+OK, now you only need to tell Gnus how to send mail. If you
+want to send mail via sendmail (or whichever MTA is playing
+the role of sendmail on your system), you don't need to do
+anything. However, if you want to send your mail to an
+SMTP Server you need the following in your ~/.gnus.el
+
@example
(setq send-mail-function 'smtpmail-send-it)
(setq message-send-mail-function 'smtpmail-send-it)
(setq smtpmail-default-smtp-server "smtp.yourProvider.net")
@end example
-
-@ifnottex
-@node [3.9], [3.10], [3.8], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.9:
+@noindent
- And what about IMAP?
-
+@node [3.9]
+@subsubheading Question 3.9
-Answer:
+And what about IMAP?
- There are two ways of using IMAP with Gnus. The first one is
- to use IMAP like POP3, that means Gnus fetches the mail from
- the IMAP server and stores it on disk. If you want to do
- this (you don't really want to do this) add the following to
- ~/.gnus
-
+@subsubheading Answer
+
+There are two ways of using IMAP with Gnus. The first one is
+to use IMAP like POP3, that means Gnus fetches the mail from
+the IMAP server and stores it on disk. If you want to do
+this (you don't really want to do this) add the following to
+~/.gnus.el
@example
(add-to-list 'mail-sources '(imap :server "mail.mycorp.com"
@@ -728,490 +673,422 @@ Answer:
:mailbox "INBOX"
:fetchflag "\\Seen"))
@end example
-
@noindent
- You might have to tweak the values for stream and/or
- authentification, see the Gnus manual node "Mail Source
- Specifiers" for possible values.
-
- If you want to use IMAP the way it's intended, you've got to
- follow a different approach. You've got to add the nnimap
- back end to your select method and give the information
- about the server there.
-
+You might have to tweak the values for stream and/or
+authentification, see the Gnus manual node "Mail Source
+Specifiers" for possible values.
+
+If you want to use IMAP the way it's intended, you've got to
+follow a different approach. You've got to add the nnimap
+back end to your select method and give the information
+about the server there.
@example
-(add-to-list
- 'gnus-secondary-select-methods
- '(nnimap "Give the baby a name"
- (nnimap-address "imap.yourProvider.net")
- (nnimap-port 143)
- (nnimap-list-pattern "archive.*")))
+(add-to-list 'gnus-secondary-select-methods
+ '(nnimap "Give the baby a name"
+ (nnimap-address "imap.yourProvider.net")
+ (nnimap-port 143)
+ (nnimap-list-pattern "archive.*")))
@end example
-
@noindent
- Again, you might have to specify how to authenticate to the
- server if Gnus can't guess the correct way, see the Manual
- Node "IMAP" for detailed information.
-
-@ifnottex
-@node [3.10], [3.11], [3.9], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.10:
- At the office we use one of those MS Exchange servers, can I use
- Gnus to read my mail from it?
-
+Again, you might have to specify how to authenticate to the
+server if Gnus can't guess the correct way, see the Manual
+Node "IMAP" for detailed information.
+
+@node [3.10]
+@subsubheading Question 3.10
+
+At the office we use one of those MS Exchange servers, can I use
+Gnus to read my mail from it?
+
+@subsubheading Answer
+
+Offer your administrator a pair of new running shoes for
+activating IMAP on the server and follow the instructions
+above.
+
+@node [3.11]
+@subsubheading Question 3.11
+
+Can I tell Gnus not to delete the mails on the server it
+retrieves via POP3?
+
+@subsubheading Answer
+
+First of all, that's not the way POP3 is intended to work,
+if you have the possibility, you should use the IMAP
+Protocol if you want your messages to stay on the
+server. Nevertheless there might be situations where you
+need the feature, but sadly Gnus itself has no predefined
+functionality to do so.
+
+However this is Gnus county so there are possibilities to
+achieve what you want. The easiest way is to get an external
+program which retrieves copies of the mail and stores them
+on disk, so Gnus can read it from there. On Unix systems you
+could use e.g. fetchmail for this, on MS Windows you can use
+Hamster, an excellent local news and mail server.
+
+The other solution would be, to replace the method Gnus
+uses to get mail from POP3 servers by one which is capable
+of leaving the mail on the server. If you use XEmacs, get
+the package mail-lib, it includes an enhanced pop3.el,
+look in the file, there's documentation on how to tell
+Gnus to use it and not to delete the retrieved mail. For
+GNU Emacs look for the file epop3.el which can do the same
+(If you know the home of this file, please send me an
+e-mail). You can also tell Gnus to use an external program
+(e.g. fetchmail) to fetch your mail, see the info node
+"Mail Source Specifiers" in the Gnus manual on how to do
+it.
-Answer:
-
- Offer your administrator a pair of new running shoes for
- activating IMAP on the server and follow the instructions
- above.
-
-@ifnottex
-@node [3.11], , [3.10], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.11:
-
- Can I tell Gnus not to delete the mails on the server it
- retrieves via POP3?
-
-
-Answer:
-
- First of all, that's not the way POP3 is intended to work,
- if you have the possibility, you should use the IMAP
- Protocol if you want your messages to stay on the
- server. Nevertheless there might be situations where you
- need the feature, but sadly Gnus itself has no predefined
- functionality to do so.
-
-
- However this is Gnus county so there are possibilities to
- achieve what you want. The easiest way is to get an external
- program which retrieves copies of the mail and stores them
- on disk, so Gnus can read it from there. On Unix systems you
- could use e.g. fetchmail for this, on MS Windows you can use
- Hamster, an excellent local news and mail server.
-
-
- The other solution would be, to replace the method Gnus
- uses to get mail from POP3 servers by one which is capable
- of leaving the mail on the server. If you use XEmacs, get
- the package mail-lib, it includes an enhanced pop3.el,
- look in the file, there's documentation on how to tell
- Gnus to use it and not to delete the retrieved mail. For
- GNU Emacs look for the file epop3.el which can do the same
- (If you know the home of this file, please send me an
- e-mail). You can also tell Gnus to use an external program
- (e.g. fetchmail) to fetch your mail, see the info node
- "Mail Source Specifiers" in the Gnus manual on how to do
- it.
-
-
-@ifnottex
-@node FAQ 4 - Reading messages, FAQ 5 - Composing messages, FAQ 3 - Getting messages,
Frequently Asked Questions
-@end ifnottex
+@node FAQ 4 - Reading messages
@subsection Reading messages
@menu
-* [4.1]:: When I enter a group, all read messages are gone.
- How to view them again?
-* [4.2]:: How to tell Gnus to show an important message every time
- I enter a group, even when it's read?
-* [4.3]:: How to view the headers of a message?
-* [4.4]:: How to view the raw unformatted message?
-* [4.5]:: How can I change the headers Gnus displays by default at the
- top of the article buffer?
-* [4.6]:: I'd like Gnus NOT to render HTML-mails but show me the
- text part if it's available. How to do it?
-* [4.7]:: Can I use some other browser than w3 to render my HTML-mails?
-* [4.8]:: Is there anything I can do to make poorly formatted mails
- more readable?
-* [4.9]:: Is there a way to automatically ignore posts by specific authors
- or with specific words in the subject? And can I highlight more
- interesting ones in some way?
-* [4.10]:: How can I disable threading in some (e.g. mail-) groups, or set
- other variables specific for some groups?
-* [4.11]:: Can I highlight messages written by me and follow-ups to those?
-* [4.12]:: The number of total messages in a group which Gnus displays in
- group buffer is by far to high, especially in mail groups.
- Is this a bug?
-* [4.13]:: I don't like the layout of summary and article buffer,
- how to change it? Perhaps even a three pane display?
-* [4.14]:: I don't like the way the Summary buffer looks, how to tweak it?
-* [4.15]:: How to split incoming mails in several groups?
+* [4.1]:: When I enter a group, all read messages are gone. How to
+ view them again?
+* [4.2]:: How to tell Gnus to show an important message every time I
+ enter a group, even when it's read?
+* [4.3]:: How to view the headers of a message?
+* [4.4]:: How to view the raw unformatted message?
+* [4.5]:: How can I change the headers Gnus displays by default at
+ the top of the article buffer?
+* [4.6]:: I'd like Gnus NOT to render HTML-mails but show me the
+ text part if it's available. How to do it?
+* [4.7]:: Can I use some other browser than w3 to render my
+ HTML-mails?
+* [4.8]:: Is there anything I can do to make poorly formatted mails
+ more readable?
+* [4.9]:: Is there a way to automatically ignore posts by specific
+ authors or with specific words in the subject? And can I highlight
+ more interesting ones in some way?
+* [4.10]:: How can I disable threading in some (e.g. mail-) groups,
+ or set other variables specific for some groups?
+* [4.11]:: Can I highlight messages written by me and follow-ups to
+ those?
+* [4.12]:: The number of total messages in a group which Gnus
+ displays in group buffer is by far to high, especially in mail
+ groups. Is this a bug?
+* [4.13]:: I don't like the layout of summary and article buffer, how
+ to change it? Perhaps even a three pane display?
+* [4.14]:: I don't like the way the Summary buffer looks, how to
+ tweak it?
+* [4.15]:: How to split incoming mails in several groups?
@end menu
-@ifnottex
-@node [4.1], [4.2], FAQ 4 - Reading messages, FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.1:
+@node [4.1]
+@subsubheading Question 4.1
- When I enter a group, all read messages are gone. How to view them again?
-
+When I enter a group, all read messages are gone. How to view them again?
-Answer:
+@subsubheading Answer
- If you enter the group by saying
- @samp{RET}
- in group buffer with point over the group, only unread and ticked messages are loaded.
Say
- @samp{C-u RET}
- instead to load all available messages. If you want only the e.g. 300 newest say
- @samp{C-u 300 RET}
-
+If you enter the group by saying
+@samp{RET}
+in group buffer with point over the group, only unread and ticked messages are loaded.
Say
+@samp{C-u RET}
+instead to load all available messages. If you want only the e.g. 300 newest say
+@samp{C-u 300 RET}
- Loading only unread messages can be annoying if you have threaded view enabled, say
-
+Loading only unread messages can be annoying if you have threaded view enabled, say
@example
(setq gnus-fetch-old-headers 'some)
@end example
-
-
@noindent
- in ~/.gnus to load enough old articles to prevent teared threads, replace 'some
with t to load
- all articles (Warning: Both settings enlarge the amount of data which is
- fetched when you enter a group and slow down the process of entering a group).
+in ~/.gnus.el to load enough old articles to prevent teared threads, replace 'some
with t to load
+all articles (Warning: Both settings enlarge the amount of data which is
+fetched when you enter a group and slow down the process of entering a group).
- If you already use Gnus 5.10, you can say
- @samp{/o N}
- In summary buffer to load the last N messages, this feature is not available in 5.8.8
-
+If you already use Gnus 5.10, you can say
+@samp{/o N}
+In summary buffer to load the last N messages, this feature is not available in 5.8.8
- If you don't want all old messages, but the parent of the message you're just
reading,
- you can say @samp{^}, if you want to retrieve the whole thread
- the message you're just reading belongs to, @samp{A T} is your friend.
-
-@ifnottex
-@node [4.2], [4.3], [4.1], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.2:
+If you don't want all old messages, but the parent of the message you're just
reading,
+you can say @samp{^}, if you want to retrieve the whole thread
+the message you're just reading belongs to, @samp{A T} is your friend.
- How to tell Gnus to show an important message every time I
- enter a group, even when it's read?
-
+@node [4.2]
+@subsubheading Question 4.2
-Answer:
+How to tell Gnus to show an important message every time I
+enter a group, even when it's read?
- You can tick important messages. To do this hit
- @samp{u} while point is in summary buffer
- over the message. When you want to remove the mark, hit
- either @samp{d} (this deletes the tick
- mark and set's unread mark) or @samp{M c}
- (which deletes all marks for the message).
-
-@ifnottex
-@node [4.3], [4.4], [4.2], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.3:
+@subsubheading Answer
- How to view the headers of a message?
-
+You can tick important messages. To do this hit
+@samp{u} while point is in summary buffer
+over the message. When you want to remove the mark, hit
+either @samp{d} (this deletes the tick
+mark and set's unread mark) or @samp{M c}
+(which deletes all marks for the message).
-Answer:
+@node [4.3]
+@subsubheading Question 4.3
- Say @samp{t}
- to show all headers, one more
- @samp{t}
- hides them again.
-
-@ifnottex
-@node [4.4], [4.5], [4.3], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.4:
+How to view the headers of a message?
- How to view the raw unformatted message?
-
+@subsubheading Answer
-Answer:
+Say @samp{t}
+to show all headers, one more
+@samp{t}
+hides them again.
- Say
- @samp{C-u g}
- to show the raw message
- @samp{g}
- returns to normal view.
-
-@ifnottex
-@node [4.5], [4.6], [4.4], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.5:
+@node [4.4]
+@subsubheading Question 4.4
- How can I change the headers Gnus displays by default at
- the top of the article buffer?
-
+How to view the raw unformatted message?
-Answer:
+@subsubheading Answer
- The variable gnus-visible-headers controls which headers
- are shown, its value is a regular expression, header lines
- which match it are shown. So if you want author, subject,
- date, and if the header exists, Followup-To and MUA / NUA
- say this in ~/.gnus:
-
+Say
+@samp{C-u g}
+to show the raw message
+@samp{g}
+returns to normal view.
+
+@node [4.5]
+@subsubheading Question 4.5
+
+How can I change the headers Gnus displays by default at
+the top of the article buffer?
+
+@subsubheading Answer
+
+The variable gnus-visible-headers controls which headers
+are shown, its value is a regular expression, header lines
+which match it are shown. So if you want author, subject,
+date, and if the header exists, Followup-To and MUA / NUA
+say this in ~/.gnus.el:
+
@example
-(setq gnus-visible-headers
- "^\\(From:\\|Subject:\\|Date:\\|Followup-To:\
-\\|X-Newsreader:\\|User-Agent:\\|X-Mailer:\\)")
+(setq gnus-visible-headers
+ '("^From" "^Subject" "^Date"
"^Newsgroups" "^Followup-To"
+ "^User-Agent" "^X-Newsreader" "^X-Mailer"))
@end example
-
-@ifnottex
-@node [4.6], [4.7], [4.5], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.6:
+@noindent
- I'd like Gnus NOT to render HTML-mails but show me the
- text part if it's available. How to do it?
-
+@node [4.6]
+@subsubheading Question 4.6
-Answer:
+I'd like Gnus NOT to render HTML-mails but show me the
+text part if it's available. How to do it?
- Say
-
+@subsubheading Answer
+Say
+
@example
(eval-after-load "mm-decode"
'(progn
(add-to-list 'mm-discouraged-alternatives "text/html")
(add-to-list 'mm-discouraged-alternatives "text/richtext")))
@end example
-
@noindent
- in ~/.gnus. If you don't want HTML rendered, even if there's no text
alternative add
-
+
+in ~/.gnus.el. If you don't want HTML rendered, even if there's no text
alternative add
@example
(setq mm-automatic-display (remove "text/html" mm-automatic-display))
@end example
-
@noindent
- too.
-
-@ifnottex
-@node [4.7], [4.8], [4.6], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.7:
- Can I use some other browser than w3 to render my HTML-mails?
-
+too.
-Answer:
+@node [4.7]
+@subsubheading Question 4.7
- Only if you use Gnus 5.10 or younger. In this case you've got the
- choice between w3, w3m, links, lynx and html2text, which
- one is used can be specified in the variable
- mm-text-html-renderer, so if you want links to render your
- mail say
-
+Can I use some other browser than w3 to render my HTML-mails?
+
+@subsubheading Answer
+Only if you use Gnus 5.10 or younger. In this case you've got the
+choice between w3, w3m, links, lynx and html2text, which
+one is used can be specified in the variable
+mm-text-html-renderer, so if you want links to render your
+mail say
+
@example
(setq mm-text-html-renderer 'links)
@end example
-
-@ifnottex
-@node [4.8], [4.9], [4.7], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.8:
-
- Is there anything I can do to make poorly formatted mails
- more readable?
-
-
-Answer:
-
- Gnus offers you several functions to "wash" incoming mail,
- you can find them if you browse through the menu, item Article->Washing. The most
- interesting ones are probably "Wrap long lines" (
- @samp{W w}
- ), "Decode ROT13" (
- @samp{W r}
- ) and "Outlook Deuglify" which repairs the dumb quoting used
- by many users of Microsoft products (
- @samp{W Y f} gives you full deuglify.
- See @samp{W Y C-h} or
- have a look at the menus for other deuglifications).
- Outlook deuglify is only available since Gnus 5.10.
-
-@ifnottex
-@node [4.9], [4.10], [4.8], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.9:
-
- Is there a way to automatically ignore posts by specific
- authors or with specific words in the subject? And can I
- highlight more interesting ones in some way?
-
+@noindent
-Answer:
+@node [4.8]
+@subsubheading Question 4.8
- You want Scoring. Scoring means, that you define rules
- which assign each message an integer value. Depending on
- the value the message is highlighted in summary buffer (if
- it's high, say +2000) or automatically marked read (if the
- value is low, say -800) or some other action happens.
-
+Is there anything I can do to make poorly formatted mails
+more readable?
- There are basically three ways of setting up rules which assign
- the scoring-value to messages. The first and easiest way is to set
- up rules based on the article you are just reading. Say you're
- reading a message by a guy who always writes nonsense and you want
- to ignore his messages in the future. Hit
- @samp{L}, to set up a rule which lowers the score.
- Now Gnus asks you which the criteria for lowering the Score shall
- be. Hit @samp{?} twice to see all possibilities,
- we want @samp{a} which means the author (the from
- header). Now Gnus wants to know which kind of matching we want.
- Hit either @samp{e} for an exact match or
- @samp{s} for substring-match and delete afterwards
- everything but the name to score down all authors with the given
- name no matter which email address is used. Now you need to tell
- Gnus when to apply the rule and how long it should last, hit e.g.
- @samp{p} to apply the rule now and let it last
- forever. If you want to raise the score instead of lowering it say
- @samp{I} instead of @samp{L}.
-
+@subsubheading Answer
- You can also set up rules by hand. To do this say @samp{V
- f} in summary buffer. Then you are asked for the name
- of the score file, it's name.of.group.SCORE for rules valid in
- only one group or all.Score for rules valid in all groups. See the
- Gnus manual for the exact syntax, basically it's one big list
- whose elements are lists again. the first element of those lists
- is the header to score on, then one more list with what to match,
- which score to assign, when to expire the rule and how to do the
- matching. If you find me very interesting, you could e.g. add the
- following to your all.Score:
-
+Gnus offers you several functions to "wash" incoming mail, you can
+find them if you browse through the menu, item
+Article->Washing. The most interesting ones are probably "Wrap
+long lines" (@samp{W w}), "Decode ROT13"
+(@samp{W r}) and "Outlook Deuglify" which repairs
+the dumb quoting used by many users of Microsoft products
+(@samp{W Y f} gives you full deuglify.
+See @samp{W Y C-h} or have a look at the menus for
+other deuglifications). Outlook deuglify is only available since
+Gnus 5.10.
+
+@node [4.9]
+@subsubheading Question 4.9
+
+Is there a way to automatically ignore posts by specific
+authors or with specific words in the subject? And can I
+highlight more interesting ones in some way?
+
+@subsubheading Answer
+
+You want Scoring. Scoring means, that you define rules
+which assign each message an integer value. Depending on
+the value the message is highlighted in summary buffer (if
+it's high, say +2000) or automatically marked read (if the
+value is low, say -800) or some other action happens.
+
+There are basically three ways of setting up rules which assign
+the scoring-value to messages. The first and easiest way is to set
+up rules based on the article you are just reading. Say you're
+reading a message by a guy who always writes nonsense and you want
+to ignore his messages in the future. Hit
+@samp{L}, to set up a rule which lowers the score.
+Now Gnus asks you which the criteria for lowering the Score shall
+be. Hit @samp{?} twice to see all possibilities,
+we want @samp{a} which means the author (the from
+header). Now Gnus wants to know which kind of matching we want.
+Hit either @samp{e} for an exact match or
+@samp{s} for substring-match and delete afterwards
+everything but the name to score down all authors with the given
+name no matter which email address is used. Now you need to tell
+Gnus when to apply the rule and how long it should last, hit e.g.
+@samp{p} to apply the rule now and let it last
+forever. If you want to raise the score instead of lowering it say
+@samp{I} instead of @samp{L}.
+
+You can also set up rules by hand. To do this say @samp{V
+f} in summary buffer. Then you are asked for the name
+of the score file, it's name.of.group.SCORE for rules valid in
+only one group or all.Score for rules valid in all groups. See the
+Gnus manual for the exact syntax, basically it's one big list
+whose elements are lists again. the first element of those lists
+is the header to score on, then one more list with what to match,
+which score to assign, when to expire the rule and how to do the
+matching. If you find me very interesting, you could e.g. add the
+following to your all.Score:
@example
(("references" ("hschmi22.userfqdn.rz-online.de" 500 nil s))
("message-id" ("hschmi22.userfqdn.rz-online.de" 999 nil s)))
@end example
-
@noindent
- This would add 999 to the score of messages written by me
- and 500 to the score of messages which are a (possibly
- indirect) answer to a message written by me. Of course
- nobody with a sane mind would do this :-)
-
- The third alternative is adaptive scoring. This means Gnus
- watches you and tries to find out what you find
- interesting and what annoying and sets up rules
- which reflect this. Adaptive scoring can be a huge help
- when reading high traffic groups. If you want to activate
- adaptive scoring say
-
+This would add 999 to the score of messages written by me
+and 500 to the score of messages which are a (possibly
+indirect) answer to a message written by me. Of course
+nobody with a sane mind would do this :-)
+
+The third alternative is adaptive scoring. This means Gnus
+watches you and tries to find out what you find
+interesting and what annoying and sets up rules
+which reflect this. Adaptive scoring can be a huge help
+when reading high traffic groups. If you want to activate
+adaptive scoring say
@example
(setq gnus-use-adaptive-scoring t)
@end example
-
@noindent
- in ~/.gnus.
-
-@ifnottex
-@node [4.10], [4.11], [4.9], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.10:
-
- How can I disable threading in some (e.g. mail-) groups, or
- set other variables specific for some groups?
-
-
-Answer:
-
- While in group buffer move point over the group and hit
- @samp{G c}, this opens a buffer where you
- can set options for the group. At the bottom of the buffer
- you'll find an item that allows you to set variables
- locally for the group. To disable threading enter
- gnus-show-threads as name of variable and nil as
- value. Hit button done at the top of the buffer when
- you're ready.
-
-@ifnottex
-@node [4.11], [4.12], [4.10], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.11:
-
- Can I highlight messages written by me and follow-ups to
- those?
-
-
-Answer:
-
- Stop those "Can I ..." questions, the answer is always yes
- in Gnus Country :-). It's a three step process: First we
- make faces (specifications of how summary-line shall look
- like) for those postings, then we'll give them some
- special score and finally we'll tell Gnus to use the new
- faces. You can find detailed instructions on how to do it on
-
@uref{http://my.gnus.org/Members/dzimmerm/HowTo%2C2002-07-25%2C1027619165012198456/view,my.gnus.org}
-
-@ifnottex
-@node [4.12], [4.13], [4.11], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.12:
-
- The number of total messages in a group which Gnus
- displays in group buffer is by far to high, especially in
- mail groups. Is this a bug?
-
-
-Answer:
-
- No, that's a matter of design of Gnus, fixing this would
- mean reimplementation of major parts of Gnus'
- back ends. Gnus thinks "highest-article-number -
- lowest-article-number = total-number-of-articles". This
- works OK for Usenet groups, but if you delete and move
- many messages in mail groups, this fails. To cure the
- symptom, enter the group via @samp{C-u RET}
- (this makes Gnus get all messages), then
- hit @samp{M P b} to mark all messages and
- then say @samp{B m name.of.group} to move
- all messages to the group they have been in before, they
- get new message numbers in this process and the count is
- right again (until you delete and move your mail to other
- groups again).
-
-@ifnottex
-@node [4.13], [4.14], [4.12], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.13:
- I don't like the layout of summary and article buffer, how
- to change it? Perhaps even a three pane display?
-
+in ~/.gnus.el.
-Answer:
+@node [4.10]
+@subsubheading Question 4.10
- You can control the windows configuration by calling the
- function gnus-add-configuration. The syntax is a bit
- complicated but explained very well in the manual node
- "Window Layout". Some popular examples:
-
+How can I disable threading in some (e.g. mail-) groups, or
+set other variables specific for some groups?
- Instead 25% summary 75% article buffer 35% summary and 65%
- article (the 1.0 for article means "take the remaining
- space"):
-
+@subsubheading Answer
+
+While in group buffer move point over the group and hit
+@samp{G c}, this opens a buffer where you
+can set options for the group. At the bottom of the buffer
+you'll find an item that allows you to set variables
+locally for the group. To disable threading enter
+gnus-show-threads as name of variable and nil as
+value. Hit button done at the top of the buffer when
+you're ready.
+
+@node [4.11]
+@subsubheading Question 4.11
+
+Can I highlight messages written by me and follow-ups to
+those?
+
+@subsubheading Answer
+
+Stop those "Can I ..." questions, the answer is always yes
+in Gnus Country :-). It's a three step process: First we
+make faces (specifications of how summary-line shall look
+like) for those postings, then we'll give them some
+special score and finally we'll tell Gnus to use the new
+faces. You can find detailed instructions on how to do it on
+@uref{http://my.gnus.org/node/view/224, my.gnus.org}
+
+@node [4.12]
+@subsubheading Question 4.12
+
+The number of total messages in a group which Gnus
+displays in group buffer is by far to high, especially in
+mail groups. Is this a bug?
+
+@subsubheading Answer
+
+No, that's a matter of design of Gnus, fixing this would
+mean reimplementation of major parts of Gnus'
+back ends. Gnus thinks "highest-article-number -
+lowest-article-number = total-number-of-articles". This
+works OK for Usenet groups, but if you delete and move
+many messages in mail groups, this fails. To cure the
+symptom, enter the group via @samp{C-u RET}
+(this makes Gnus get all messages), then
+hit @samp{M P b} to mark all messages and
+then say @samp{B m name.of.group} to move
+all messages to the group they have been in before, they
+get new message numbers in this process and the count is
+right again (until you delete and move your mail to other
+groups again).
+
+@node [4.13]
+@subsubheading Question 4.13
+
+I don't like the layout of summary and article buffer, how
+to change it? Perhaps even a three pane display?
+
+@subsubheading Answer
+
+You can control the windows configuration by calling the
+function gnus-add-configuration. The syntax is a bit
+complicated but explained very well in the manual node
+"Window Layout". Some popular examples:
+
+Instead 25% summary 75% article buffer 35% summary and 65%
+article (the 1.0 for article means "take the remaining
+space"):
@example
-(gnus-add-configuration
- '(article (vertical 1.0
- (summary .35 point)
- (article 1.0))))
+(gnus-add-configuration
+ '(article (vertical 1.0 (summary .35 point) (article 1.0))))
@end example
-
+@noindent
- A three pane layout, Group buffer on the left, summary
- buffer top-right, article buffer bottom-right:
-
+A three pane layout, Group buffer on the left, summary
+buffer top-right, article buffer bottom-right:
@example
(gnus-add-configuration
@@ -1228,46 +1105,40 @@ Answer:
(vertical 25
(group 1.0))
(vertical 1.0
- (summary 1.0 point)))))
+ (summary 1.0 point)))))
@end example
-
-@ifnottex
-@node [4.14], [4.15], [4.13], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.14:
+@noindent
- I don't like the way the Summary buffer looks, how to tweak it?
-
+@node [4.14]
+@subsubheading Question 4.14
-Answer:
+I don't like the way the Summary buffer looks, how to tweak it?
- You've got to play around with the variable
- gnus-summary-line-format. It's value is a string of
- symbols which stand for things like author, date, subject
- etc. A list of the available specifiers can be found in the
- manual node "Summary Buffer Lines" and the often forgotten
- node "Formatting Variables" and it's sub-nodes. There
- you'll find useful things like positioning the cursor and
- tabulators which allow you a summary in table form, but
- sadly hard tabulators are broken in 5.8.8.
-
+@subsubheading Answer
- Since 5.10, Gnus offers you some very nice new specifiers,
- e.g. %B which draws a thread-tree and %&user-date which
- gives you a date where the details are dependent of the
- articles age. Here's an example which uses both:
-
+You've got to play around with the variable
+gnus-summary-line-format. It's value is a string of
+symbols which stand for things like author, date, subject
+etc. A list of the available specifiers can be found in the
+manual node "Summary Buffer Lines" and the often forgotten
+node "Formatting Variables" and it's sub-nodes. There
+you'll find useful things like positioning the cursor and
+tabulators which allow you a summary in table form, but
+sadly hard tabulators are broken in 5.8.8.
+
+Since 5.10, Gnus offers you some very nice new specifiers,
+e.g. %B which draws a thread-tree and %&user-date which
+gives you a date where the details are dependent of the
+articles age. Here's an example which uses both:
@example
-(setq gnus-summary-line-format
- ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n")
+(setq gnus-summary-line-format ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date;
\n")
@end example
-
@noindent
- resulting in:
-
+
+resulting in:
-@smallexample
+@example
:O Re: [Richard Stallman] rfc2047.el | 13 |Lars Magne Ingebrigt |Sat
23:06
:O Re: Revival of the ding-patches list | 13 |Lars Magne Ingebrigt |Sat
23:12
:R > Re: Find correct list of articles for a gro| 25 |Lars Magne Ingebrigt |Sat
23:16
@@ -1280,55 +1151,49 @@ Answer:
:R > Re: Gnus still doesn't count messages prope| 23 |Lars Magne Ingebrigt
|Sat 23:57
:O \-> ... | 18 |Kai Grossjohann |
0:35
:O \-> ... | 13 |Lars Magne Ingebrigt |
0:56
-@end smallexample
-
-@ifnottex
-@node [4.15], , [4.14], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.15:
+@end example
+@noindent
- How to split incoming mails in several groups?
-
+@node [4.15]
+@subsubheading Question 4.15
-Answer:
+How to split incoming mails in several groups?
- Gnus offers two possibilities for splitting mail, the easy
- nnmail-split-methods and the more powerful Fancy Mail
- Splitting. I'll only talk about the first one, refer to
- the manual, node "Fancy Mail Splitting" for the latter.
-
+@subsubheading Answer
- The value of nnmail-split-methods is a list, each element
- is a list which stands for a splitting rule. Each rule has
- the form "group where matching articles should go to",
- "regular expression which has to be matched", the first
- rule which matches wins. The last rule must always be a
- general rule (regular expression .*) which denotes where
- articles should go which don't match any other rule. If
- the folder doesn't exist yet, it will be created as soon
- as an article lands there. By default the mail will be
- send to all groups whose rules match. If you
- don't want that (you probably don't want), say
-
+Gnus offers two possibilities for splitting mail, the easy
+nnmail-split-methods and the more powerful Fancy Mail
+Splitting. I'll only talk about the first one, refer to
+the manual, node "Fancy Mail Splitting" for the latter.
+
+The value of nnmail-split-methods is a list, each element
+is a list which stands for a splitting rule. Each rule has
+the form "group where matching articles should go to",
+"regular expression which has to be matched", the first
+rule which matches wins. The last rule must always be a
+general rule (regular expression .*) which denotes where
+articles should go which don't match any other rule. If
+the folder doesn't exist yet, it will be created as soon
+as an article lands there. By default the mail will be
+send to all groups whose rules match. If you
+don't want that (you probably don't want), say
@example
(setq nnmail-crosspost nil)
@end example
-
@noindent
- in ~/.gnus.
-
- An example might be better than thousand words, so here's
- my nnmail-split-methods. Note that I send duplicates in a
- special group and that the default group is spam, since I
- filter all mails out which are from some list I'm
- subscribed to or which are addressed directly to me
- before. Those rules kill about 80% of the Spam which
- reaches me (Email addresses are changed to prevent spammers
- from using them):
-
+in ~/.gnus.el.
+An example might be better than thousand words, so here's
+my nnmail-split-methods. Note that I send duplicates in a
+special group and that the default group is spam, since I
+filter all mails out which are from some list I'm
+subscribed to or which are addressed directly to me
+before. Those rules kill about 80% of the Spam which
+reaches me (Email addresses are changed to prevent spammers
+from using them):
+
@example
(setq nnmail-split-methods
'(("duplicates" "^Gnus-Warning:.*duplicate")
@@ -1336,134 +1201,115 @@ Answer:
("Gnus-Tut" "^\\(To:\\|CC:\\).*localpart@@socha.bla.*")
("tcsh" "^\\(To:\\|CC:\\).*localpart@@mx.gw.bla.*")
("BAfH" "^\\(To:\\|CC:\\).*localpart@@.*uni-muenchen.bla.*")
- ("Hamster-src"
- "^\\(CC:\\|To:\\).*hamster-sourcen@@yahoogroups.\\(de\\|com\\).*")
+ ("Hamster-src"
"^\\(CC:\\|To:\\).*hamster-sourcen@@yahoogroups.\\(de\\|com\\).*")
("Tagesschau" "^From: tagesschau
<localpart@(a)www.tagesschau.bla>$")
("Replies" "^\\(CC:\\|To:\\).*localpart@@Frank-Schmitt.bla.*")
- ("EK"
-
"^From:.*\\(localpart@@privateprovider.bla\\|localpart@@workplace.bla\\).*")
- ("Spam"
- "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*")
- ("Spam"
- "^Subject:.*\\(This really
work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*")
- ("Spam"
- "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*")
+ ("EK"
"^From:.*\\(localpart@@privateprovider.bla\\|localpart@@workplace.bla\\).*")
+ ("Spam"
"^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*")
+ ("Spam" "^Subject:.*\\(This really
work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*")
+ ("Spam"
"^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*")
("Spam" "^X-Mailer:\\(.*BulkMailer.*\\|.*MIME::Lite.*\\|\\)")
- ("Spam"
- "^X-Mailer:\\(.*CyberCreek
Avalanche\\|.*http\:\/\/GetResponse\.com\\)")
- ("Spam"
-
"^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*")
+ ("Spam" "^X-Mailer:\\(.*CyberCreek
Avalanche\\|.*http\:\/\/GetResponse\.com\\)")
+ ("Spam"
"^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*")
("Spam" "^Delivered-To: GMX delivery to spamtrap@(a)gmx.bla$")
("Spam" "^Received: from link2buy.com")
("Spam" "^CC: .*azzrael@(a)t-online.bla")
("Spam" "^X-Mailer-Version: 1.50 BETA")
("Uni" "^\\(CC:\\|To:\\).*localpart@@uni-koblenz.bla.*")
- ("Inbox"
- "^\\(CC:\\|To:\\).*\\(my\
name\\|address@@one.bla\\|adress@(a)two.bla\\)")
+ ("Inbox" "^\\(CC:\\|To:\\).*\\(my\
name\\|address@@one.bla\\|adress@(a)two.bla\\)")
("Spam" "")))
@end example
-
+@noindent
-@ifnottex
-@node FAQ 5 - Composing messages, FAQ 6 - Old messages, FAQ 4 - Reading messages,
Frequently Asked Questions
-@end ifnottex
+@node FAQ 5 - Composing messages
@subsection Composing messages
@menu
-* [5.1]:: What are the basic commands I need to know for sending mail and
- postings?
-* [5.2]:: How to enable automatic word-wrap when composing messages?
-* [5.3]:: How to set stuff like From, Organization, Reply-To, signature...?
-* [5.4]:: Can I set things like From, Signature etc group based on the
- group I post too?
-* [5.5]:: Is there a spell-checker? Perhaps even on-the-fly spell-checking?
-* [5.6]:: Can I set the dictionary based on the group I'm posting to?
-* [5.7]:: Is there some kind of address-book, so I needn't remember all
- those email addresses?
-* [5.8]:: Sometimes I see little images at the top of article buffer.
- What's that and how can I send one with my postings, too?
-* [5.9]:: Sometimes I accidentally hit r instead of f in newsgroups.
- Can Gnus warn me, when I'm replying by mail in newsgroups?
-* [5.10]:: How to tell Gnus not to generate a sender header?
-* [5.11]:: I want Gnus to locally store copies of my send mail and news,
- how to do it?
-* [5.12]:: People tell me my Message-IDs are not correct,
- why aren't they and how to fix it?
+* [5.1]:: What are the basic commands I need to know for sending
+ mail and postings?
+* [5.2]:: How to enable automatic word-wrap when composing messages?
+* [5.3]:: How to set stuff like From, Organization, Reply-To,
+ signature...?
+* [5.4]:: Can I set things like From, Signature etc group based on
+ the group I post too?
+* [5.5]:: Is there a spell-checker? Perhaps even on-the-fly
+ spell-checking?
+* [5.6]:: Can I set the dictionary based on the group I'm posting
+ to?
+* [5.7]:: Is there some kind of address-book, so I needn't remember
+ all those email addresses?
+* [5.8]:: Sometimes I see little images at the top of article
+ buffer. What's that and how can I send one with my postings, too?
+* [5.9]:: Sometimes I accidentally hit r instead of f in newsgroups.
+ Can Gnus warn me, when I'm replying by mail in newsgroups?
+* [5.10]:: How to tell Gnus not to generate a sender header?
+* [5.11]:: I want Gnus to locally store copies of my send mail and
+ news, how to do it?
+* [5.12]:: People tell me my Message-IDs are not correct, why aren't
+ they and how to fix it?
@end menu
-@ifnottex
-@node [5.1], [5.2], FAQ 5 - Composing messages, FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.1:
+@node [5.1]
+@subsubheading Question 5.1
- What are the basic commands I need to know for sending mail and postings?
-
+What are the basic commands I need to know for sending mail and postings?
-Answer:
+@subsubheading Answer
- To start composing a new mail hit @samp{m}
- either in Group or Summary buffer, for a posting, it's
- either @samp{a} in Group buffer and
- filling the Newsgroups header manually
- or @samp{a} in the Summary buffer of the
- group where the posting shall be send to. Replying by mail
- is
- @samp{r} if you don't want to cite the
- author, or import the cited text manually and
- @samp{R} to cite the text of the original
- message. For a follow up to a newsgroup, it's
- @samp{f} and @samp{F}
- (analog to @samp{r} and
- @samp{R}).
-
+To start composing a new mail hit @samp{m}
+either in Group or Summary buffer, for a posting, it's
+either @samp{a} in Group buffer and
+filling the Newsgroups header manually
+or @samp{a} in the Summary buffer of the
+group where the posting shall be send to. Replying by mail
+is
+@samp{r} if you don't want to cite the
+author, or import the cited text manually and
+@samp{R} to cite the text of the original
+message. For a follow up to a newsgroup, it's
+@samp{f} and @samp{F}
+(analogously to @samp{r} and
+@samp{R}).
+
+Enter new headers above the line saying "--text follows
+this line--", enter the text below the line. When ready
+hit @samp{C-c C-c}, to send the message,
+if you want to finish it later hit @samp{C-c
+C-d} to save it in the drafts group, where you
+can start editing it again by saying @samp{D
+e}.
- Enter new headers above the line saying "--text follows
- this line--", enter the text below the line. When ready
- hit @samp{C-c C-c}, to send the message,
- if you want to finish it later hit @samp{C-c
- C-d} to save it in the drafts group, where you
- can start editing it again by saying @samp{D
- e}.
-
-@ifnottex
-@node [5.2], [5.3], [5.1], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.2:
+@node [5.2]
+@subsubheading Question 5.2
- How to enable automatic word-wrap when composing messages?
-
+How to enable automatic word-wrap when composing messages?
-Answer:
+@subsubheading Answer
- Say
-
+Say
@example
(add-hook 'message-mode-hook
- (lambda ()
- (setq fill-column 72)
- (turn-on-auto-fill)))
+ (lambda ()
+ (setq fill-column 72)
+ (turn-on-auto-fill)))
@end example
-
@noindent
- in ~/.gnus. You can reformat a paragraph by hitting
- @samp{M-q} (as usual)
-
-@ifnottex
-@node [5.3], [5.4], [5.2], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.3:
- How to set stuff like From, Organization, Reply-To, signature...?
-
+in ~/.gnus.el. You can reformat a paragraph by hitting
+@samp{M-q} (as usual)
-Answer:
+@node [5.3]
+@subsubheading Question 5.3
- There are other ways, but you should use posting styles
- for this. (See below why).
- This example should make the syntax clear:
-
+How to set stuff like From, Organization, Reply-To, signature...?
+@subsubheading Answer
+
+There are other ways, but you should use posting styles
+for this. (See below why).
+This example should make the syntax clear:
+
@example
(setq gnus-posting-styles
'((".*"
@@ -1474,147 +1320,122 @@ Answer:
("X-SampleHeader" "foobar")
(eval (setq some-variable "Foo bar")))))
@end example
-
@noindent
- The ".*" means that this settings are the default ones
- (see below), valid values for the first element of the
- following lists are signature, signature-file,
- organization, address, name or body. The attribute name
- can also be a string. In that case, this will be used as
- a header name, and the value will be inserted in the
- headers of the article; if the value is `nil', the header
- name will be removed. You can also say (eval (foo bar)),
- then the function foo will be evaluated with argument bar
- and the result will be thrown away.
-
-@ifnottex
-@node [5.4], [5.5], [5.3], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.4:
- Can I set things like From, Signature etc group based on the group I post too?
-
-
-Answer:
+The ".*" means that this settings are the default ones
+(see below), valid values for the first element of the
+following lists are signature, signature-file,
+organization, address, name or body. The attribute name
+can also be a string. In that case, this will be used as
+a header name, and the value will be inserted in the
+headers of the article; if the value is `nil', the header
+name will be removed. You can also say (eval (foo bar)),
+then the function foo will be evaluated with argument bar
+and the result will be thrown away.
+
+@node [5.4]
+@subsubheading Question 5.4
+
+Can I set things like From, Signature etc group based on the group I post too?
+
+@subsubheading Answer
+
+That's the strength of posting styles. Before, we used ".*"
+to set the default for all groups. You can use a regexp
+like "^gmane" and the following settings are only applied
+to postings you send to the gmane hierarchy, use
+".*binaries" instead and they will be applied to postings
+send to groups containing the string binaries in their
+name etc.
+
+You can instead of specifying a regexp specify a function
+which is evaluated, only if it returns true, the
+corresponding settings take effect. Two interesting
+candidates for this are message-news-p which returns t if
+the current Group is a newsgroup and the corresponding
+message-mail-p.
+
+Note that all forms that match are applied, that means in
+the example below, when I post to
+gmane.mail.spam.spamassassin.general, the settings under
+".*" are applied and the settings under message-news-p and
+those under "^gmane" and those under
+"^gmane\\.mail\\.spam\\.spamassassin\\.general$". Because
+of this put general settings at the top and specific ones
+at the bottom.
- That's the strength of posting styles. Before, we used ".*"
- to set the default for all groups. You can use a regexp
- like "^gmane" and the following settings are only applied
- to postings you send to the gmane hierarchy, use
- ".*binaries" instead and they will be applied to postings
- send to groups containing the string binaries in their
- name etc.
-
-
- You can instead of specifying a regexp specify a function
- which is evaluated, only if it returns true, the
- corresponding settings take effect. Two interesting
- candidates for this are message-news-p which returns t if
- the current Group is a newsgroup and the corresponding
- message-mail-p.
-
-
- Note that all forms that match are applied, that means in
- the example below, when I post to
- gmane.mail.spam.spamassassin.general, the settings under
- ".*" are applied and the settings under message-news-p and
- those under "^gmane" and those under
- "^gmane\\.mail\\.spam\\.spamassassin\\.general$". Because
- of this put general settings at the top and specific ones
- at the bottom.
-
-
@example
(setq gnus-posting-styles
'((".*" ;;default
(name "Frank Schmitt")
(organization "Hamme net, kren mer och nimmi")
- (signature-file "~/.signature"))
+ (signature-file "~/.signature") )
((message-news-p) ;;Usenet news?
(address "mySpamTrap@(a)Frank-Schmitt.bla")
- ("Reply-To" "hereRealRepliesOnlyPlease@(a)Frank-Schmitt.bla"))
+ ("Reply-To" "hereRealRepliesOnlyPlease@(a)Frank-Schmitt.bla")
)
((message-mail-p) ;;mail?
- (address "usedForMails@(a)Frank-Schmitt.bla"))
+ (address "usedForMails@(a)Frank-Schmitt.bla") )
("^gmane" ;;this is mail, too in fact
(address "usedForMails@(a)Frank-Schmitt.net")
- ("Reply-To" nil))
+ ("Reply-To" nil) )
("^gmane.mail.spam.spamassassin.general$"
(eval (setq mail-envelope-from "Azzrael@(a)rz-online.de"))
- (address "Azzrael@(a)rz-online.de"))))
+ (address "Azzrael@(a)rz-online.de")) ))
@end example
-
-@ifnottex
-@node [5.5], [5.6], [5.4], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.5:
+@noindent
- Is there a spell-checker? Perhaps even on-the-fly spell-checking?
-
+@node [5.5]
+@subsubheading Question 5.5
-Answer:
+Is there a spell-checker? Perhaps even on-the-fly spell-checking?
-You can use ispell.el to spell-check stuff in Emacs. So the first
-thing to do is to make sure that you've got either
-@itemize @bullet
-@item
-@uref{http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html,ispell}
-or
-@item
-@uref{http://aspell.sourceforge.net/,aspell}
-@end itemize
-@noindent
-installed and in your Path.
+@subsubheading Answer
-Then you need
-@uref{http://www.kdstevens.com/~stevens/ispell-page.html,ispell.el,ispell.el}
-and for on-the-fly spell-checking
-@uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html,flyspell.el,flyspell.el}.
-Ispell.el is shipped with Gnus Emacs and available through the Emacs
-package system, flyspell.el is shipped with Emacs and part of XEmacs
-text-modes package which is available through the package system, so
-there should be no need to install them manually.
-
+You can use ispell.el to spell-check stuff in Emacs. So the
+first thing to do is to make sure that you've got either
+@uref{http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html, ispell}
+or @uref{http://aspell.sourceforge.net/, aspell}
+installed and in your Path. Then you need
+@uref{http://www.kdstevens.com/~stevens/ispell-page.html, ispell.el}
+and for on-the-fly spell-checking
+@uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html,
flyspell.el}.
+Ispell.el is shipped with Emacs and available through the XEmacs package system,
+flyspell.el is shipped with Emacs and part of XEmacs text-modes package which is
+available through the package system, so there should be no need to install them
+manually.
- Ispell.el assumes you use ispell, if you choose aspell say
-
+Ispell.el assumes you use ispell, if you choose aspell say
@example
(setq ispell-program-name "aspell")
@end example
-
-
@noindent
- in your Emacs configuration file.
+in your Emacs configuration file.
- If you want your outgoing messages to be spell-checked, say
-
+If you want your outgoing messages to be spell-checked, say
@example
(add-hook 'message-send-hook 'ispell-message)
@end example
-
@noindent
- In your ~/.gnus, if you prefer on-the-fly spell-checking say
-
+
+In your ~/.gnus.el, if you prefer on-the-fly spell-checking say
@example
(add-hook 'message-mode-hook (lambda () (flyspell-mode 1)))
@end example
-
-@ifnottex
-@node [5.6], [5.7], [5.5], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.6:
+@noindent
- Can I set the dictionary based on the group I'm posting to?
-
+@node [5.6]
+@subsubheading Question 5.6
-Answer:
+Can I set the dictionary based on the group I'm posting to?
- Yes, say something like
-
+@subsubheading Answer
+Yes, say something like
+
@example
(add-hook 'gnus-select-group-hook
(lambda ()
@@ -1625,56 +1446,48 @@ Answer:
(t
(ispell-change-dictionary "english")))))
@end example
-
-
@noindent
- in ~/.gnus. Change "^de\\." and "deutsch8" to something
- that suits your needs.
-@ifnottex
-@node [5.7], [5.8], [5.6], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.7:
+in ~/.gnus.el. Change "^de\\." and "deutsch8" to something
+that suits your needs.
- Is there some kind of address-book, so I needn't remember
- all those email addresses?
-
+@node [5.7]
+@subsubheading Question 5.7
-Answer:
+Is there some kind of address-book, so I needn't remember
+all those email addresses?
- There's an very basic solution for this, mail aliases.
- You can store your mail addresses in a ~/.mailrc file using a simple
- alias syntax:
-
+@subsubheading Answer
+There's an very basic solution for this, mail aliases.
+You can store your mail addresses in a ~/.mailrc file using a simple
+alias syntax:
+
@example
alias al "Al <al@(a)english-heritage.bla>"
@end example
-
@noindent
- Then typing your alias (followed by a space or punctuation
- character) on a To: or Cc: line in the message buffer will
- cause Gnus to insert the full address for you. See the
- node "Mail Aliases" in Message (not Gnus) manual for
- details.
-
- However, what you really want is the Insidious Big Brother
- Database bbdb. Get it through the XEmacs package system or from
- @uref{http://bbdb.sourceforge.net/,bbdb's homepage}.
- Now place the following in ~/.gnus, to activate bbdb for Gnus:
-
+Then typing your alias (followed by a space or punctuation
+character) on a To: or Cc: line in the message buffer will
+cause Gnus to insert the full address for you. See the
+node "Mail Aliases" in Message (not Gnus) manual for
+details.
+
+However, what you really want is the Insidious Big Brother
+Database bbdb. Get it through the XEmacs package system or from
+@uref{http://bbdb.sourceforge.net/, bbdb's homepage}.
+Now place the following in ~/.gnus.el, to activate bbdb for Gnus:
@example
(require 'bbdb)
(bbdb-initialize 'gnus 'message)
@end example
-
@noindent
- Now you probably want some general bbdb configuration,
- place them in ~/.emacs:
-
+Now you probably want some general bbdb configuration,
+place them in ~/.emacs:
+
@example
(require 'bbdb)
;;If you don't live in Northern America, you should disable the
@@ -1689,56 +1502,50 @@ alias al "Al <al@(a)english-heritage.bla>"
;;No popup-buffers
(setq bbdb-use-pop-up nil)
@end example
-
@noindent
- Now you should be ready to go. Say @samp{M-x bbdb RET
- RET} to open a bbdb buffer showing all
- entries. Say @samp{c} to create a new
- entry, @samp{b} to search your BBDB and
- @samp{C-o} to add a new field to an
- entry. If you want to add a sender to the BBDB you can
- also just hit `:' on the posting in the summary buffer and
- you are done. When you now compose a new mail,
- hit @samp{TAB} to cycle through know
- recipients.
-
-@ifnottex
-@node [5.8], [5.9], [5.7], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.8:
-
- Sometimes I see little images at the top of article
- buffer. What's that and how can I send one with my
- postings, too?
-
-Answer:
-
- Those images are called X-Faces. They are 48*48 pixel b/w
- pictures, encoded in a header line. If you want to include
- one in your posts, you've got to convert some image to a
- X-Face. So fire up some image manipulation program (say
- Gimp), open the image you want to include, cut out the
- relevant part, reduce color depth to 1 bit, resize to
- 48*48 and save as bitmap. Now you should get the compface
- package from
- @uref{ftp://ftp.cs.indiana.edu:/pub/faces/,this site}.
- and create the actual X-face by saying
-
-
-@example
-cat file.xbm | xbm2ikon |compface > file.face
-cat ./file.face | sed 's/\\/\\\\/g' | sed 's/\"/\\\"/g' >
./file.face.quoted
+Now you should be ready to go. Say @samp{M-x bbdb RET
+RET} to open a bbdb buffer showing all
+entries. Say @samp{c} to create a new
+entry, @samp{b} to search your BBDB and
+@samp{C-o} to add a new field to an
+entry. If you want to add a sender to the BBDB you can
+also just hit `:' on the posting in the summary buffer and
+you are done. When you now compose a new mail,
+hit @samp{TAB} to cycle through know
+recipients.
+
+@node [5.8]
+@subsubheading Question 5.8
+
+Sometimes I see little images at the top of article
+buffer. What's that and how can I send one with my
+postings, too?
+
+@subsubheading Answer
+
+Those images are called X-Faces. They are 48*48 pixel b/w
+pictures, encoded in a header line. If you want to include
+one in your posts, you've got to convert some image to a
+X-Face. So fire up some image manipulation program (say
+Gimp), open the image you want to include, cut out the
+relevant part, reduce color depth to 1 bit, resize to
+48*48 and save as bitmap. Now you should get the compface
+package from
+@uref{ftp://ftp.cs.indiana.edu:/pub/faces/, this site}.
+and create the actual X-face by saying
+
+@example
+cat file.xbm | xbm2ikon | compface > file.face
+cat file.face | sed 's/\\/\\\\/g;s/\"/\\\"/g;' > file.face.quoted
@end example
-
@noindent
-If you can't use compface, there's an online X-face converter at@*
-@uref{http://www.dairiki.org/xface/}. If you use MS Windows, you
-could also use the WinFace program from
-@uref{http://www.xs4all.nl/~walterln/winface/}.
-Now you only have to tell Gnus to include the X-face in your postings
-by saying
+If you can't use compface, there's an online X-face converter at
+@uref{http://www.dairiki.org/xface/}.
+If you use MS Windows, you could also use the WinFace program from
+@uref{http://www.xs4all.nl/~walterln/winface/}.
+Now you only have to tell Gnus to include the X-face in your postings by saying
@example
(setq message-default-headers
@@ -1747,33 +1554,28 @@ by saying
(insert-file-contents "~/.xemacs/xface")
(buffer-string)))
@end example
-
@noindent
- in ~/.gnus.
-
-@ifnottex
-@node [5.9], [5.10], [5.8], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.9:
-
- Sometimes I accidentally hit r instead of f in
- newsgroups. Can Gnus warn me, when I'm replying by mail in
- newsgroups?
-
-Answer:
+in ~/.gnus.el.
- Put this in ~/.gnus:
-
+@node [5.9]
+@subsubheading Question 5.9
+
+Sometimes I accidentally hit r instead of f in
+newsgroups. Can Gnus warn me, when I'm replying by mail in
+newsgroups?
+
+@subsubheading Answer
+Put this in ~/.gnus.el:
+
@example
(setq gnus-confirm-mail-reply-to-news t)
@end example
-
@noindent
- if you already use Gnus 5.10, if you still use 5.8.8 or
- 5.9 try this instead:
-
+
+if you already use Gnus 5.10, if you still use 5.8.8 or
+5.9 try this instead:
@example
(eval-after-load "gnus-msg"
@@ -1785,44 +1587,37 @@ Answer:
(y-or-n-p "Really reply by mail to article author? "))
ad-do-it))))
@end example
-
-@ifnottex
-@node [5.10], [5.11], [5.9], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.10:
+@noindent
- How to tell Gnus not to generate a sender header?
-
+@node [5.10]
+@subsubheading Question 5.10
-Answer:
+How to tell Gnus not to generate a sender header?
- Since 5.10 Gnus doesn't generate a sender header by
- default. For older Gnus' try this in ~/.gnus:
-
+@subsubheading Answer
+
+Since 5.10 Gnus doesn't generate a sender header by
+default. For older Gnus' try this in ~/.gnus.el:
@example
(eval-after-load "message"
'(add-to-list 'message-syntax-checks '(sender . disabled)))
@end example
-
-
-@ifnottex
-@node [5.11], [5.12], [5.10], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.11:
+@noindent
- I want gnus to locally store copies of my send mail and
- news, how to do it?
-
+@node [5.11]
+@subsubheading Question 5.11
-Answer:
+I want Gnus to locally store copies of my send mail and
+news, how to do it?
- You must set the variable gnus-message-archive-group to do
- this. You can set it to a string giving the name of the
- group where the copies shall go or like in the example
- below use a function which is evaluated and which returns
- the group to use.
-
+@subsubheading Answer
+
+You must set the variable gnus-message-archive-group to do
+this. You can set it to a string giving the name of the
+group where the copies shall go or like in the example
+below use a function which is evaluated and which returns
+the group to use.
@example
(setq gnus-message-archive-group
@@ -1830,31 +1625,31 @@ Answer:
"nnml:Send-News"
"nnml:Send-Mail")))
@end example
-
-
-@ifnottex
-@node [5.12], , [5.11], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.12:
+@noindent
- People tell me my Message-IDs are not correct, why
- aren't they and how to fix it?
-
+@node [5.12]
+@subsubheading Question 5.12
-Answer:
+People tell me my Message-IDs are not correct, why
+aren't they and how to fix it?
- The message-ID is an unique identifier for messages you
- send. To make it unique, Gnus need to know which machine
- name to put after the "@@". If the name of the machine
- where Gnus is running isn't suitable (it probably isn't
- at most private machines) you can tell Gnus what to use
- by saying
+@subsubheading Answer
+
+The message-ID is an unique identifier for messages you
+send. To make it unique, Gnus need to know which machine
+name to put after the "@@". If the name of the machine
+where Gnus is running isn't suitable (it probably isn't
+at most private machines) you can tell Gnus what to use
+by saying:
+
@example
(setq message-user-fqdn "yourmachine.yourdomain.tld")
@end example
@noindent
- in ~/.gnus. If you use Gnus 5.9 or ealier, you can use this
-instead (works for newer versions a well):
+
+in ~/.gnus.el. If you use Gnus 5.9 or ealier, you can use this
+instead (works for newer versions a well):
+
@example
(eval-after-load "message"
'(let ((fqdn "yourmachine.yourdomain.tld"));; <-- Edit this!
@@ -1865,111 +1660,98 @@ instead (works for newer versions a well
"Return user's fully qualified domain name."
fqdn))))
@end example
+@noindent
- If you have no idea what to insert for
- "yourmachine.yourdomain.tld", you've got several
- choices. You can either ask your provider if he allows
- you to use something like
-
yourUserName.userfqdn.provider.net, or you can use
- somethingUnique.yourdomain.tld if you own the domain
- yourdomain.tld, or you can register at a service which
- gives private users a FQDN for free, e.g.
- @uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}.
- (Sorry but this website is in German, if you know of an
- English one offering the same, drop me a note).
-
+If you have no idea what to insert for
+"yourmachine.yourdomain.tld", you've got several
+choices. You can either ask your provider if he allows
+you to use something like
+yourUserName.userfqdn.provider.net, or you can use
+somethingUnique.yourdomain.tld if you own the domain
+yourdomain.tld, or you can register at a service which
+gives private users a FQDN for free, e.g.
+@uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}.
+(Sorry but this website is in German, if you know of an
+English one offering the same, drop me a note).
- Finally you can tell Gnus not to generate a Message-ID
- for News at all (and letting the server do the job) by saying
-
+Finally you can tell Gnus not to generate a Message-ID
+for News at all (and letting the server do the job) by saying
@example
(setq message-required-news-headers
(remove' Message-ID message-required-news-headers))
@end example
-
@noindent
- you can also tell Gnus not to generate Message-IDs for mail by saying
-
+you can also tell Gnus not to generate Message-IDs for mail by saying
+
@example
(setq message-required-mail-headers
(remove' Message-ID message-required-mail-headers))
@end example
-
@noindent
- , however some mail servers don't generate proper
- Message-IDs, too, so test if your Mail Server behaves
- correctly by sending yourself a Mail and looking at the Message-ID.
-
+
+, however some mail servers don't generate proper
+Message-IDs, too, so test if your Mail Server behaves
+correctly by sending yourself a Mail and looking at the Message-ID.
-@ifnottex
-@node FAQ 6 - Old messages, FAQ 7 - Gnus in a dial-up environment, FAQ 5 - Composing
messages, Frequently Asked Questions
-@end ifnottex
+@node FAQ 6 - Old messages
@subsection Old messages
@menu
-* [6.1]:: How to import my old mail into Gnus?
-* [6.2]:: How to archive interesting messages?
-* [6.3]:: How to search for a specific message?
-* [6.4]:: How to get rid of old unwanted mail?
-* [6.5]:: I want that all read messages are expired (at least in some
- groups). How to do it?
-* [6.6]:: I don't want expiration to delete my mails but to move them
- to another group.
+* [6.1]:: How to import my old mail into Gnus?
+* [6.2]:: How to archive interesting messages?
+* [6.3]:: How to search for a specific message?
+* [6.4]:: How to get rid of old unwanted mail?
+* [6.5]:: I want that all read messages are expired (at least in some
+ groups). How to do it?
+* [6.6]:: I don't want expiration to delete my mails but to move them
+ to another group.
@end menu
-@ifnottex
-@node [6.1], [6.2], FAQ 6 - Old messages, FAQ 6 - Old messages
-@end ifnottex
-@subsubheading Question 6.1:
+@node [6.1]
+@subsubheading Question 6.1
- How to import my old mail into Gnus?
-
+How to import my old mail into Gnus?
-Answer:
+@subsubheading Answer
- The easiest way is to tell your old mail program to
- export the messages in mbox format. Most Unix mailers
- are able to do this, if you come from the MS Windows
- world, you may find tools at
- @uref{http://mbx2mbox.sourceforge.net/}.
-
+The easiest way is to tell your old mail program to
+export the messages in mbox format. Most Unix mailers
+are able to do this, if you come from the MS Windows
+world, you may find tools at
+@uref{http://mbx2mbox.sourceforge.net/}.
+
+Now you've got to import this mbox file into Gnus. To do
+this, create a nndoc group based on the mbox file by
+saying @samp{G f /path/file.mbox RET} in
+Group buffer. You now have read-only access to your
+mail. If you want to import the messages to your normal
+Gnus mail groups hierarchy, enter the nndoc group you've
+just created by saying @samp{C-u RET}
+(thus making sure all messages are retrieved), mark all
+messages by saying @samp{M P b} and
+either copy them to the desired group by saying
+@samp{B c name.of.group RET} or send them
+through nnmail-split-methods (respool them) by saying
+@samp{B r}.
+
+@node [6.2]
+@subsubheading Question 6.2
+
+How to archive interesting messages?
+
+@subsubheading Answer
+
+If you stumble across an interesting message, say in
+gnu.emacs.gnus and want to archive it there are several
+solutions. The first and easiest is to save it to a file
+by saying @samp{O f}. However, wouldn't
+it be much more convenient to have more direct access to
+the archived message from Gnus? If you say yes, put this
+snippet by Frank Haun <pille3003@(a)fhaun.de> in
+~/.gnus.el:
- Now you've got to import this mbox file into Gnus. To do
- this, create a nndoc group based on the mbox file by
- saying @samp{G f /path/file.mbox RET} in
- Group buffer. You now have read-only access to your
- mail. If you want to import the messages to your normal
- Gnus mail groups hierarchy, enter the nndoc group you've
- just created by saying @samp{C-u RET}
- (thus making sure all messages are retrieved), mark all
- messages by saying @samp{M P b} and
- either copy them to the desired group by saying
- @samp{B c name.of.group RET} or send them
- through nnmail-split-methods (respool them) by saying
- @samp{B r}.
-
-@ifnottex
-@node [6.2], [6.3], [6.1], FAQ 6 - Old messages
-@end ifnottex
-@subsubheading Question 6.2:
-
- How to archive interesting messages?
-
-
-Answer:
-
- If you stumble across an interesting message, say in
- gnu.emacs.gnus and want to archive it there are several
- solutions. The first and easiest is to save it to a file
- by saying @samp{O f}. However, wouldn't
- it be much more convenient to have more direct access to
- the archived message from Gnus? If you say yes, put this
- snippet by Frank Haun <pille3003@(a)fhaun.de> in
- ~/.gnus:
-
-
@example
(defun my-archive-article (&optional n)
"Copies one or more article(s) to a corresponding `nnml:' group, e.g.
@@ -1987,624 +1769,531 @@ more then one article."
(replace-regexp-in-string "^.*:" ""
gnus-newsgroup-name)))))
(gnus-summary-copy-article n archive-name)))
@end example
-
@noindent
- You can now say @samp{M-x
- my-archive-article} in summary buffer to
- archive the article under the cursor in a nnml
- group. (Change nnml to your preferred back end)
-
- Of course you can also make sure the cache is enabled by saying
-
+You can now say @samp{M-x
+my-archive-article} in summary buffer to
+archive the article under the cursor in a nnml
+group. (Change nnml to your preferred back end)
+
+Of course you can also make sure the cache is enabled by saying
@example
(setq gnus-use-cache t)
@end example
-
@noindent
- then you only have to set either the tick or the dormant
- mark for articles you want to keep, setting the read
- mark will remove them from cache.
-
-@ifnottex
-@node [6.3], [6.4], [6.2], FAQ 6 - Old messages
-@end ifnottex
-@subsubheading Question 6.3:
-
- How to search for a specific message?
-
-
-Answer:
-
- There are several ways for this, too. For a posting from
- a Usenet group the easiest solution is probably to ask
- @uref{http://groups.google.com,groups.google.com},
- if you found the posting there, tell Google to display
- the raw message, look for the message-id, and say
- @samp{M-^ the@(a)message.id RET} in a
- summary buffer.
- Since Gnus 5.10 there's also a Gnus interface for
-
groups.google.com which you can call with
- @samp{G W}) in group buffer.
-
-
- Another idea which works for both mail and news groups
- is to enter the group where the message you are
- searching is and use the standard Emacs search
- @samp{C-s}, it's smart enough to look at
- articles in collapsed threads, too. If you want to
- search bodies, too try @samp{M-s}
- instead. Further on there are the
- gnus-summary-limit-to-foo functions, which can help you,
- too.
-
-
- Of course you can also use grep to search through your
- local mail, but this is both slow for big archives and
- inconvenient since you are not displaying the found mail
- in Gnus. Here comes nnir into action. Nnir is a front end
- to search engines like swish-e or swish++ and
- others. You index your mail with one of those search
- engines and with the help of nnir you can search trough
- the indexed mail and generate a temporary group with all
- messages which met your search criteria. If this sound
- cool to you get nnir.el from the contrib directory of the Gnus
- distribution or
-
@uref{http://quimby.gnus.org/cgi-bin/cvsweb.cgi/~checkout~/gnus/contrib/nnir.el?rev=HEAD&content-type=text/plain}
- Instructions on how to use it are at the top of the file.
-
-@ifnottex
-@node [6.4], [6.5], [6.3], FAQ 6 - Old messages
-@end ifnottex
-@subsubheading Question 6.4:
-
- How to get rid of old unwanted mail?
-
-
-Answer:
-
- You can of course just mark the mail you don't need
- anymore by saying @samp{#} with point
- over the mail and then say @samp{B DEL}
- to get rid of them forever. You could also instead of
- actually deleting them, send them to a junk-group by
- saying @samp{B m nnml:trash-bin} which
- you clear from time to time, but both are not the intended
- way in Gnus.
-
-
- In Gnus, we let mail expire like news expires on a news
- server. That means you tell Gnus the message is
- expirable (you tell Gnus "I don't need this mail
- anymore") by saying @samp{E} with point
- over the mail in summary buffer. Now when you leave the
- group, Gnus looks at all messages which you marked as
- expirable before and if they are old enough (default is
- older than a week) they are deleted.
-
-@ifnottex
-@node [6.5], [6.6], [6.4], FAQ 6 - Old messages
-@end ifnottex
-@subsubheading Question 6.5:
-
- I want that all read messages are expired (at least in
- some groups). How to do it?
-
-
-Answer:
-
- If you want all read messages to be expired (e.g. in
- mailing lists where there's an online archive), you've
- got two choices: auto-expire and
- total-expire. Auto-expire means, that every article
- which has no marks set and is selected for reading is
- marked as expirable, Gnus hits @samp{E}
- for you every time you read a message. Total-expire
- follows a slightly different approach, here all article
- where the read mark is set are expirable.
-
-
- To activate auto-expire, include auto-expire in the
- Group parameters for the group. (Hit @samp{G
- c} in summary buffer with point over the
- group to change group parameters). For total-expire add
- total-expire to the group-parameters.
-
-
- Which method you choose is merely a matter of taste:
- Auto-expire is faster, but it doesn't play together with
- Adaptive Scoring, so if you want to use this feature,
- you should use total-expire.
-
- If you want a message to be excluded from expiration in
- a group where total or auto expire is active, set either
- tick (hit @samp{u}) or dormant mark (hit
- @samp{u}), when you use auto-expire, you
- can also set the read mark (hit
- @samp{d}).
-
-@ifnottex
-@node [6.6], , [6.5], FAQ 6 - Old messages
-@end ifnottex
-@subsubheading Question 6.6:
+then you only have to set either the tick or the dormant
+mark for articles you want to keep, setting the read
+mark will remove them from cache.
+
+@node [6.3]
+@subsubheading Question 6.3
+
+How to search for a specific message?
+
+@subsubheading Answer
+
+There are several ways for this, too. For a posting from
+a Usenet group the easiest solution is probably to ask
+@uref{http://groups.google.com, groups.google.com},
+if you found the posting there, tell Google to display
+the raw message, look for the message-id, and say
+@samp{M-^ the@(a)message.id RET} in a
+summary buffer.
+Since Gnus 5.10 there's also a Gnus interface for
+groups.google.com which you can call with
+@samp{G W}) in group buffer.
+
+Another idea which works for both mail and news groups
+is to enter the group where the message you are
+searching is and use the standard Emacs search
+@samp{C-s}, it's smart enough to look at
+articles in collapsed threads, too. If you want to
+search bodies, too try @samp{M-s}
+instead. Further on there are the
+gnus-summary-limit-to-foo functions, which can help you,
+too.
+
+Of course you can also use grep to search through your
+local mail, but this is both slow for big archives and
+inconvenient since you are not displaying the found mail
+in Gnus. Here comes nnir into action. Nnir is a front end
+to search engines like swish-e or swish++ and
+others. You index your mail with one of those search
+engines and with the help of nnir you can search trough
+the indexed mail and generate a temporary group with all
+messages which met your search criteria. If this sound
+cool to you get nnir.el from
+@uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/}
+or @uref{ftp://ftp.is.informatik.uni-duisburg.de/pub/src/emacs/}.
+Instructions on how to use it are at the top of the file.
+
+@node [6.4]
+@subsubheading Question 6.4
+
+How to get rid of old unwanted mail?
+
+@subsubheading Answer
+
+You can of course just mark the mail you don't need
+anymore by saying @samp{#} with point
+over the mail and then say @samp{B DEL}
+to get rid of them forever. You could also instead of
+actually deleting them, send them to a junk-group by
+saying @samp{B m nnml:trash-bin} which
+you clear from time to time, but both are not the intended
+way in Gnus.
+
+In Gnus, we let mail expire like news expires on a news
+server. That means you tell Gnus the message is
+expirable (you tell Gnus "I don't need this mail
+anymore") by saying @samp{E} with point
+over the mail in summary buffer. Now when you leave the
+group, Gnus looks at all messages which you marked as
+expirable before and if they are old enough (default is
+older than a week) they are deleted.
+
+@node [6.5]
+@subsubheading Question 6.5
+
+I want that all read messages are expired (at least in
+some groups). How to do it?
+
+@subsubheading Answer
+
+If you want all read messages to be expired (e.g. in
+mailing lists where there's an online archive), you've
+got two choices: auto-expire and
+total-expire. Auto-expire means, that every article
+which has no marks set and is selected for reading is
+marked as expirable, Gnus hits @samp{E}
+for you every time you read a message. Total-expire
+follows a slightly different approach, here all article
+where the read mark is set are expirable.
+
+To activate auto-expire, include auto-expire in the
+Group parameters for the group. (Hit @samp{G
+c} in summary buffer with point over the
+group to change group parameters). For total-expire add
+total-expire to the group-parameters.
+
+Which method you choose is merely a matter of taste:
+Auto-expire is faster, but it doesn't play together with
+Adaptive Scoring, so if you want to use this feature,
+you should use total-expire.
+
+If you want a message to be excluded from expiration in
+a group where total or auto expire is active, set either
+tick (hit @samp{u}) or dormant mark (hit
+@samp{u}), when you use auto-expire, you
+can also set the read mark (hit
+@samp{d}).
+
+@node [6.6]
+@subsubheading Question 6.6
- I don't want expiration to delete my mails but to move them
- to another group.
-
+I don't want expiration to delete my mails but to move them
+to another group.
-Answer:
+@subsubheading Answer
- Say something like this in ~/.gnus:
-
+Say something like this in ~/.gnus.el:
@example
(setq nnmail-expiry-target "nnml:expired")
@end example
-
@noindent
- (If you want to change the value of nnmail-expiry-target
- on a per group basis see the question "How can I disable
- threading in some (e.g. mail-) groups, or set other
- variables specific for some groups?")
-
-@ifnottex
-@node FAQ 7 - Gnus in a dial-up environment, FAQ 8 - Getting help, FAQ 6 - Old
messages, Frequently Asked Questions
-@end ifnottex
+(If you want to change the value of nnmail-expiry-target
+on a per group basis see the question "How can I disable
+threading in some (e.g. mail-) groups, or set other
+variables specific for some groups?")
+
+@node FAQ 7 - Gnus in a dial-up environment
@subsection Gnus in a dial-up environment
@menu
-* [7.1]:: I don't have a permanent connection to the net, how can I
- minimize the time I've got to be connected?
-* [7.2]:: So what was this thing about the Agent?
-* [7.3]:: I want to store article bodies on disk, too. How to do it?
-* [7.4]:: How to tell Gnus not to try to send mails / postings while
- I'm offline?
+* [7.1]:: I don't have a permanent connection to the net, how can I
+ minimize the time I've got to be connected?
+* [7.2]:: So what was this thing about the Agent?
+* [7.3]:: I want to store article bodies on disk, too. How to do it?
+* [7.4]:: How to tell Gnus not to try to send mails / postings while
+ I'm offline?
@end menu
-
-
-@ifnottex
-@node [7.1], [7.2], FAQ 7 - Gnus in a dial-up environment, FAQ 7 - Gnus in a dial-up
environment
-@end ifnottex
-@subsubheading Question 7.1:
-
- I don't have a permanent connection to the net, how can
- I minimize the time I've got to be connected?
-
-Answer:
+@node [7.1]
+@subsubheading Question 7.1
- You've got basically two options: Either you use the
- Gnus Agent (see below) for this, or you can install
- programs which fetch your news and mail to your local
- disk and Gnus reads the stuff from your local
- machine.
-
-
- If you want to follow the second approach, you need a
- program which fetches news and offers them to Gnus, a
- program which does the same for mail and a program which
- receives the mail you write from Gnus and sends them
- when you're online.
-
+I don't have a permanent connection to the net, how can
+I minimize the time I've got to be connected?
-Let's talk about Unix systems first: For the news part, the easiest
-solution is a small nntp server like
-@uref{http://www.leafnode.org/,Leafnode} or
-@uref{http://infa.abo.fi/~patrik/sn/,sn}, of course you can also
-install a full featured news server like
-@uref{http://www.isc.org/products/INN/,inn}.
+@subsubheading Answer
-Then you want to fetch your Mail, popular choices are
-@itemize @bullet
-@item
-@uref{http://www.catb.org/~esr/fetchmail/,fetchmail} and
-@item
-@uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/,getmail}.
-@end itemize
-You should tell those to write the mail to your disk and Gnus to read
-it from there. Last but not least the mail sending part: This can be
-done with every MTA like @uref{http://www.sendmail.org/,sendmail},
-@uref{http://www.qmail.org/,postfix}, @uref{http://www.exim.org/,exim}
-or @uref{http://www.qmail.org/,qmail}.
-
-
- On windows boxes I'd vote for
- @uref{http://www.tglsoft.de/,Hamster},
- it's a small freeware, open-source program which fetches
- your mail and news from remote servers and offers them
- to Gnus (or any other mail and/or news reader) via nntp
- respectively POP3 or IMAP. It also includes a smtp
- server for receiving mails from Gnus.
-
-@ifnottex
-@node [7.2], [7.3], [7.1], FAQ 7 - Gnus in a dial-up environment
-@end ifnottex
-@subsubheading Question 7.2:
-
- So what was this thing about the Agent?
-
-
-Answer:
-
- The Gnus agent is part of Gnus, it allows you to fetch
- mail and news and store them on disk for reading them
- later when you're offline. It kind of mimics offline
- newsreaders like e.g. Forte Agent. If you want to use
- the Agent place the following in ~/.gnus if you are
- still using 5.8.8 or 5.9 (it's the default since 5.10):
-
+You've got basically two options: Either you use the
+Gnus Agent (see below) for this, or you can install
+programs which fetch your news and mail to your local
+disk and Gnus reads the stuff from your local
+machine.
+
+If you want to follow the second approach, you need a
+program which fetches news and offers them to Gnus, a
+program which does the same for mail and a program which
+receives the mail you write from Gnus and sends them
+when you're online.
+
+Let's talk about Unix systems first: For the news part,
+the easiest solution is a small nntp server like
+@uref{http://www.leafnode.org/, Leafnode} or
+@uref{http://infa.abo.fi/~patrik/sn/, sn},
+of course you can also install a full featured news
+server like
+@uref{http://www.isc.org/products/INN/, inn}.
+Then you want to fetch your Mail, popular choices
+are @uref{http://www.catb.org/~esr/fetchmail/, fetchmail}
+and @uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/, getmail}.
+You should tell those to write the mail to your disk and
+Gnus to read it from there. Last but not least the mail
+sending part: This can be done with every MTA like
+@uref{http://www.sendmail.org/, sendmail},
+@uref{http://www.qmail.org/, postfix},
+@uref{http://www.exim.org/, exim} or
+@uref{http://www.qmail.org/, qmail}.
+
+On windows boxes I'd vote for
+@uref{http://www.tglsoft.de/, Hamster},
+it's a small freeware, open-source program which fetches
+your mail and news from remote servers and offers them
+to Gnus (or any other mail and/or news reader) via nntp
+respectively POP3 or IMAP. It also includes a smtp
+server for receiving mails from Gnus.
+
+@node [7.2]
+@subsubheading Question 7.2
+
+So what was this thing about the Agent?
+
+@subsubheading Answer
+
+The Gnus agent is part of Gnus, it allows you to fetch
+mail and news and store them on disk for reading them
+later when you're offline. It kind of mimics offline
+newsreaders like e.g. Forte Agent. If you want to use
+the Agent place the following in ~/.gnus.el if you are
+still using 5.8.8 or 5.9 (it's the default since 5.10):
@example
(setq gnus-agent t)
@end example
-
-
- Now you've got to select the servers whose groups can be
- stored locally. To do this, open the server buffer
- (that is press @samp{^} while in the
- group buffer). Now select a server by moving point to
- the line naming that server. Finally, agentize the
- server by typing @samp{J a}. If you
- make a mistake, or change your mind, you can undo this
- action by typing @samp{J r}. When
- you're done, type 'q' to return to the group buffer.
- Now the next time you enter a group on a agentized
- server, the headers will be stored on disk and read from
- there the next time you enter the group.
-
-@ifnottex
-@node [7.3], [7.4], [7.2], FAQ 7 - Gnus in a dial-up environment
-@end ifnottex
-@subsubheading Question 7.3:
-
- I want to store article bodies on disk, too. How to do it?
-
+@noindent
-Answer:
+Now you've got to select the servers whose groups can be
+stored locally. To do this, open the server buffer
+(that is press @samp{^} while in the
+group buffer). Now select a server by moving point to
+the line naming that server. Finally, agentize the
+server by typing @samp{J a}. If you
+make a mistake, or change your mind, you can undo this
+action by typing @samp{J r}. When
+you're done, type 'q' to return to the group buffer.
+Now the next time you enter a group on a agentized
+server, the headers will be stored on disk and read from
+there the next time you enter the group.
+
+@node [7.3]
+@subsubheading Question 7.3
+
+I want to store article bodies on disk, too. How to do it?
+
+@subsubheading Answer
+
+You can tell the agent to automatically fetch the bodies
+of articles which fulfill certain predicates, this is
+done in a special buffer which can be reached by
+saying @samp{J c} in group
+buffer. Please refer to the documentation for
+information which predicates are possible and how
+exactly to do it.
+
+Further on you can tell the agent manually which
+articles to store on disk. There are two ways to do
+this: Number one: In the summary buffer, process mark a
+set of articles that shall be stored in the agent by
+saying @samp{#} with point over the
+article and then type @samp{J s}. The
+other possibility is to set, again in the summary
+buffer, downloadable (%) marks for the articles you
+want by typing @samp{@@} with point over
+the article and then typing @samp{J u}.
+What's the difference? Well, process marks are erased as
+soon as you exit the summary buffer while downloadable
+marks are permanent. You can actually set downloadable
+marks in several groups then use fetch session ('J s' in
+the GROUP buffer) to fetch all of those articles. The
+only downside is that fetch session also fetches all of
+the headers for every selected group on an agentized
+server. Depending on the volume of headers, the initial
+fetch session could take hours.
+
+@node [7.4]
+@subsubheading Question 7.4
+
+How to tell Gnus not to try to send mails / postings
+while I'm offline?
+
+@subsubheading Answer
+
+All you've got to do is to tell Gnus when you are online
+(plugged) and when you are offline (unplugged), the rest
+works automatically. You can toggle plugged/unplugged
+state by saying @samp{J j} in group
+buffer. To start Gnus unplugged say @samp{M-x
+gnus-unplugged} instead of
+@samp{M-x gnus}. Note that for this to
+work, the agent must be active.
- You can tell the agent to automatically fetch the bodies
- of articles which fulfill certain predicates, this is
- done in a special buffer which can be reached by
- saying @samp{J c} in group
- buffer. Please refer to the documentation for
- information which predicates are possible and how
- exactly to do it.
-
+@node FAQ 8 - Getting help
+@subsection Getting help
- Further on you can tell the agent manually which
- articles to store on disk. There are two ways to do
- this: Number one: In the summary buffer, process mark a
- set of articles that shall be stored in the agent by
- saying @samp{#} with point over the
- article and then type @samp{J s}. The
- other possibility is to set, again in the summary
- buffer, downloadable (%) marks for the articles you
- want by typing @samp{@@} with point over
- the article and then typing @samp{J u}.
- What's the difference? Well, process marks are erased as
- soon as you exit the summary buffer while downloadable
- marks are permanent. You can actually set downloadable
- marks in several groups then use fetch session ('J s' in
- the GROUP buffer) to fetch all of those articles. The
- only downside is that fetch session also fetches all of
- the headers for every selected group on an agentized
- server. Depending on the volume of headers, the initial
- fetch session could take hours.
-
-@ifnottex
-@node [7.4], , [7.3], FAQ 7 - Gnus in a dial-up environment
-@end ifnottex
-@subsubheading Question 7.4:
+@menu
+* [8.1]:: How to find information and help inside Emacs?
+* [8.2]:: I can't find anything in the Gnus manual about X (e.g.
+ attachments, PGP, MIME...), is it not documented?
+* [8.3]:: Which websites should I know?
+* [8.4]:: Which mailing lists and newsgroups are there?
+* [8.5]:: Where to report bugs?
+* [8.6]:: I need real-time help, where to find it?
+@end menu
- How to tell Gnus not to try to send mails / postings
- while I'm offline?
-
+@node [8.1]
+@subsubheading Question 8.1
-Answer:
+How to find information and help inside Emacs?
- All you've got to do is to tell Gnus when you are online
- (plugged) and when you are offline (unplugged), the rest
- works automatically. You can toggle plugged/unplugged
- state by saying @samp{J j} in group
- buffer. To start Gnus unplugged say @samp{M-x
- gnus-unplugged} instead of
- @samp{M-x gnus}. Note that for this to
- work, the agent must be active.
-
+@subsubheading Answer
-@ifnottex
-@node FAQ 8 - Getting help, FAQ 9 - Tuning Gnus, FAQ 7 - Gnus in a dial-up environment,
Frequently Asked Questions
-@end ifnottex
-@subsection Getting help
+The first stop should be the Gnus manual (Say
+@samp{C-h i d m Gnus RET} to start the
+Gnus manual, then walk through the menus or do a
+full-text search with @samp{s}). Then
+there are the general Emacs help commands starting with
+C-h, type @samp{C-h ? ?} to get a list
+of all available help commands and their meaning. Finally
+@samp{M-x apropos-command} lets you
+search through all available functions and @samp{M-x
+apropos} searches the bound variables.
-@menu
-* [8.1]:: How to find information and help inside Emacs?
-* [8.2]:: I can't find anything in the Gnus manual about X
- (e.g. attachments, PGP, MIME...), is it not documented?
-* [8.3]:: Which websites should I know?
-* [8.4]:: Which mailing lists and newsgroups are there?
-* [8.5]:: Where to report bugs?
-* [8.6]:: I need real-time help, where to find it?
-@end menu
+@node [8.2]
+@subsubheading Question 8.2
-@ifnottex
-@node [8.1], [8.2], FAQ 8 - Getting help, FAQ 8 - Getting help
-@end ifnottex
-@subsubheading Question 8.1:
+I can't find anything in the Gnus manual about X
+(e.g. attachments, PGP, MIME...), is it not documented?
- How to find information and help inside Emacs?
-
+@subsubheading Answer
-Answer:
+There's not only the Gnus manual but also the manuals
+for message, emacs-mime, sieve and pgg. Those packages
+are distributed with Gnus and used by Gnus but aren't
+really part of core Gnus, so they are documented in
+different info files, you should have a look in those
+manuals, too.
- The first stop should be the Gnus manual (Say
- @samp{C-h i d m Gnus RET} to start the
- Gnus manual, then walk through the menus or do a
- full-text search with @samp{s}). Then
- there are the general Emacs help commands starting with
- C-h, type @samp{C-h ? ?} to get a list
- of all available help commands and their meaning. Finally
- @samp{M-x apropos-command} lets you
- search through all available functions and @samp{M-x
- apropos} searches the bound variables.
-
-@ifnottex
-@node [8.2], [8.3], [8.1], FAQ 8 - Getting help
-@end ifnottex
-@subsubheading Question 8.2:
+@node [8.3]
+@subsubheading Question 8.3
- I can't find anything in the Gnus manual about X
- (e.g. attachments, PGP, MIME...), is it not documented?
-
+Which websites should I know?
-Answer:
+@subsubheading Answer
- There's not only the Gnus manual but also the manuals
- for message, emacs-mime, sieve and pgg. Those packages
- are distributed with Gnus and used by Gnus but aren't
- really part of core Gnus, so they are documented in
- different info files, you should have a look in those
- manuals, too.
-
-@ifnottex
-@node [8.3], [8.4], [8.2], FAQ 8 - Getting help
-@end ifnottex
-@subsubheading Question 8.3:
+The two most important ones are the
+@uref{http://www.gnus.org, official Gnus website}.
+and it's sister site
+@uref{http://my.gnus.org,
my.gnus.org (MGO)},
+hosting an archive of lisp snippets, howtos, a (not
+really finished) tutorial and this FAQ.
- Which websites should I know?
-
+Tell me about other sites which are interesting.
-Answer:
+@node [8.4]
+@subsubheading Question 8.4
- The two most important ones are the
- @uref{http://www.gnus.org,official Gnus website}.
- and it's sister site
- @uref{http://my.gnus.org,my.gnus.org (MGO)},
- hosting an archive of lisp snippets, howtos, a (not
- really finished) tutorial and this FAQ.
-
+Which mailing lists and newsgroups are there?
- Tell me about other sites which are interesting.
-
-@ifnottex
-@node [8.4], [8.5], [8.3], FAQ 8 - Getting help
-@end ifnottex
-@subsubheading Question 8.4:
+@subsubheading Answer
- Which mailing lists and newsgroups are there?
-
+There's the newsgroup gnu.emacs.gnus (pull it from
+e.g.
news.gnus.org) which deals with general questions and the
+ding mailing list (ding@(a)gnus.org) dealing with development of
+Gnus. You can read the ding list via NNTP, too under the name
+gmane.emacs.gnus.general from
news.gmane.org.
-Answer:
+If you want to stay in the big8,
+news.software.newssreaders is also read by some Gnus
+users (but chances for qualified help are much better in
+the above groups) and if you speak German, there's
+de.comm.software.gnus.
- There's the newsgroup gnu.emacs.gnus (pull it from
- e.g.
news.gnus.org) which deals with general questions
- and the ding mailing list (ding@(a)gnus.org) dealing with
- development of Gnus. You can read the ding list via
- NNTP, too under the name gnus.ding from
news.gnus.org.
-
+@node [8.5]
+@subsubheading Question 8.5
- If you want to stay in the big8,
- news.software.newssreaders is also read by some Gnus
- users (but chances for qualified help are much better in
- the above groups) and if you speak German, there's
- de.comm.software.gnus.
-
-@ifnottex
-@node [8.5], [8.6], [8.4], FAQ 8 - Getting help
-@end ifnottex
-@subsubheading Question 8.5:
+Where to report bugs?
- Where to report bugs?
-
+@subsubheading Answer
-Answer:
+Say @samp{M-x gnus-bug}, this will start
+a message to the
+@email{bugs@(a)gnus.org, gnus bug mailing list}
+including information about your environment which make
+it easier to help you.
-Say @samp{M-x gnus-bug}, this will start a message to the
-@email{bugs@(a)gnus.org,gnus bug mailing list} including information
-about your environment which make it easier to help you.
-
-@ifnottex
-@node [8.6], , [8.5], FAQ 8 - Getting help
-@end ifnottex
-@subsubheading Question 8.6:
+@node [8.6]
+@subsubheading Question 8.6
- I need real-time help, where to find it?
-
+I need real-time help, where to find it?
-Answer:
+@subsubheading Answer
- Point your IRC client to
irc.my.gnus.org channel
- #mygnus. Don't be afraid if people there speak German,
- they are willing and capable of switching to
- English when people from outside Germany enter.
-
+Point your IRC client to
irc.my.gnus.org channel
+#mygnus. Don't be afraid if people there speak German,
+they are willing and capable of switching to
+English when people from outside Germany enter.
-@ifnottex
-@node FAQ 9 - Tuning Gnus, FAQ - Glossary, FAQ 8 - Getting help, Frequently Asked
Questions
-@end ifnottex
+@node FAQ 9 - Tuning Gnus
@subsection Tuning Gnus
@menu
-* [9.1]:: Starting Gnus is really slow, how to speed it up?
-* [9.2]:: How to speed up the process of entering a group?
-* [9.3]:: Sending mail becomes slower and slower, what's up?
+* [9.1]:: Starting Gnus is really slow, how to speed it up?
+* [9.2]:: How to speed up the process of entering a group?
+* [9.3]:: Sending mail becomes slower and slower, what's up?
@end menu
-@ifnottex
-@node [9.1], [9.2], FAQ 9 - Tuning Gnus, FAQ 9 - Tuning Gnus
-@end ifnottex
-@subsubheading Question 9.1:
+@node [9.1]
+@subsubheading Question 9.1
- Starting Gnus is really slow, how to speed it up?
-
+Starting Gnus is really slow, how to speed it up?
-Answer:
+@subsubheading Answer
- The reason for this could be the way Gnus reads it's
- active file, see the node "The Active File" in the Gnus
- manual for things you might try to speed the process up.
- An other idea would be to byte compile your ~/.gnus (say
- @samp{M-x byte-compile-file RET ~/.gnus
- RET} to do it). Finally, if you have require
- statements in your .gnus, you could replace them with
- eval-after-load, which loads the stuff not at startup
- time, but when it's needed. Say you've got this in your
- ~/.gnus:
-
+The reason for this could be the way Gnus reads it's
+active file, see the node "The Active File" in the Gnus
+manual for things you might try to speed the process up.
+An other idea would be to byte compile your ~/.gnus.el (say
+@samp{M-x byte-compile-file RET ~/.gnus.el
+RET} to do it). Finally, if you have require
+statements in your .gnus, you could replace them with
+eval-after-load, which loads the stuff not at startup
+time, but when it's needed. Say you've got this in your
+~/.gnus.el:
@example
(require 'message)
(add-to-list 'message-syntax-checks '(sender . disabled))
@end example
-
@noindent
- then as soon as you start Gnus, message.el is loaded. If
- you replace it with
-
+then as soon as you start Gnus, message.el is loaded. If
+you replace it with
+
@example
(eval-after-load "message"
'(add-to-list 'message-syntax-checks '(sender . disabled)))
@end example
-
@noindent
- it's loaded when it's needed.
-
-@ifnottex
-@node [9.2], [9.3], [9.1], FAQ 9 - Tuning Gnus
-@end ifnottex
-@subsubheading Question 9.2:
- How to speed up the process of entering a group?
-
+it's loaded when it's needed.
-Answer:
+@node [9.2]
+@subsubheading Question 9.2
- A speed killer is setting the variable
- gnus-fetch-old-headers to anything different from nil,
- so don't do this if speed is an issue. To speed up
- building of summary say
-
+How to speed up the process of entering a group?
+
+@subsubheading Answer
+A speed killer is setting the variable
+gnus-fetch-old-headers to anything different from nil,
+so don't do this if speed is an issue. To speed up
+building of summary say
+
@example
(gnus-compile)
@end example
-
@noindent
- at the bottom of your ~/.gnus, this will make gnus
- byte-compile things like
- gnus-summary-line-format.
- then you could increase the value of gc-cons-threshold
- by saying something like
-
+
+at the bottom of your ~/.gnus.el, this will make gnus
+byte-compile things like
+gnus-summary-line-format.
+then you could increase the value of gc-cons-threshold
+by saying something like
@example
(setq gc-cons-threshold 3500000)
@end example
-
@noindent
- in ~/.emacs. If you don't care about width of CJK
- characters or use Gnus 5.10 or younger together with a
- recent GNU Emacs, you should say
-
+
+in ~/.emacs. If you don't care about width of CJK
+characters or use Gnus 5.10 or younger together with a
+recent GNU Emacs, you should say
@example
-(setq gnus-use-correct-string-widths nil)
+(setq gnus-use-correct-string-widths nil)
@end example
-
-
@noindent
- in ~/.gnus (thanks to Jesper harder for the last
- two suggestions). Finally if you are still using 5.8.8
- or 5.9 and experience speed problems with summary
- buffer generation, you definitely should update to
- 5.10 since there quite some work on improving it has
- been done.
-@ifnottex
-@node [9.3], , [9.2], FAQ 9 - Tuning Gnus
-@end ifnottex
-@subsubheading Question 9.3:
+in ~/.gnus.el (thanks to Jesper harder for the last
+two suggestions). Finally if you are still using 5.8.8
+or 5.9 and experience speed problems with summary
+buffer generation, you definitely should update to
+5.10 since there quite some work on improving it has
+been done.
- Sending mail becomes slower and slower, what's up?
-
+@node [9.3]
+@subsubheading Question 9.3
-Answer:
+Sending mail becomes slower and slower, what's up?
- The reason could be that you told Gnus to archive the
- messages you wrote by setting
- gnus-message-archive-group. Try to use a nnml group
- instead of an archive group, this should bring you back
- to normal speed.
-
+@subsubheading Answer
-@ifnottex
-@node FAQ - Glossary, , FAQ 9 - Tuning Gnus, Frequently Asked Questions
-@end ifnottex
+The reason could be that you told Gnus to archive the
+messages you wrote by setting
+gnus-message-archive-group. Try to use a nnml group
+instead of an archive group, this should bring you back
+to normal speed.
+
+@node FAQ - Glossary
@subsection Glossary
@table @dfn
-@item ~/.gnus
- When the term ~/.gnus is used it just means your Gnus
- configuration file. You might as well call it ~/.gnus.el or
- specify another name.
-
+@item ~/.gnus.el
+When the term ~/.gnus.el is used it just means your Gnus
+configuration file. You might as well call it ~/.gnus or
+specify another name.
@item Back End
- In Gnus terminology a back end is a virtual server, a layer
- between core Gnus and the real NNTP-, POP3-, IMAP- or
- whatever-server which offers Gnus a standardized interface
- to functions like "get message", "get Headers" etc.
-
+In Gnus terminology a back end is a virtual server, a layer
+between core Gnus and the real NNTP-, POP3-, IMAP- or
+whatever-server which offers Gnus a standardized interface
+to functions like "get message", "get Headers" etc.
@item Emacs
- When the term Emacs is used in this FAQ, it means either GNU
- Emacs or XEmacs.
-
+When the term Emacs is used in this FAQ, it means either GNU
+Emacs or XEmacs.
@item Message
- In this FAQ message means a either a mail or a posting to a
- Usenet Newsgroup or to some other fancy back end, no matter
- of which kind it is.
-
+In this FAQ message means a either a mail or a posting to a
+Usenet Newsgroup or to some other fancy back end, no matter
+of which kind it is.
@item MUA
- MUA is an acronym for Mail User Agent, it's the program you
- use to read and write e-mails.
-
+MUA is an acronym for Mail User Agent, it's the program you
+use to read and write e-mails.
@item NUA
- NUA is an acronym for News User Agent, it's the program you
- use to read and write Usenet news.
-
-@end table
+NUA is an acronym for News User Agent, it's the program you
+use to read and write Usenet news.
-@c @bye
+@end table
@ignore
- arch-tag: 64dc5692-edb4-4848-a965-7aa0181acbb8
+arch-tag: 64dc5692-edb4-4848-a965-7aa0181acbb8
@end ignore
1.9 +285 -239 XEmacs/packages/xemacs-packages/gnus/texi/gnus.texi
Index: gnus.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/texi/gnus.texi,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -p -r1.8 -r1.9
--- gnus.texi 2005/03/13 00:25:34 1.8
+++ gnus.texi 2005/11/15 03:46:33 1.9
@@ -7,13 +7,12 @@
@syncodeindex pg cp
@copying
-Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004
-Free Software Foundation, Inc.
+Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+ 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
+under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with the Front-Cover texts being ``A GNU
Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
@@ -684,7 +683,7 @@ Browsing the Web
* Ultimate:: The Ultimate Bulletin Board systems.
* Web Archive:: Reading mailing list archived on web.
* RSS:: Reading RDF site summary.
-* Customizing w3:: Doing stuff to Emacs/w3 from Gnus.
+* Customizing W3:: Doing stuff to Emacs/W3 from Gnus.
@acronym{IMAP}
@@ -832,21 +831,21 @@ Thwarting Email Spam
Filtering Spam Using The Spam ELisp Package
-* Spam ELisp Package Sequence of Events::
-* Spam ELisp Package Filtering of Incoming Mail::
-* Spam ELisp Package Global Variables::
-* Spam ELisp Package Configuration Examples::
-* Blacklists and Whitelists::
-* BBDB Whitelists::
-* Gmane Spam Reporting::
-* Anti-spam Hashcash Payments::
-* Blackholes::
-* Regular Expressions Header Matching::
-* Bogofilter::
-* ifile spam filtering::
-* spam-stat spam filtering::
-* SpamOracle::
-* Extending the Spam ELisp package::
+* Spam ELisp Package Sequence of Events::
+* Spam ELisp Package Filtering of Incoming Mail::
+* Spam ELisp Package Global Variables::
+* Spam ELisp Package Configuration Examples::
+* Blacklists and Whitelists::
+* BBDB Whitelists::
+* Gmane Spam Reporting::
+* Anti-spam Hashcash Payments::
+* Blackholes::
+* Regular Expressions Header Matching::
+* Bogofilter::
+* ifile spam filtering::
+* spam-stat spam filtering::
+* SpamOracle::
+* Extending the Spam ELisp package::
Filtering Spam Using Statistics with spam-stat
@@ -1393,7 +1392,7 @@ cache for all groups).
Most common Unix news readers use a shared startup file called
@file{.newsrc}. This file contains all the information about what
groups are subscribed, and which articles in these groups have been
-read.
+read.
Things got a bit more complicated with @sc{gnus}. In addition to
keeping the @file{.newsrc} file updated, it also used a file called
@@ -1468,15 +1467,17 @@ startup files. If you want to turn back
@vindex gnus-init-file
@vindex gnus-site-init-file
When Gnus starts, it will read the @code{gnus-site-init-file}
-(@file{.../site-lisp/gnus} by default) and @code{gnus-init-file}
+(@file{.../site-lisp/gnus-init} by default) and @code{gnus-init-file}
(@file{~/.gnus} by default) files. These are normal Emacs Lisp files
and can be used to avoid cluttering your @file{~/.emacs} and
@file{site-init} files with Gnus stuff. Gnus will also check for files
with the same names as these, but with @file{.elc} and @file{.el}
suffixes. In other words, if you have set @code{gnus-init-file} to
@file{~/.gnus}, it will look for @file{~/.gnus.elc}, @file{~/.gnus.el},
-and finally @file{~/.gnus} (in this order).
-
+and finally @file{~/.gnus} (in this order). If Emacs was invoked with
+the @option{-q} or @option{--no-init-file} options (@pxref{Initial
+Options, ,Initial Options, emacs, The Emacs Manual}), Gnus doesn't read
+@code{gnus-init-file}.
@node Auto Save
@@ -3008,7 +3009,7 @@ This can also be used as a group-specifi
hear a beep when you enter a group, you could put something like
@code{(dummy-variable (ding))} in the parameters of that group.
@code{dummy-variable} will be set to the (meaningless) result of the
-@code{(ding)} form.
+@code{(ding)} form.
Alternatively, since the VARIABLE becomes local to the group, this
pattern can be used to temporarily change a hook. For example, if the
@@ -3059,7 +3060,20 @@ example:
String value of parameters will be subjected to regexp substitution, as
the @code{to-group} example shows.
+@vindex gnus-parameters-case-fold-search
+By default, whether comparing the group name and one of those regexps
+specified in @code{gnus-parameters} is done in a case-sensitive manner
+or a case-insensitive manner depends on the value of
+@code{case-fold-search} at the time when the comparison is done. The
+value of @code{case-fold-search} is typically @code{t}; it means, for
+example, the element @code{("INBOX\\.FOO" (total-expire . t))} might be
+applied to both the @samp{INBOX.FOO} group and the @samp{INBOX.foo}
+group. If you want to make those regexps always case-sensitive, set the
+value of the @code{gnus-parameters-case-fold-search} variable to
+@code{nil}. Otherwise, set it to @code{t} if you want to compare them
+always in a case-insensitive manner.
+
@node Listing Groups
@section Listing Groups
@cindex group listing
@@ -3984,7 +3998,7 @@ Gnus
8: comp.binaries.fractals
13: comp.sources.unix
452: alt.sex.emacs
-@end group
+@end group
@end example
The @samp{Emacs} topic has the topic parameter @code{(score-file
@@ -5089,10 +5103,10 @@ the server and display it in the article
@item gnus-select-article-hook
@vindex gnus-select-article-hook
-This hook is called whenever an article is selected. By default it
-exposes any threads hidden under the selected article. If you would
-like each article to be saved in the Agent as you read it, putting
-@code{gnus-agent-fetch-selected-article} on this hook will do so.
+This hook is called whenever an article is selected. The default is
+@code{nil}. If you would like each article to be saved in the Agent as
+you read it, putting @code{gnus-agent-fetch-selected-article} on this
+hook will do so.
@item gnus-mark-article-hook
@vindex gnus-mark-article-hook
@@ -5102,8 +5116,8 @@ like each article to be saved in the Age
This hook is called whenever an article is selected. It is intended to
be used for marking articles as read. The default value is
@code{gnus-summary-mark-read-and-unread-as-read}, and will change the
-mark of almost any article you read to @code{gnus-unread-mark}. The
-only articles not affected by this function are ticked, dormant, and
+mark of almost any article you read to @code{gnus-read-mark}. The only
+articles not affected by this function are ticked, dormant, and
expirable articles. If you'd instead like to just have unread articles
marked as read, you can use @code{gnus-summary-mark-unread-as-read}
instead. It will leave marks like @code{gnus-low-score-mark},
@@ -8568,8 +8582,8 @@ Customization, emacs-mime, The Emacs MIM
can use include:
@table @code
-@item w3
-Use Emacs/w3.
+@item W3
+Use Emacs/W3.
@item w3m
Use @uref{http://emacs-w3m.namazu.org/, emacs-w3m}.
@@ -9347,12 +9361,13 @@ If displaying "text/html" is discouraged
@code{mm-discouraged-alternatives} in @ref{Display Customization,
Display Customization, , emacs-mime, Emacs-Mime Manual}. Images or
other material inside a "multipart/related" part might be overlooked
-when this variable is nil.
+when this variable is @code{nil}.
@vindex gnus-mime-display-multipart-as-mixed
@item gnus-mime-display-multipart-as-mixed
-Display "multipart" parts as "multipart/mixed". If t, it overrides
nil
-values of @code{gnus-mime-display-multipart-alternative-as-mixed} and
+Display "multipart" parts as "multipart/mixed". If @code{t}, it
+overrides @code{nil} values of
+@code{gnus-mime-display-multipart-alternative-as-mixed} and
@code{gnus-mime-display-multipart-related-as-mixed}.
@vindex mm-file-name-rewrite-functions
@@ -9404,7 +9419,7 @@ newsreaders and mailers that do not unde
just send out messages without saying what character sets they use. To
help a bit with this, some local news hierarchies have policies that say
what character set is the default. For instance, the @samp{fj}
-hierarchy uses @code{iso-2022-jp-2}.
+hierarchy uses @code{iso-2022-jp}.
@vindex gnus-group-charset-alist
This knowledge is encoded in the @code{gnus-group-charset-alist}
@@ -9622,18 +9637,17 @@ by giving the @kbd{A T} command a numeri
@kindex M-^ (Summary)
@cindex Message-ID
@cindex fetching by Message-ID
-You can also ask the @acronym{NNTP} server for an arbitrary article, no
-matter what group it belongs to. @kbd{M-^}
-(@code{gnus-summary-refer-article}) will ask you for a
-@code{Message-ID}, which is one of those long, hard-to-read thingies
-that look something like @samp{<38o6up$6f2@(a)hymir.ifi.uio.no>}. You
-have to get it all exactly right. No fuzzy searches, I'm afraid.
+You can also ask Gnus for an arbitrary article, no matter what group it
+belongs to. @kbd{M-^} (@code{gnus-summary-refer-article}) will ask you
+for a @code{Message-ID}, which is one of those long, hard-to-read
+thingies that look something like @samp{<38o6up$6f2@(a)hymir.ifi.uio.no>}.
+You have to get it all exactly right. No fuzzy searches, I'm afraid.
+
+Gnus looks for the @code{Message-ID} in the headers that have already
+been fetched, but also tries all the select methods specified by
+@code{gnus-refer-article-method} if it is not found.
@end table
-The current select method will be used when fetching by
-@code{Message-ID} from non-news select method, but you can override this
-by giving this command a prefix.
-
@vindex gnus-refer-article-method
If the group you are reading is located on a back end that does not
support fetching by @code{Message-ID} very well (like @code{nnspool}),
@@ -11430,13 +11444,15 @@ that have none when you do a @kbd{a}.
@item gnus-confirm-mail-reply-to-news
@vindex gnus-confirm-mail-reply-to-news
-This can also be a function receiving the group name as the only
-parameter which should return non-@code{nil} if a confirmation is
-needed, or a regular expression matching group names, where
-confirmation is should be asked for.
+If non-@code{nil}, Gnus will ask you for a confirmation when you are
+about to reply to news articles by mail. If it is @code{nil}, nothing
+interferes in what you want to do. This can also be a function
+receiving the group name as the only parameter which should return
+non-@code{nil} if a confirmation is needed, or a regular expression
+matching group names, where confirmation should be asked for.
If you find yourself never wanting to reply to mail, but occasionally
-press R anyway, this variable might be for you.
+press @kbd{R} anyway, this variable might be for you.
@item gnus-confirm-treat-mail-like-news
@vindex gnus-confirm-treat-mail-like-news
@@ -12196,6 +12212,9 @@ Where the news is to be fetched from---t
@item s
The opened/closed/denied status of the server.
+
+@item a
+Whether this server is agentized.
@end table
@vindex gnus-server-mode-line-format
@@ -12674,35 +12693,6 @@ that says how many seconds the @code{nnt
connection before giving up. If it is @code{nil}, which is the default,
no timeouts are done.
-@c @item nntp-command-timeout
-@c @vindex nntp-command-timeout
-@c @cindex PPP connections
-@c @cindex dynamic IP addresses
-@c If you're running Gnus on a machine that has a dynamically assigned
-@c address, Gnus may become confused. If the address of your machine
-@c changes after connecting to the @acronym{NNTP} server, Gnus will simply sit
-@c waiting forever for replies from the server. To help with this
-@c unfortunate problem, you can set this command to a number. Gnus will
-@c then, if it sits waiting for a reply from the server longer than that
-@c number of seconds, shut down the connection, start a new one, and resend
-@c the command. This should hopefully be transparent to the user. A
-@c likely number is 30 seconds.
-@c
-@c @item nntp-retry-on-break
-@c @vindex nntp-retry-on-break
-@c If this variable is non-@code{nil}, you can also @kbd{C-g} if Gnus
-@c hangs. This will have much the same effect as the command timeout
-@c described above.
-
-@item nntp-server-hook
-@vindex nntp-server-hook
-This hook is run as the last step when connecting to an @acronym{NNTP}
-server.
-
-@item nntp-buggy-select
-@vindex nntp-buggy-select
-Set this to non-@code{nil} if your select routine is buggy.
-
@item nntp-nov-is-evil
@vindex nntp-nov-is-evil
If the @acronym{NNTP} server does not support @acronym{NOV}, you could set this
@@ -12734,11 +12724,6 @@ that fetching will probably be slower.
@vindex nntp-prepare-server-hook
A hook run before attempting to connect to an @acronym{NNTP} server.
-@item nntp-warn-about-losing-connection
-@vindex nntp-warn-about-losing-connection
-If this variable is non-@code{nil}, some noise will be made when a
-server closes connection.
-
@item nntp-record-commands
@vindex nntp-record-commands
If non-@code{nil}, @code{nntp} will log all commands it sends to the
@@ -12751,8 +12736,8 @@ that doesn't seem to work.
It is possible to customize how the connection to the nntp server will
be opened. If you specify an @code{nntp-open-connection-function}
parameter, Gnus will use that function to establish the connection.
-Five pre-made functions are supplied. These functions can be grouped in
-two categories: direct connection functions (three pre-made), and
+Six pre-made functions are supplied. These functions can be grouped in
+two categories: direct connection functions (four pre-made), and
indirect ones (two pre-made).
@item nntp-prepare-post-hook
@@ -12770,14 +12755,6 @@ inhibit Gnus to add a @code{Message-ID}
Note that not all servers support the recommended ID. This works for
INN versions 2.3.0 and later, for instance.
-@item nntp-read-timeout
-@vindex nntp-read-timeout
-How long nntp should wait between checking for the end of output.
-Shorter values mean quicker response, but is more CPU intensive. The
-default is 0.1 seconds. If you have a slow line to the server (and
-don't like to see Emacs eat your available CPU power), you might set
-this to, say, 1.
-
@end table
@menu
@@ -12952,7 +12929,9 @@ Address of the intermediate host to conn
The following variables affect the behavior of all, or several of the
pre-made connection functions. When not specified, all functions are
-affected.
+affected (the values of the following variables will be used as the
+default if each virtual @code{nntp} server doesn't specify those server
+variables individually).
@table @code
@@ -12960,7 +12939,7 @@ affected.
@vindex nntp-pre-command
A command wrapper to use when connecting through a non native
connection function (all except @code{nntp-open-network-stream},
-@code{nntp-open-tls-stream}, and @code{nntp-open-ssl-stream}. This is
+@code{nntp-open-tls-stream}, and @code{nntp-open-ssl-stream}). This is
where you would put a @samp{SOCKS} wrapper for instance.
@item nntp-address
@@ -12971,7 +12950,7 @@ The address of the @acronym{NNTP} server
@vindex nntp-port-number
Port number to connect to the @acronym{NNTP} server. The default is
@samp{nntp}. If you use @acronym{NNTP} over
-@acronym{tls}/@acronym{ssl}, you may want to use integer ports rather
+@acronym{TLS}/@acronym{SSL}, you may want to use integer ports rather
than named ports (i.e, use @samp{563} instead of @samp{snews} or
@samp{nntps}), because external @acronym{TLS}/@acronym{SSL} tools may
not work with named ports.
@@ -13293,7 +13272,7 @@ function.
By default the splitting codes @acronym{MIME} decodes headers so you
can match on non-@acronym{ASCII} strings. The
@code{nnmail-mail-splitting-charset} variable specifies the default
-charset for decoding. The behaviour can be turned off completely by
+charset for decoding. The behavior can be turned off completely by
binding @code{nnmail-mail-splitting-decodes} to @code{nil}, which is
useful if you want to match articles based on the raw header data.
@@ -13831,7 +13810,8 @@ is to say where the incoming files will
Prefix for file name for storing incoming mail. The default is
@file{Incoming}, in which case files will end up with names like
@file{Incoming30630D_} or @file{Incoming298602ZD}. This is really only
-relevant if @code{mail-source-delete-incoming} is @code{nil}.
+relevant if @code{mail-source-delete-incoming} is @code{nil} or a
+number.
@item mail-source-default-file-modes
@vindex mail-source-default-file-modes
@@ -14011,7 +13991,7 @@ splits. Here are the possible split syn
@table @code
-@item group
+@item group
If the split is a string, that will be taken as a group name. Normal
regexp match expansion will be done. See below for examples.
@@ -14142,9 +14122,9 @@ surrounded by anything.
In this example, messages sent from @samp{joedavis@(a)foo.org} will
normally not be filed in @samp{joemail}. With
-@code{nnmail-split-fancy-match-partial-words} set to t, however, the
-match will happen. In effect, the requirement of a word boundary is
-removed and instead the match becomes more like a grep.
+@code{nnmail-split-fancy-match-partial-words} set to @code{t},
+however, the match will happen. In effect, the requirement of a word
+boundary is removed and instead the match becomes more like a grep.
@findex nnmail-split-fancy-with-parent
@code{nnmail-split-fancy-with-parent} is a function which allows you to
@@ -15126,8 +15106,9 @@ An integer specifying the minimum age, i
before it will be expired, or the symbol @code{never} to specify that
articles should never be expired. If this parameter is not set,
@code{nnmaildir} falls back to the usual
-@code{nnmail-expiry-wait}(@code{-function}) variables (overrideable by
-the @code{expiry-wait}(@code{-function}) group parameters. If you
+@code{nnmail-expiry-wait}(@code{-function}) variables (the
+@code{expiry-wait} group parameter overrides @code{nnmail-expiry-wait}
+and makes @code{nnmail-expiry-wait-function} ineffective). If you
wanted a value of 3 days, you could use something like @code{[(* 3 24
60 60)]}; @code{nnmaildir} will evaluate the form and use the result.
An article's age is measured starting from the article file's
@@ -15150,8 +15131,8 @@ the parameter belongs to, then the artic
you use the vector form, the first element is evaluated once for each
article. So that form can refer to
@code{nnmaildir-article-file-name}, etc., to decide where to put the
-article. @emph{If this parameter is not set, @code{nnmaildir} does
-not fall back to the @code{expiry-target} group parameter or the
+article. @emph{Even if this parameter is not set, @code{nnmaildir}
+does not fall back to the @code{expiry-target} group parameter or the
@code{nnmail-expiry-target} variable.}
@item read-only
@@ -15567,10 +15548,11 @@ interfaces to these sources.
* Ultimate:: The Ultimate Bulletin Board systems.
* Web Archive:: Reading mailing list archived on web.
* RSS:: Reading RDF site summary.
-* Customizing w3:: Doing stuff to Emacs/w3 from Gnus.
+* Customizing W3:: Doing stuff to Emacs/W3 from Gnus.
@end menu
-All the web sources require Emacs/w3 and the url library to work.
+All the web sources require Emacs/W3 and the url library or those
+alternatives to work.
The main caveat with all these web sources is that they probably won't
work for a very long time. Gleaning information from the @acronym{HTML} data
@@ -15657,8 +15639,9 @@ make money off of advertisements, not to
community. Since @code{nnweb} washes the ads off all the articles, one
might think that the providers might be somewhat miffed. We'll see.
-You must have the @code{url} and @code{w3} package installed to be able
-to use @code{nnweb}.
+You must have the @code{url} and @code{W3} package or those alternatives
+(try @code{customize-group} on the @samp{mm-url} variable group)
+installed to be able to use @code{nnweb}.
Virtual server variables:
@@ -15872,15 +15855,46 @@ changes to a wiki (e.g. @url{http://clik
@acronym{RSS} has a quite regular and nice interface, and it's
possible to get the information Gnus needs to keep groups updated.
+
+Note: you had better use Emacs which supports the @code{utf-8} coding
+system because @acronym{RSS} uses UTF-8 for encoding non-@acronym{ASCII}
+text by default. It is also used by default for non-@acronym{ASCII}
+group names.
-@kindex G R (Summary)
-Use @kbd{G R} from the summary buffer to subscribe to a feed---you
-will be prompted for the location of the feed.
+@kindex G R (Group)
+Use @kbd{G R} from the group buffer to subscribe to a feed---you will be
+prompted for the location, the title and the description of the feed.
+The title, which allows any characters, will be used for the group name
+and the name of the group data file. The description can be omitted.
An easy way to get started with @code{nnrss} is to say something like
the following in the group buffer: @kbd{B nnrss RET RET y}, then
subscribe to groups.
+The @code{nnrss} back end saves the group data file in
+@code{nnrss-directory} (see below) for each @code{nnrss} group. File
+names containing non-@acronym{ASCII} characters will be encoded by the
+coding system specified with the @code{nnmail-pathname-coding-system}
+variable. If it is @code{nil}, in Emacs the coding system defaults to
+the value of @code{default-file-name-coding-system}. If you are using
+XEmacs and want to use non-@acronym{ASCII} group names, you should set
+the value for the @code{nnmail-pathname-coding-system} variable properly.
+
+@cindex OPML
+You can also use the following commands to import and export your
+subscriptions from a file in @acronym{OPML} format (Outline Processor
+Markup Language).
+
+@defun nnrss-opml-import file
+Prompt for an @acronym{OPML} file, and subscribe to each feed in the
+file.
+@end defun
+
+@defun nnrss-opml-export
+Write your current @acronym{RSS} subscriptions to a buffer in
+@acronym{OPML} format.
+@end defun
+
The following @code{nnrss} variables can be altered:
@table @code
@@ -15889,6 +15903,13 @@ The following @code{nnrss} variables can
The directory where @code{nnrss} stores its files. The default is
@file{~/News/rss/}.
+@item nnrss-file-coding-system
+@vindex nnrss-file-coding-system
+The coding system used when reading and writing the @code{nnrss} groups
+data files. The default is the value of
+@code{mm-universal-coding-system} (which defaults to @code{emacs-mule}
+in Emacs or @code{escape-quoted} in XEmacs).
+
@item nnrss-use-local
@vindex nnrss-use-local
@findex nnrss-generate-download-script
@@ -15935,18 +15956,19 @@ summary buffer.
(add-to-list 'nnmail-extra-headers nnrss-url-field)
@end lisp
-@node Customizing w3
-@subsection Customizing w3
-@cindex w3
+@node Customizing W3
+@subsection Customizing W3
+@cindex W3
@cindex html
@cindex url
@cindex Netscape
-Gnus uses the url library to fetch web pages and Emacs/w3 to display web
-pages. Emacs/w3 is documented in its own manual, but there are some
-things that may be more relevant for Gnus users.
+Gnus uses the url library to fetch web pages and Emacs/W3 (or those
+alternatives) to display web pages. Emacs/W3 is documented in its own
+manual, but there are some things that may be more relevant for Gnus
+users.
-For instance, a common question is how to make Emacs/w3 follow links
+For instance, a common question is how to make Emacs/W3 follow links
using the @code{browse-url} functions (which will call some external web
browser like Netscape). Here's one way:
@@ -15961,7 +15983,7 @@ browser like Netscape). Here's one way:
(w3-fetch-orig url target)))))
@end lisp
-Put that in your @file{.emacs} file, and hitting links in w3-rendered
+Put that in your @file{.emacs} file, and hitting links in W3-rendered
@acronym{HTML} in the Gnus article buffers will use @code{browse-url} to
follow the link.
@@ -16259,7 +16281,7 @@ RFC 2060 for more information on valid s
A file containing credentials used to log in on servers. The format is
(almost) the same as the @code{ftp} @file{~/.netrc} file. See the
variable @code{nntp-authinfo-file} for exact syntax; also see
-@ref{NNTP}. An example of an .authinfo line for an IMAP server, is:
+@ref{NNTP}. An example of an .authinfo line for an IMAP server, is:
@example
machine students.uio.no login larsi password geheimnis port imap
@@ -16459,7 +16481,7 @@ Nnmail equivalent: @code{nnmail-split-fa
Set to non-@code{nil} to download entire articles during splitting.
This is generally not required, and will slow things down
considerably. You may need it if you want to use an advanced
-splitting function that analyses the body to split the article.
+splitting function that analyzes the body to split the article.
@end table
@@ -16554,7 +16576,7 @@ delete them.
@cindex namespaces
The @acronym{IMAP} protocol has a concept called namespaces, described
-by the following text in the RFC:
+by the following text in the RFC2060:
@display
5.1.2. Mailbox Namespace Naming Convention
@@ -16597,7 +16619,7 @@ tool and should be used only if you are
@acronym{IMAP} is a complex protocol, more so than @acronym{NNTP} or
@acronym{POP3}. Implementation bugs are not unlikely, and we do our
-best to fix them right away. If you encounter odd behaviour, chances
+best to fix them right away. If you encounter odd behavior, chances
are that either the server or Gnus is buggy.
If you are familiar with network protocols in general, you will
@@ -16612,7 +16634,7 @@ to include the protocol dump when report
@vindex imap-log
Because the protocol dump, when enabled, generates lots of data, it is
disabled by default. You can enable it by setting @code{imap-log} as
-follows:
+follows:
@lisp
(setq imap-log t)
@@ -16744,12 +16766,11 @@ as a newsgroup. Several files types are
@table @code
@cindex Babyl
@cindex Rmail mbox
-
@item babyl
The Babyl (Rmail) mail box.
+
@cindex mbox
@cindex Unix mbox
-
@item mbox
The standard Unix mbox file.
@@ -16760,13 +16781,9 @@ The MMDF mail box format.
@item news
Several news articles appended into a file.
-@item rnews
@cindex rnews batch files
+@item rnews
The rnews batch transport format.
-@cindex forwarded messages
-
-@item forward
-Forwarded articles.
@item nsmail
Netscape mail boxes.
@@ -16783,6 +16800,7 @@ A @acronym{MIME} digest of messages.
@item lanl-gov-announce
Announcement messages from LANL Gov Announce.
+@cindex forwarded messages
@item rfc822-forward
A message forwarded according to RFC822.
@@ -16886,34 +16904,48 @@ totally ignored.
@item article-begin
This setting has to be present in all document type definitions. It
-says what the beginning of each article looks like.
+says what the beginning of each article looks like. To do more
+complicated things that cannot be dealt with a simple regexp, you can
+use @code{article-begin-function} instead of this.
+
+@item article-begin-function
+If present, this should be a function that moves point to the beginning
+of each article. This setting overrides @code{article-begin}.
+@item head-begin
+If present, this should be a regexp that matches the head of the
+article. To do more complicated things that cannot be dealt with a
+simple regexp, you can use @code{head-begin-function} instead of this.
+
@item head-begin-function
If present, this should be a function that moves point to the head of
-the article.
+the article. This setting overrides @code{head-begin}.
-@item nndoc-head-begin
-If present, this should be a regexp that matches the head of the
-article.
-
-@item nndoc-head-end
+@item head-end
This should match the end of the head of the article. It defaults to
@samp{^$}---the empty line.
+@item body-begin
+This should match the beginning of the body of the article. It defaults
+to @samp{^\n}. To do more complicated things that cannot be dealt with
+a simple regexp, you can use @code{body-begin-function} instead of this.
+
@item body-begin-function
If present, this function should move point to the beginning of the body
-of the article.
+of the article. This setting overrides @code{body-begin}.
-@item body-begin
-This should match the beginning of the body of the article. It defaults
-to @samp{^\n}.
+@item body-end
+If present, this should match the end of the body of the article. To do
+more complicated things that cannot be dealt with a simple regexp, you
+can use @code{body-end-function} instead of this.
@item body-end-function
If present, this function should move point to the end of the body of
-the article.
+the article. This setting overrides @code{body-end}.
-@item body-end
-If present, this should match the end of the body of the article.
+@item file-begin
+If present, this should match the beginning of the file. All text
+before this regexp will be totally ignored.
@item file-end
If present, this should match the end of the file. All text after this
@@ -16944,6 +16976,19 @@ understand. It is called with the artic
expected to generate a nice head for the article in question. It is
called when requesting the headers of all articles.
+@item generate-article-function
+If present, this function is called to generate an entire article that
+Gnus can understand. It is called with the article number as a
+parameter when requesting all articles.
+
+@item dissection-function
+If present, this function is called to dissect a document by itself,
+overriding @code{first-article}, @code{article-begin},
+@code{article-begin-function}, @code{head-begin},
+@code{head-begin-function}, @code{head-end}, @code{body-begin},
+@code{body-begin-function}, @code{body-end}, @code{body-end-function},
+@code{file-begin}, and @code{file-end}.
+
@end table
Let's look at the most complicated example I can come up with---standard
@@ -18334,11 +18379,11 @@ faces will be obscured by the undownload
situation, you have two choices available. First, you can completely
disable the undownload faces by customizing
@code{gnus-summary-highlight} to delete the three cons-cells that
-refer to the @code{gnus-summary-*-undownloaded-face} faces. Second, if
-you prefer to take a more fine-grained approach, you may set the
-@code{agent-disable-undownloaded-faces} group parameter to t. This
-parameter, like all other agent parameters, may be set on an Agent
-Category (@pxref{Agent Categories}), a Group Topic (@pxref{Topic
+refer to the @code{gnus-summary-*-undownloaded-face} faces. Second,
+if you prefer to take a more fine-grained approach, you may set the
+@code{agent-disable-undownloaded-faces} group parameter to @code{t}.
+This parameter, like all other agent parameters, may be set on an
+Agent Category (@pxref{Agent Categories}), a Group Topic (@pxref{Topic
Parameters}), or an individual group (@pxref{Group Parameters}).
@node Agent as Cache
@@ -18550,7 +18595,7 @@ online status.
If @code{gnus-agent-mark-unread-after-downloaded} is non-@code{nil},
mark articles as unread after downloading. This is usually a safe
thing to do as the newly downloaded article has obviously not been
-read. The default is t.
+read. The default is @code{t}.
@item gnus-agent-consider-all-articles
@vindex gnus-agent-consider-all-articles
@@ -18594,7 +18639,7 @@ that most will look for it here, this va
buffer how to maneuver around undownloaded (only headers stored in the
agent) and unfetched (neither article nor headers stored) articles.
-The legal values are @code{nil} (maneuver to any article),
+The valid values are @code{nil} (maneuver to any article),
@code{undownloaded} (maneuvering while unplugged ignores articles that
have not been fetched), @code{always-undownloaded} (maneuvering always
ignores articles that have not been fetched), @code{unfetched}
@@ -18688,7 +18733,7 @@ may ask:
@table @dfn
@item If I read an article while plugged, do they get entered into the Agent?
-@strong{No}. If you want this behaviour, add
+@strong{No}. If you want this behavior, add
@code{gnus-agent-fetch-selected-article} to
@code{gnus-select-article-hook}.
@@ -19723,7 +19768,8 @@ group name, the @var{file-name} will be
@item
A function. If the function returns non-@code{nil}, the result will
-be used as the home score file.
+be used as the home score file. The function will be called with the
+name of the group as the parameter.
@item
A string. Use the string as the home score file.
@@ -20460,8 +20506,19 @@ very interesting:
1000)
@end example
-The possibilities are endless.
+Suppose you're reading a high volume group and you're only interested
+in replies. The plan is to score down all articles that don't have
+subject that begin with "Re:", "Fw:" or "Fwd:" and then
score up all
+parents of articles that have subjects that begin with reply marks.
+
+@example
+((! ("subject" "re:\\|fwd?:" r))
+ -200)
+((1- ("subject" "re:\\|fwd?:" r))
+ 200)
+@end example
+The possibilities are endless.
@node Advanced Scoring Tips
@subsection Advanced Scoring Tips
@@ -20974,7 +21031,7 @@ mode-line variables.
Gnus usually moves point to a pre-defined place on each line in most
buffers. By default, point move to the first colon character on the
-line. You can customize this behaviour in three different ways.
+line. You can customize this behavior in three different ways.
You can move the colon character to somewhere else on the line.
@@ -21711,28 +21768,19 @@ The specs are applied left-to-right.
@item gnus-nocem-verifyer
@vindex gnus-nocem-verifyer
-@findex mc-verify
+@findex pgg-verify
This should be a function for verifying that the NoCeM issuer is who she
-says she is. The default is @code{mc-verify}, which is a Mailcrypt
-function. If this is too slow and you don't care for verification
-(which may be dangerous), you can set this variable to @code{nil}.
-
-If you want signed NoCeM messages to be verified and unsigned messages
-not to be verified (but used anyway), you could do something like:
+says she is. The default is @code{pgg-verify}, which returns
+non-@code{nil} if the verification is successful, otherwise (including
+the case the NoCeM message was not signed) returns @code{nil}. If this
+is too slow and you don't care for verification (which may be dangerous),
+you can set this variable to @code{nil}.
+
+Formerly the default was @code{mc-verify}, which is a Mailcrypt
+function. While you can still use it, you can change it into
+@code{pgg-verify} running with GnuPG if you are willing to add the
+@acronym{PGP} public keys to GnuPG's keyring.
-@lisp
-(setq gnus-nocem-verifyer 'my-gnus-mc-verify)
-
-(defun my-gnus-mc-verify ()
- (not (eq 'forged
- (ignore-errors
- (if (mc-verify)
- t
- 'forged)))))
-@end lisp
-
-This might be dangerous, though.
-
@item gnus-nocem-directory
@vindex gnus-nocem-directory
This is where Gnus will store its NoCeM cache files. The default is@*
@@ -21933,11 +21981,11 @@ function, this function will be called w
If the @code{gnus-article-x-face-too-ugly} (which is a regexp) matches
the @code{From} header, the face will not be shown.
-The default action under Emacs 20 is to fork off the @code{display}
-program@footnote{@code{display} is from the ImageMagick package. For
-the @code{uncompface} and @code{icontopbm} programs look for a package
-like @code{compface} or @code{faces-xface} on a GNU/Linux system.} to
-view the face.
+The default action under Emacs without image support is to fork off the
+@code{display} program@footnote{@code{display} is from the ImageMagick
+package. For the @code{uncompface} and @code{icontopbm} programs look
+for a package like @code{compface} or @code{faces-xface} on a GNU/Linux
+system.} to view the face.
Under XEmacs or Emacs 21+ with suitable image support, the default
action is to display the face before the @code{From} header. (It's
@@ -22183,18 +22231,6 @@ This is where Gnus will look for picture
auto-detect this directory, but you may set it manually if you have an
unusual directory structure.
-@item gnus-xmas-logo-color-alist
-@vindex gnus-xmas-logo-color-alist
-This is an alist where the key is a type symbol and the values are the
-foreground and background color of the splash page glyph.
-
-@item gnus-xmas-logo-color-style
-@vindex gnus-xmas-logo-color-style
-This is the key used to look up the color in the alist described above.
-Valid values include @code{flame}, @code{pine}, @code{moss},
-@code{irish}, @code{sky}, @code{tin}, @code{velvet}, @code{grape},
-@code{labia}, @code{berry}, @code{neutral}, and @code{september}.
-
@item gnus-xmas-modeline-glyph
@vindex gnus-xmas-modeline-glyph
A glyph displayed in all Gnus mode lines. It is a tiny gnu head by
@@ -22208,9 +22244,19 @@ default.
@item gnus-use-toolbar
@vindex gnus-use-toolbar
-If @code{nil}, don't display toolbars. If non-@code{nil}, it should be
-one of @code{default-toolbar}, @code{top-toolbar}, @code{bottom-toolbar},
-@code{right-toolbar}, or @code{left-toolbar}.
+This variable specifies the position to display the toolbar. If
+@code{nil}, don't display toolbars. If it is non-nil, it should be one
+of the symbols @code{default}, @code{top}, @code{bottom}, @code{right},
+and @code{left}. @code{default} means to use the default toolbar, the
+rest mean to display the toolbar on the place which those names show.
+The default is @code{default}.
+
+@item gnus-toolbar-thickness
+@vindex gnus-toolbar-thickness
+Cons of the height and the width specifying the thickness of a toolbar.
+The height is used for the toolbar displayed on the top or the bottom,
+the width is used for the toolbar displayed on the right or the left.
+The default is that of the default toolbar.
@item gnus-group-toolbar
@vindex gnus-group-toolbar
@@ -22323,7 +22369,7 @@ messages per day from @samp{random-addre
@samp{vmadmin.com}. If you get 200 messages about @samp{VIAGRA}, you
discard all messages with @samp{VIAGRA} in the message. If you get
lots of spam from Bulgaria, for example, you try to filter all mail
-from Bulgarian IPs.
+from Bulgarian IPs.
This, unfortunately, is a great way to discard legitimate e-mail. The
risks of blocking a whole country (Bulgaria, Norway, Nigeria, China,
@@ -22666,22 +22712,22 @@ variables. Try @code{customize-group} o
group.
@menu
-* Spam ELisp Package Sequence of Events::
-* Spam ELisp Package Filtering of Incoming Mail::
-* Spam ELisp Package Global Variables::
-* Spam ELisp Package Configuration Examples::
-* Blacklists and Whitelists::
-* BBDB Whitelists::
-* Gmane Spam Reporting::
-* Anti-spam Hashcash Payments::
-* Blackholes::
-* Regular Expressions Header Matching::
-* Bogofilter::
-* ifile spam filtering::
-* spam-stat spam filtering::
-* SpamOracle::
-* Extending the Spam ELisp package::
-@end menu
+* Spam ELisp Package Sequence of Events::
+* Spam ELisp Package Filtering of Incoming Mail::
+* Spam ELisp Package Global Variables::
+* Spam ELisp Package Configuration Examples::
+* Blacklists and Whitelists::
+* BBDB Whitelists::
+* Gmane Spam Reporting::
+* Anti-spam Hashcash Payments::
+* Blackholes::
+* Regular Expressions Header Matching::
+* Bogofilter::
+* ifile spam filtering::
+* spam-stat spam filtering::
+* SpamOracle::
+* Extending the Spam ELisp package::
+@end menu
@node Spam ELisp Package Sequence of Events
@subsubsection Spam ELisp Package Sequence of Events
@@ -23136,7 +23182,7 @@ From Ted Zlatanov <tzz@(a)lifelogs.com>.
;; @r{any ham goes to my @samp{nnimap+mail.lifelogs.com:mail} folder, but}
;; @r{also to my @samp{nnimap+mail.lifelogs.com:trainham} folder for training}
- (ham-process-destination "nnimap+mail.lifelogs.com:mail"
+ (ham-process-destination "nnimap+mail.lifelogs.com:mail"
"nnimap+mail.lifelogs.com:trainham")
;; @r{in this group, only @samp{!} marks are ham}
(ham-marks
@@ -23177,7 +23223,7 @@ does most of the job for me:
(spam-contents gnus-group-spam-classification-ham))
@end lisp
-@itemize
+@itemize
@item @b{The Spam folder:}
@@ -23270,7 +23316,7 @@ customizing the group parameters or the
added to a group's @code{spam-process} parameter, the senders of
spam-marked articles will be added to the blacklist.
-@emph{WARNING}
+@emph{WARNING}
Instead of the obsolete
@code{gnus-group-spam-exit-processor-blacklist}, it is recommended
@@ -23289,7 +23335,7 @@ ham-marked articles in @emph{ham} groups
whitelist. Note that this ham processor has no effect in @emph{spam}
or @emph{unclassified} groups.
-@emph{WARNING}
+@emph{WARNING}
Instead of the obsolete
@code{gnus-group-ham-exit-processor-whitelist}, it is recommended
@@ -23355,7 +23401,7 @@ ham-marked articles in @emph{ham} groups
BBDB. Note that this ham processor has no effect in @emph{spam}
or @emph{unclassified} groups.
-@emph{WARNING}
+@emph{WARNING}
Instead of the obsolete
@code{gnus-group-ham-exit-processor-BBDB}, it is recommended
@@ -23382,7 +23428,7 @@ HTTP request.
Gmane can be found at @uref{http://gmane.org}.
-@emph{WARNING}
+@emph{WARNING}
Instead of the obsolete
@code{gnus-group-spam-exit-processor-report-gmane}, it is recommended
@@ -23551,7 +23597,7 @@ customizing the group parameters or the
added to a group's @code{spam-process} parameter, spam-marked articles
will be added to the Bogofilter spam database.
-@emph{WARNING}
+@emph{WARNING}
Instead of the obsolete
@code{gnus-group-spam-exit-processor-bogofilter}, it is recommended
@@ -23568,7 +23614,7 @@ articles in @emph{ham} groups will be ad
of non-spam messages. Note that this ham processor has no effect in
@emph{spam} or @emph{unclassified} groups.
-@emph{WARNING}
+@emph{WARNING}
Instead of the obsolete
@code{gnus-group-ham-exit-processor-bogofilter}, it is recommended
@@ -23655,7 +23701,7 @@ customizing the group parameters or the
added to a group's @code{spam-process} parameter, the spam-marked
articles will be added to the spam-stat database of spam messages.
-@emph{WARNING}
+@emph{WARNING}
Instead of the obsolete
@code{gnus-group-spam-exit-processor-stat}, it is recommended
@@ -23672,7 +23718,7 @@ articles in @emph{ham} groups will be ad
of non-spam messages. Note that this ham processor has no effect in
@emph{spam} or @emph{unclassified} groups.
-@emph{WARNING}
+@emph{WARNING}
Instead of the obsolete
@code{gnus-group-ham-exit-processor-stat}, it is recommended
@@ -23764,7 +23810,7 @@ customizing the group parameter or the
to a group's @code{spam-process} parameter, spam-marked articles will be
sent to SpamOracle as spam samples.
-@emph{WARNING}
+@emph{WARNING}
Instead of the obsolete
@code{gnus-group-spam-exit-processor-spamoracle}, it is recommended
@@ -23781,7 +23827,7 @@ to a group's @code{spam-process} paramet
messages. Note that this ham processor has no effect in @emph{spam} or
@emph{unclassified} groups.
-@emph{WARNING}
+@emph{WARNING}
Instead of the obsolete
@code{gnus-group-ham-exit-processor-spamoracle}, it is recommended
@@ -23876,7 +23922,7 @@ Note you don't have to provide a spam or
provide them if Blackbox supports spam or ham processing.
Also, ham and spam processors are being phased out as single
-variables. Instead the form @code{'(spam spam-use-blackbox)} or
+variables. Instead the form @code{'(spam spam-use-blackbox)} or
@code{'(ham spam-use-blackbox)} is favored. For now, spam/ham
processor variables are still around but they won't be for long.
@@ -24264,7 +24310,7 @@ to the Gnus back ends instead of Gnus pr
@item nnheader-max-head-length
@vindex nnheader-max-head-length
When the back ends read straight heads of articles, they all try to read
-as little as possible. This variable (default 4096) specifies
+as little as possible. This variable (default 8192) specifies
the absolute max length the back ends will try to read before giving up
on finding a separator line between the head and the body. If this
variable is @code{nil}, there is no upper read bound. If it is
@@ -24381,7 +24427,7 @@ XEmacs is distributed as a collection of
whatever packages the Gnus XEmacs package requires. The current
requirements are @samp{gnus}, @samp{mail-lib}, @samp{xemacs-base},
@samp{eterm}, @samp{sh-script}, @samp{net-utils}, @samp{os-utils},
-@samp{dired}, @samp{mh-e}, @samp{sieve}, @samp{ps-print}, @samp{w3},
+@samp{dired}, @samp{mh-e}, @samp{sieve}, @samp{ps-print}, @samp{W3},
@samp{pgg}, @samp{mailcrypt}, @samp{ecrypto}, and @samp{sasl}.
@@ -24445,7 +24491,7 @@ On July 28th 1996 work on Red Gnus was b
January 25th 1997 (after 84 releases) as ``Gnus 5.4'' (67 releases).
On September 13th 1997, Quassia Gnus was started and lasted 37 releases.
-If was released as ``Gnus 5.6'' on March 8th 1998 (46 releases).
+It was released as ``Gnus 5.6'' on March 8th 1998 (46 releases).
Gnus 5.6 begat Pterodactyl Gnus on August 29th 1998 and was released as
``Gnus 5.8'' (after 99 releases and a CVS repository) on December 3rd
@@ -26102,7 +26148,7 @@ unplugged state. You can enroll or remo
@kbd{J r} in the server buffer. Gnus will not download articles into
the Agent cache, unless you instruct it to do so, though, by using
@kbd{J u} or @kbd{J s} from the Group buffer. You revert to the old
-behaviour of having the Agent disabled with @code{(setq gnus-agent
+behavior of having the Agent disabled with @code{(setq gnus-agent
nil)}. Note that putting @code{(gnus-agentize)} in @file{~/.gnus.el}
is not needed any more.
@@ -26242,7 +26288,7 @@ you post a message, and saves it in your
system. While the variable is called @code{canlock-password}, it is not
security sensitive data. Publishing your canlock string on the web
will not allow anyone to be able to anything she could not already do.
-The behaviour can be changed by customizing @code{message-insert-canlock}.
+The behavior can be changed by customizing @code{message-insert-canlock}.
@item
Gnus supports server-side mail filtering using Sieve.
@@ -26342,7 +26388,7 @@ This change was made to avoid conflict w
@item
The default for @code{message-forward-show-mml} changed to symbol @code{best}.
-The behaviour for the @code{best} value is to show @acronym{MML} (i.e.,
+The behavior for the @code{best} value is to show @acronym{MML} (i.e.,
convert to @acronym{MIME}) when appropriate. @acronym{MML} will not be
used when forwarding signed or encrypted messages, as the conversion
invalidate the digital signature.
@@ -26867,7 +26913,7 @@ in order to solve the problem yourself a
edebug. Debugging Lisp code is documented in the Elisp manual
(@pxref{Debugging, , Debugging Lisp Programs, elisp, The GNU Emacs
Lisp Reference Manual}). To get you started with edebug, consider if
-you discover some weird behaviour when pressing @kbd{c}, the first
+you discover some weird behavior when pressing @kbd{c}, the first
step is to do @kbd{C-h k c} and click on the hyperlink (Emacs only) in
the documentation buffer that leads you to the function definition,
then press @kbd{M-x edebug-defun RET} with point inside that function,
1.3 +2 -2 XEmacs/packages/xemacs-packages/gnus/texi/infohack.el
Index: infohack.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/texi/infohack.el,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- infohack.el 2004/09/28 02:21:31 1.2
+++ infohack.el 2005/11/15 03:46:36 1.3
@@ -18,8 +18,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
1.7 +10 -9 XEmacs/packages/xemacs-packages/gnus/texi/message.texi
Index: message.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/gnus/texi/message.texi,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- message.texi 2005/03/13 00:25:40 1.6
+++ message.texi 2005/11/15 03:46:36 1.7
@@ -8,12 +8,12 @@
@copying
This file documents Message, the Emacs message composition mode.
-Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-Free Software Foundation, Inc.
+Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005 Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
+under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with the Front-Cover texts being ``A GNU
Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
@@ -419,7 +419,7 @@ This is how you would do it.
@vindex message-subscribed-address-file
@item message-subscribed-address-file
-You might be one organised human freak and have a list of addresses of
+You might be one organized human freak and have a list of addresses of
all subscribed mailing lists in a separate file! Then you can just
set this variable to the name of the file and life would be good.
@@ -739,7 +739,7 @@ Move to the signature of the message (@c
@vindex message-beginning-of-line
If at beginning of header value, go to beginning of line, else go to
beginning of header value. (The header value comes after the header
-name and the colon.) This behaviour can be disabled by toggling
+name and the colon.) This behavior can be disabled by toggling
the variable @code{message-beginning-of-line}.
@end table
@@ -839,13 +839,14 @@ typed a non-@acronym{ASCII} domain name.
The @code{message-use-idna} variable control whether @acronym{IDNA} is
used. If the variable is @code{nil} no @acronym{IDNA} encoding will
ever happen, if it is set to the symbol @code{ask} the user will be
-queried (the default), and if set to @code{t} @acronym{IDNA} encoding
-happens automatically.
+queried, and if set to @code{t} @acronym{IDNA} encoding happens
+automatically (the default).
@findex message-idna-to-ascii-rhs
If you want to experiment with the @acronym{IDNA} encoding, you can
invoke @kbd{M-x message-idna-to-ascii-rhs RET} in the message buffer
-to have the non-@acronym{ASCII} domain names encoded while you edit the message.
+to have the non-@acronym{ASCII} domain names encoded while you edit
+the message.
Note that you must have @uref{http://www.gnu.org/software/libidn/, GNU
Libidn} installed in order to use this functionality.
@@ -1372,7 +1373,7 @@ Controls what to do with trailing @samp{
lines. If @code{nil}, leave the subject unchanged. If it is the symbol
@code{ask}, query the user what do do. In this case, the subject is
matched against @code{message-subject-trailing-was-ask-regexp}. If
-@code{message-subject-trailing-was-query} is t, always strip the
+@code{message-subject-trailing-was-query} is @code{t}, always strip the
trailing old subject. In this case,
@code{message-subject-trailing-was-regexp} is used.
1.1 XEmacs/packages/xemacs-packages/gnus/texi/gnus-logo.eps
Index: gnus-logo.eps
===================================================================
%!PS-Adobe-2.0 EPSF-2.0
%%Title: gnuslogo1.ps
%%Creator: XV Version 3.00 Rev: 3/30/93 - by John Bradley
%%BoundingBox: 0 0 493 505
%%Pages: 1
%%DocumentFonts:
%%EndComments
%%EndProlog
%%Page: 1 1
% remember original state
/origstate save def
% build a temporary dictionary
20 dict begin
% define string to hold a scanline's worth of data
/pix 62 string def
% lower left corner
0 0 translate
% size of image (on paper, in 1/72inch coords)
493.0 505.0 scale
% dimensions of data
493 505 1
% mapping matrix
[493 0 0 -505 0 505]
{currentfile pix readhexstring pop}
image
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffff01fffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffff8003ffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffff0000ffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffff8000007ffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffff0000003ffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffe0000000ffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffff000000003fff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffff000000000fff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffc0000000007ff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffff80000000003ff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffff00000000001ff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffe00000000000ff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffc00000000000ff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffff8000000000007f8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffff0000000000003f8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffff0000000000003f8
fffffffffffffffffffffffffff800ffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffe0000000000001f8
fffffffffffffffffffffffffff0001fffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffc0000000000000f8
ffffffffffffffffffffffffffc00007ffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffc0000000000000f8
ffffffffffffffffffffffffff000001ffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffff8000000000000078
fffffffffffffffffffffffffe0000003ffffffffffff0001fffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffff0000000000000038
fffffffffffffffffffffffffc0000001fffffffffffe00007ffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffe0000000000000038
fffffffffffffffffffffffff800000007ffffffffff800001ffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffe0000000000000038
fffffffffffffffffffffffff000000003fffffffffe0000003fffffffffffffffffffff
fffffffffffffffffffffffffffffffffffc0000000000000018
ffffffffffffffffffffffffe000000001fffffffff80000000fffffffffffffffffffff
fffffffffffffffffffffffffffffffffffc0000000000000018
ffffffffffffffffffffffffc000000000ffffffffe000000003ffffffffffffffffffff
fffffffffffffffffffffffffffffffffff80000000000000018
ffffffffffffffffffffffff80000000007fffffff8000000000ffffffffffffffffffff
fffffffffffffffffffffffffffffffffff80000000000000008
ffffffffffffffffffffffff00000000003fffffff00000000007fffffffffffffffffff
fffffffffffffffffffffffffffffffffff00000000000000008
fffffffffffffffffffffffe00000000001ffffffe00000000001fffffffffffffffffff
fffffffffffffffffffffffffffffffffff00000000000000008
fffffffffffffffffffffffc00000000000ffffff8000000000007ffffffffffffffffff
ffffffffffffffffffffffffffffffffffe00000000000000008
fffffffffffffffffffffff8000000000007fffff0000000000007ffffffffffffffffff
ffffffffffffffffffffffffffffffffffe00000000000000008
fffffffffffffffffffffff0000000000001ffffe0000000000000ffffffffffffffffff
ffffffffffffffffffffffffffffffffffc00000000000000000
ffffffffffffffffffffffe0000000000000ffffc00000000000007fffffffffffffffff
ffffffffffffffffffffffffffffffffffc00000000000000000
ffffffffffffffffffffffc00000000000007fff800000000000001fffffffffffffffff
ffffffffffffffffffffffffffffffffff800000000000000000
ffffffffffffffffffffff800000000000003fff000000000000000fffffffffffffffff
ffffffffffffffffffffffffffffffffff800000000000000000
ffffffffffffffffffffff000000000000003fff0000000000000007ffffffffffffffff
ffffffffffffffffffffffffffffffffff000040000000000000
fffffffffffffffffffffe000000000000000ffe0000000000000001ffffffffffffffff
ffffffffffffffffffffffffffffffffff0007ffc00000000000
fffffffffffffffffffffc000000000000000ffc0000000000000000ffffffffffffffff
fffffffffffffffffffffffffffffffffe001ffffc0000000000
fffffffffffffffffffffc0000000000000007fc00000000000000007fffffffffffffff
fffffffffffffffffffffffffffffffffc003ffffe0000000000
fffffffffffffffffffff80000000000000007f800000000000000003fffffffffffffff
fffffffffffffffffffffffffffffffffc007fffffc000000000
fffffffffffffffffffff00000000000000001f000000000000000001fffffffffffffff
fffffffffffffffffffffffffffffffff800fffffff000000000
ffffffffffffffffffffe00000000000000001f000000000000000000fffffffffffffff
fffffffffffffffffffffffffffffffff801fffffff800000000
ffffffffffffffffffffc00000000000000000e0000000000000000007ffffffffffffff
fffffffffffffffffffffffffffffffff003ffffffff00000000
ffffffffffffffffffff800000000000000000c0000000000000000003ffffffffffffff
fffffffffffffffffffffffffffffffff007ffffffff00000000
ffffffffffffffffffff00000000000000000000000000000000000000ffffffffffffff
ffffffffffffffffffffffffffffffffe00fffffffff80000000
fffffffffffffffffffe00000000000000000000000000000000000000ffffffffffffff
ffffffffffffffffffffffffffffffffe01fffffffffc0000008
fffffffffffffffffffc000000000000000000000000000000000000007fffffffffffff
ffffffffffffffffffffffffffffffffc03fffffffffc0000008
fffffffffffffffffff8000000000000000000000000000000000000001fffffffffffff
ffffffffffffffffffffffffffffffffc07ffffffffff0000000
fff9fffffffffffffff800000fe00000000000000000000000000000001fffffffffffff
ffffffffffffffffffffffffffffffff807ffffffffff0000000
fff9fffffffffffffff000001ff80000000000000000000000000000000fffffffffffff
ffffffffffffffffffffffffffffffff80fffffffffff0000008
fff0ffffffffffffffc000007ffc00000000000000000000000000000007ffffffffffff
ffffffffffffffffffffffffffffffff81fffffffffff8000008
fff0ffffffffffffffc00000fffc00000000000000000000000000000003ffffffffffff
ffffffffffffffffffffffffffffffff01fffffffffff8000008
ffe07fffffffffffff800001ffff00000000000000000000000000000001ffffffffffff
ffffffffffffffffffffffffffffffff03fffffffffffc000008
ffe07fffffffffffff00000fffffc0000000000000000000000000000000ffffffffffff
fffffffffffffffffffffffffffffffe03fffffffffffc000008
ffe03ffffffffffffc00001fffffe00000000000000000000000000000007fffffffffff
fffffffffffffffffffffffffffffffe07fffffffffffe000008
ffe03ffffffffffff800003ffffff00000000000000000000000000000003fffffffffff
fffffffffffffffffffffffffffffffe07fffffffffffe000008
ffc03ffffffffffff000007ffffff80000000000000f80000000000000003fffffffffff
fffffffffffffffffffffffffffffffe0ffffffffffffe000008
ffc01fffffffffffe00001fffffffe000000000000fffe000000000000001fffffffffff
fffffffffffffffffffffffffffffffc0ffffffffffffe000008
ffc00fffffffffffc00003ffffffff000000000001ffff800000000000000fffffffffff
fffffffffffffffffffffffffffffffc1fffffffffffff000008
ff800fffffffffff800003ffffffff800000000007ffffc000000000000007ffffffffff
fffffffffffffffffffffffffffffffc3fffffffffffff000008
ff8007fffffffffe00000fffffffffc0000000001ffffffc00000000000003ffffffffff
fffffffffffffffffffffffffffffff87fffffffffffff000008
ff8007fffffffffc00000fffffffffe0000000005ffffffe00000000000001ffffffffff
fffffffffffffffffffffffffffffff87fffffffffffff000008
ff8003fffffffff800001ffffffffff000000000ffffffffc0000000000000ffffffffff
fffffffffffffffffffffffffffffff87fffffffffffff000008
ff0001fffffffff000003ffffffffffc00000007fffffffff80000000000007fffffffff
fffffffffffffffffffffffffffffff8ffffffffffffff000008
ff0000ffffffffe000003ffffffffffc0000000ffffffffffc0000000000007fffffffff
fffffffffffffffffffffffffffffffcffffffffffffff000008
fe00007fffffff800000ffffffffffff0000001ffffffffffe0000000000001fffffffff
ffffffffffffffffffffffffffffe7fdffffffffffffff000008
fe00007fffffff000001ffffffffffff8000003fffffffffff0000000000001fffffffff
ffffffffffffffffffffffffffffe7fdffffffffffffff000008
fc00001ffffffc000003ffffffffffffc000007fffffffffffe0000000000007ffffffff
ffffffffffffffffffffffffffffc7ffffffffffffffff000008
fc00001ffffff0000003ffffffffffffe00000fffffffffffff0000000000007ffffffff
fffffffffeffffffffffffffffff87ffffffffffffffff000008
f800000fffffe0000007fffffffffffff00000fffffffffffff8000000000003ffffffff
fffffffffcffffffffffffffffff87ffffffffffffffff000008
f8000003ffff0000000ffffffffffffff80001fffffffffffffc000000000001ffffffff
fffffffff8ffffffffffffffffff07ffffffffffffffff000008
f8000001fffe0000001ffffffffffffff80001ffffffffffffff000000000000ffffffff
fffffffff8fffffffffffffffffe0fffffffffffffffff000008
f0000000fff00000003ffffffffffffffc0001ffffffffffffff8000000000007fffffff
fffffffff0fffffffffffffffffe0fffffffffffffffff000018
e00000001a000000007ffffffffffffffe0003ffffffffffffffc000000000003fffffff
fffffffff0fffffffffffffffffc0fffffffffffffffff000018
e000000000000000007fffffffffffffff0003ffffffffffffffc000000000003fffffff
ffffffffe0fffffffffffffffffc1fffffffffffffffff000018
c00000000000000000ffffffffffffffff0007ffffffffffffffe000000000001fffffff
ffffffffe0fffffffffffffffff81fffffffffffffffff000018
c00000000000000001ffffffffffffffff0007fffffffffffffff0000000000007ffffff
ffffffffc0fffffffffffffffff83fffffffffffffffff000018
800000000000000007ffffffffffffffff800ffffffffffffffffc000000000003ffffff
ffffffff01fffffffffffffffff03fffffffffffffffff000038
800000000000000007ffffffffffffffff800ffffffffffffffffe000000000001ffffff
ffffffff01fffffffffffffffff03fffffffffffffffff800038
00000000000000000fffffffffffffffffc00fffffffffffffffff000000000000ffffff
fffffffe03ffffffffffffffffe07fffffffffffffffff800038
00000000000000001fffffffffffffffffc01fffffffffffffffff8000000000007fffff
fffffffc03ffffffffffffffffe07fffffffffffffffff800038
00000000000000003fffffffffffffffffe03fffffffffffffffffc000000000003fffff
fffffff803ffffffffffffffffc07fffffffffffffffff800038
00000000000000007ffffffffffffffffff03fffffffffffffffffe000000000000fffff
fffffff007ffffffffffffffffc0ffffffffffffffffff800038
0000000000000000fffffffffffffffffff07ffffffffffffffffff000000000000fffff
fffffff007ffffffffffffffff80ffffffffffffffffff800078
0000000000000003ffffffffffffffff8ff87ffffffffffffffffff8000000000001ffff
ffffffc00fffffffffffffffff81ffffffffffffffffff800078
8000000000000007ffffffffffffffff0ff8fffffffffffffffffffc000000000000ffff
ffffffc00fffffffffffffffff01ffffffffffffffffff8000f8
8000000000000007fffffffffffffffe0ffffffffffffffffffffffe0000000000007fff
ffffff801fffffffffffffffff03ffffffffffffffffff8000f8
c00000000000001ffffffffffffffffc0fffffffffffffffffffffff0000000000001fff
fffffe001ffffffffffffffffe07ffffffffffffffffff8000f8
e00000000000007ffffffffffffffff83fffffffffffffffffffffffc0000000000007ff
fffff8003ffffffffffffffffc07ffffffffffffffffff8000f8
f00000000000007ffffffffffffffff03fffffffffffffffffffffffc0000000000001ff
fffff0003ffffffffffffffff80fffffffffffffffffff8000f8
f0000000000000fffffffffffffffff07fffffffffffffffffffffffe0000000000000ff
ffffe0003ffffffffffffffff00fffffffffffffffffff8001f8
f8000000000003ffffffffffffffffe07ffffffffffffffffffffffff00000000000000f
ffff00007fffffffffffffffe01fffffffffffffffffff0001f8
fc000000000007ffffffffffffffffc07ffffffffffffffffffffffff800000000000007
fffc00007fffffffffffffffc01fffffffffffffffffff0001f8
fc000000000007ffffffffffffffffc0fffffffffffffffffffffffff800000000000000
ffe000007ffffbffffffffff801fffffffffffffffffff0001f8
fe00000000001fffffffffffffffff03fffffffffffffffffffffffffe00000000000000
00000000fffff3ffffffffff003fffffffffffffffffff0001f8
fe00000000003fffffffffffffffff03ffffffffffffffffffffffffff00000000000000
00000001fffff1fffffffffe003fffffffffffffffffff0003f8
ff00000000007ffffffffffffffffe03ffffffffffffffffffffffffff00000000000000
00000001ffffe1fffffffffc007fffffffffffffffffff0003f8
ff8000000001fffffffffffffffffc07ffffffffffffffffffffffffff80000000000000
00000003ffffe0fffffffff0007fffffffffffffffffff0003f8
ffc000000003fffffffffffffffffc0fffffffffffffffffffffffffffc0000000000000
00000003ffffc0ffffffffe0007fffffffffffffffffff0003f8
ffe00000000ffffffffffffffffff81fffffffffffffffffffffffffffe0000000000000
00000007ffffc07fffffff8000ffffffffffffffffffff0003f8
fff00000003ffffffffffffffffff01ffffffffffffffffffffffffffff0000000000000
00000007ffff803fffffff0000fffffffffffffffffffe0007f8
fff8000000ffffffffffffffffffe03ffffffffffffffffffffffffffff8000000000000
00000007ffff801ffffffc0001fffffffffffffffffffe0007f8
fffc000001ffffffffffffffffffe07ffffffffffffffffffffffffffffc000000000000
0000000fffff000ffffff80003fffffffffffffffffffe0007f8
fffe00000fffffffffffffffffffc07ffffffffffffffffffffffffffffc000000000000
0000000fffff0007ffffe00003fffffffffffffffffffe0007f8
ffff80007fffffffffffffffffff80fffffffffffffffffffffffffffffe000000000000
0000001ffffe0001ffff800007fffffffffffffffffffe000ff8
ffffe007ffffffffffffffffffff80ffffffffffffffffffffffffffffff000000000000
0000001ffffe0000fffc000007fffffffffffffffffffe000ff8
ffffffffffffffffffffffffffff01ffffffffffffffffffffffffffffff800000000000
0000003ffffe0000000000000ffffffffffffffffffffe000ff8
fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffc00000000000
0000003ffffc0000000000000ffffffffffffffffffffe000ff8
fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffe00000000000
0000007ffff80000000000001ffffffffffffffffffffe001ff8
fffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffff00000000000
0000007ffff80000000000001ffffffffffffffffffffe001ff8
fffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff80000000000
000000fffff80000000000003ffffffffffffffffffffc001ff8
fffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffc0000000000
000003fffff00000000000007ffffffffffffffffffffc001ff8
fffffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffe0000000000
000007ffffe00000000000007ffffffffffffffffffffe003ff8
fffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffff0000000000
000007ffffe0000000000000fffffffffffffffffffffc003ff8
ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffff8000000000
00001fffffc0000000000001fffffffffffffffffffffc003ff8
ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffffe000000000
00001fffffc0000000000003fffffffffffffffffffffc003ff8
ffffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffff000000000
00003fffff80000000000003fffffffffffffffffffffc007ff8
ffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffff800000000
00007fffff80000000000007fffffffffffffffffffffc007ff8
ffffffffffffffffffffffffff03fffffffffffffffffffffffffffffffffffc00000000
0000ffffff0000000000000ffffffffffffffffffffffc007ff8
fffffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffc00000000
0001ffffff0000000000001ffffffffffffffffffffffc007ff8
fffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffff00000000
0003fffffe0000000000001ffffffffffffffffffffff800fff8
fffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffff80000000
0007fffffe0000000000003ffffffffffffffffffffff800fff8
fffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffff0000000
001ffffffc0000000000007ffffffffffffffffffffff800fff8
fffffffffffffffffffffffff03ffffffffffffffffffffffffffffffffffffff8000000
003ffffffc000000000000fffffffffffffffffffffff800fff8
ffffffffffffffffffffffffe07ffffffffffffffffffffffffffffffffffffffe000000
00fffffff8000000000003fffffffffffffffffffffff001fff8
ffffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffff800000
03fffffff8000000000003fffffffffffffffffffffff001fff8
ffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffc00000
07fffffff0000000000007fffffffffffffffffffffff001fff8
ffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffc0000
3ffffffff000000000000ffffffffffffffffffffffff003fff8
ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffe03f
fffffffff000000000003ffffffffffffffffffffffff003fff8
ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffffff
fffffffff800000000007ffffffffffffffffffffffff003fff8
fffffffffffffffffffffffe03ffffffffffffffffffffffffffffffffffffffffffffff
fffffffff80000000000ffffffffffffffffffffffffe003fff8
fffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffffffffffffff
fffffffffc0000000003ffffffffffffffffffffffffe007fff8
fffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffffffff
fffffffffe0000000007ffffffffffffffffffffffffe007fff8
fffffffffffffffffffffff81fffffffffffffffffffffffffffffffffffffffffffffff
fffffffffe000000000fffffffffffffffffffffffffe00ffff8
fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff
ffffffffff000000001fffffffffffffffffffffffffe00ffff8
ffffffffffffffffffffffe03ffffffffffffffffffffffffbffffffffffffffffffffff
ffffffffff800000007fffffffffffffffffffffffffc00ffff8
ffffffffffffffffffffffe07ffffffffffffffffffdfffff1ffffffffffffffffffffff
ffffffffffc0000000ffffffffffffffffffffffffffc00ffff8
ffffffffffffffffffffffe07ffffffffffffffffff9fffff07fffffffffffffffffffff
ffffffffffe0000001ffffffffffffffffffffffffffc00ffff8
ffffffffffffffffffffffc0ffffffffffffffffffe3ffffe03fffffffffffffffffffff
fffffffffff800001fffffffffffffffffffffffffffc01ffff8
ffffffffffffffffffffff81ffffffffffffffffffc7ffffc00fffffffffffffffffffff
fffffffffffe00007fffffffffffffffffffffffffffc01ffff8
ffffffffffffffffffffff81ffffffffffffffffff87ffffc007ffffffffffffffffffff
ffffffffffff8003ffffffffffffffffffffffffffff801ffff8
ffffffffffffffffffffff03ffffffffffffffffff0fffff8007ffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffff803ffff8
fffffffffffffffffffffe07fffffffffffffffffe0fffff8001ffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffff803ffff8
fffffffffffffffffffffe07fffffffffffffffffc1fffff0000ffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffff803ffff8
fffffffffffffffffffffc0ffffffffffffffffff83ffffe00007fffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffff007ffff8
fffffffffffffffffffff81fffffffffffffffffe03ffffe00007fffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffff007ffff8
fffffffffffffffffffff83fffffffffffffffffc07ffffc00003fffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffff007ffff8
fffffffffffffffffffff03fffffffffffffffff80fffff800001fffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffe00fffff8
ffffffffffffffffffffe07fffffffffffffffff00fffff800000fffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffe00fffff8
ffffffffffffffffffffe0fffffffffffffffffe01fffff0000007ffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffe00fffff8
ffffffffffffffffffffc0fffffffffffffffffc01ffffe0000003ffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffe00fffff8
ffffffffffffffffffff81fffffffffffffffff803ffffe0000003ffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffe01fffff8
ffffffffffffffffffff81ffffffffffffffffe007ffffc0000003ffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffc01fffff8
ffffffffffffffffffff83ffffffffffffffffe007ffffc0000001ffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffc01fffff8
ffffffffffffffffffff07ffffffffffffffff800fffff80000000ffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffc01fffff8
fffffffffffffffffffe07ffffffffffffffff800fffff00000000ffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffc03fffff8
fffffffffffffffffffc0ffffffffffffffffe001fffff00000000ffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffff803fffff8
fffffffffffffffffffc0ffffffffffffffffc003ffffe000000007fffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffff803fffff8
fffffffffffffffffff81ffffffffffffffff0003ffffc000000007fffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffff007fffff8
fffffffffffffffffff01fffffffffffffffe0007ffffc000000003fffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffff007fffff8
fffffffffffffffffff03fffffffffffffffe000fffff8000000001fffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffff007fffff8
ffffffffffffffffffe07fffffffffffffff8000fffff0000000001fffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
ffffffffffffffffffc07fffffffffffffff0001fffff0000000001fffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
ffffffffffffffffffc0fffffffffffffffe0001ffffe0000000000fffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
ffffffffffffffffff80fffffffffffffff80003ffffe0000000000fffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffe01ffffff8
ffffffffffffffffff81fffffffffffffff00007ffffc0000000000fffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffc01ffffff8
ffffffffffffffffff81ffffffffffffffe00007ffffc00000000007ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffc01ffffff8
ffffffffffffffffff03ffffffffffffffc0000fffffc00000000007ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffc03ffffff8
fffffffffffffffffe03ffffffffffffff00000fffffe00000000007ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffff803ffffff8
fffffffffffffffffc07fffffffffffffe00001ffffff00000000007ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffff803ffffff8
fffffffffffffffffc07fffffffffffffc00007ffffffc0000000007ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffff807ffffff8
fffffffffffffffff807fffffffffffff00001fffffffe0000000003ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffff807ffffff8
fffffffffffffffff807ffffffffffffe00003ffffffff0000000003ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffff007ffffff8
fffffffffffffffff00fffffffffffff800007ffffffff8000000003ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffff00fffffff8
fffffffffffffffff00fffffffffffff00000fffffffffc000000001ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffff00fffffff8
ffffffffffffffffe00ffffffffffffc00003fffffffffe000000001ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffe01fffffff8
ffffffffffffffffe00ffffffffffff800007ffffffffff000000001ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffe01fffffff8
ffffffffffffffffc00ffffffffffff00000fffffffffff800000001ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffe01fffffff8
ffffffffffffffff800fffffffffffc00001fffffffffffc00000001ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffe03fffffff8
ffffffffffffffff800fffffffffff000007fffffffffffe00000001ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffe03fffffff8
ffffffffffffffff001ffffffffffe00000fffffffffffff00000001ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffc07fffffff8
ffffffffffffffff001ffffffffffc00001fffffffffffff80000001ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffc07fffffff8
fffffffffffffffe000fffffffffe000003fffffffffffff80000001ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffff807fffffff8
fffffffffffffffe000fffffffffc000007fffffffffffffc0000000ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffff807fffffff8
fffffffffffffffc000fffffffff800000ffffffffffffffe0000000ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffff80ffffffff8
fffffffffffffffc0007fffffffe000001fffffffffffffff0000000ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffff80ffffffff8
fffffffffffffffc0003fffffffc000003fffffffffffffff0000000ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffff01ffffffff8
fffffffffffffff80001fffffff8000007fffffffffffffff8000000ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffff01ffffffff8
fffffffffffffff80000ffffffc000001ffffffffffffffff8000000ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffff01ffffffff8
fffffffffffffff800003fffff0000003ffffffffffffffffc000000ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffe01ffffffff8
fffffffffffffff000000000000000007ffffffffffffffffc000000ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffe03ffffffff8
ffffffffffffffe00000000000000000fffffffffffffffffe000000ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffe03ffffffff8
ffffffffffffffe00000000000000001fffffffffffffffffe000000ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
ffffffffffffffc00000000000000003fffffffffffffffffe000000ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
ffffffffffffffc00000000000000007ffffffffffffffffff000000ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
ffffffffffffffc0000000000000000fffffffffffffffffff000000ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffc0fffffffff8
ffffffffffffff80000000000000003fffffffffffffffffff800000ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffc0fffffffff8
ffffffffffffff80000000000000007fffffffffffffffffff800001ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffff80fffffffff8
ffffffffffffff8000000000000001ffffffffffffffffffff800001ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffff81fffffffff8
ffffffffffffff8000000000000001ffffffffffffffffffffc00001ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffff81fffffffff8
ffffffffffffff8000000000000003ffffffffffffffffffffe00001ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffff01fffffffff8
ffffffffffffff000000000000000fffffffffffffffffffffe00001ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffff03fffffffff8
ffffffffffffff000000000000001ffffffffffffffffffffff00001ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffe03fffffffff8
fffffffffffffe000000000000003ffffffffffffffffffffff00001ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffe03fffffffff8
fffffffffffffe000000000000007ffffffffffffffffffffff00001ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffe03fffffffff8
fffffffffffffc00000000000001fffffffffffffffffffffff00001ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffe07fffffffff8
fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffc07fffffffff8
fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffc07fffffffff8
fffffffffffffc0000000000003ffffffffffffffffffffffff80003ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffc0ffffffffff8
fffffffffffffc0000000000007ffffffffffffffffffffffff80003ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffc0ffffffffff8
fffffffffffffc000000000000fffffffffffffffffffffffff80003ffffffffffffffff
fffffffffffffffffffffffffffffffffffffff80ffffffffff8
fffffffffffffc000000000003fffffffffffffffffffffffff80003ffffffffffffffff
fffffffffffffffffffffffffffffffffffffff80ffffffffff8
fffffffffffffc000000000007fffffffffffffffffffffffff80003ffffffffffffffff
fffffffffffffffffffffffffffffffffffffff00ffffffffff8
fffffffffffffc00000000001ffffffffffffffffffffffffff80007ffffffffffffffff
fffffffffffffffffffffffffffffffffffffff01ffffffffff8
fffffffffffffe00000000001ffffffffffffffffffffffffff80007ffffffffffffffff
fffffffffffffffffffffffffffffffffffffff01ffffffffff8
fffffffffffffe0000000000fffffffffffffffffffffffffff80007ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffe01ffffffffff8
ffffffffffffff0000000001fffffffffffffffffffffffffff80007ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffe03ffffffffff8
ffffffffffffff000000000ffffffffffffffffffffffffffff80007ffffffffffffffff
fffffffffffffffffffdffffffffffffffffffe03ffffffffff8
ffffffffffffff800000003ffffffffffffffffffffffffffff80007ffffffffffffffff
fffffffffffffffffff9ffffffffffffffffffc03ffffffffff8
ffffffffffffffe0000001fffffffffffffffffffffffffffff80007ffffffffffffffff
fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
fffffffffffffff0000001fffffffffffffffffffffffffffff8000fffffffffffffffff
fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
fffffffffffffff800000ffffffffffffffffffffffffffffffc000fffffffffffffffff
fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
fffffffffffffffe0003fffffffffffffffffffffffffffffffc000fffffffffffffffff
ffffffffffffffffffe1ffffffffffffffffff807ffffffffff8
ffffffffffffffff4007fffffffffffffffffffffffffffffffc001fffffffffffffffff
ffffffffffffffffffc1ffffffffffffffffff00fffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
ffffffffffffffffff83ffffffffffffffffff00fffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
ffffffffffffffffff83ffffffffffffffffff00fffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
ffffffffffffffffff03ffffffffffffffffff00fffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
ffffffffffffffffff03ffffffffffffffffff01fffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
ffffffffffffffffff07ffffffffffffffffff01fffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
fffffffffffffffffe07fffffffffffffffffe01fffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
fffffffffffffffffc07fffffffffffffffffe03fffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff
fffffffffffffffffc07fffffffffffffffffc03fffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff
fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff
fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff
fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff
fffffffffffffffff03ffffffffffffffffff807fffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff
ffffffffffffffffe01ffffffffffffffffff807fffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff
ffffffffffffffffe03ffffffffffffffffff807fffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff
ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff
ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff
ffffffffffffffff80fffffffffffffffffff00ffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffffffff
ffffffffffffffff80fffffffffffffffffff00ffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff
ffffffffffffffff00ffffffffffffffffffe01ffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff
fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff
fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff
fffffffffffffffc01ffffffffffffffffffc01ffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffffffffff
fffffffffffffffc03ffffffffffffffffffc01ffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffff
fffffffffffffffc03ffffffffffffffffffc03ffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff
fffffffffffffff807ffffffffffffffffffc03ffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffff807ffffffffffffffffff803ffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffff00fffffffffffffffffff803ffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffff00fffffffffffffffffff807ffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffe01fffffffffffffffffff807ffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffe03fffffffffffffffffff807ffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffc03fffffffffffffffffff807ffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffff807fffffffffffffffffff00fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffff807fffffffffffffffffff00fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffff00ffffffffffffffffffff00fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffff00fffffffffffffffffffe00fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffe01fffffffffffffffffffe01fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffe03fffffffffffffffffffe01fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffc03fffffffffffffffffffc01fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffc07fffffffffffffffffffc01fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffff807fffffffffffffffffffc03fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffff00ffffffffffffffffffffc03fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffff00ffffffffffffffffffff803fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffe01ffffffffffffffffffff803fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffe01ffffffffffffffffffff803fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffc03ffffffffffffffffffff807fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffc03ffffffffffffffffffff007fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffff807ffffffffffffffffffff007fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffff807ffffffffffffffffffff007fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffff00fffffffffffffffffffff007fffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffe00ffffffffffffffffffffe00ffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffe01ffffffffffffffffffffe00ffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffff
fffffffffffc01ffffffffffffffffffffe00ffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff
fffffffffffc03ffffffffffffffffffffe00ffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff
fffffffffff803ffffffffffffffffffffc00ffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1fffffffffffff
fffffffffff807ffffffffffffffffffffc00ffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1fffffffffffff
fffffffffff00fffffffffffffffffffffc01ffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3fffffffffffff
fffffffffff00fffffffffffffffffffffc01ffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffffffff83fffffffffffff
ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
ffffffffff801fffffffffffffffffffff801ffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
ffffffffff803fffffffffffffffffffff801ffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffff
ffffffffff003fffffffffffffffffffff803ffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffff
fffffffffe007fffffffffffffffffffff803ffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1ffffffffffffff
fffffffffc007fffffffffffffffffffff003ffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffff81ffffffffffffff
fffffffffc00ffffffffffffffffffffff003ffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff
fffffffff800ffffffffffffffffffffff003ffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff
fffffffff801ffffffffffffffffffffff003ffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffff03ffffffffffffff
fffffffff803ffffffffffffffffffffff007ffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffff
fffffffff003fffffffffffffffffffffe007ffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffffffc07ffffffffffffff
ffffffffe007fffffffffffffffffffffe007ffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffffff807ffffffffffffff
ffffffffc007fffffffffffffffffffffe007ffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffff
ffffffffc007fffffffffffffffffffffe007ffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff
ffffffff800ffffffffffffffffffffffe00fffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff
ffffffff000ffffffffffffffffffffffe00fffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffff
fffffffe001ffffffffffffffffffffffe00fffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff
fffffffc003ffffffffffffffffffffffe00fffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff
9ffffffc003ffffffffffffffffffffffe00fffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffff803fffffffffffffff
0ffffff8003ffffffffffffffffffffffc01fffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe
07fffff0007ffffffffffffffffffffffc01fffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe
07ffffe000fffffffffffffffffffffffc01fffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff8
03ffffc000fffffffffffffffffffffffc01fffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff0
03ffff8001fffffffffffffffffffffff801fffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffffc007ffffffffffffff0
01ffff0003fffffffffffffffffffffff803fffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0
00fffe0003fffffffffffffffffffffff803fffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0
00fffe0003fffffffffffffffffffffff803fffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffff001ffffffffffffffc0
003ffc0007fffffffffffffffffffffff003fffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff80
001fe0001ffffffffffffffffffffffff003fffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff00
000fc0001ffffffffffffffffffffffff007fffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe00
000000001ffffffffffffffffffffffff007fffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffff8007fffffffffffffe00
000000003ffffffffffffffffffffffff007fffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffc00
000000003ffffffffffffffffffffffff007fffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffff800
000000007fffffffffffffffffffffffe007fffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff800
000000007fffffffffffffffffffffffe007fffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff000
00000001ffffffffffffffffffffffffe007fffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff000
00000001ffffffffffffffffffffffffe007fffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe000
00000001ffffffffffffffffffffffffe007fffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffc000
00000003ffffffffffffffffffffffffc00ffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffffc000
00000003ffffffffffffffffffffffffc00ffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff8000
00000007ffffffffffffffffffffffffc00ffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff0000
0000000fffffffffffffffffffffffffc01ffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff0000
0000001fffffffffffffffffffffffffc01ffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffff8003fffffffffffffe0000
0000001fffffffffffffffffffffffffc01ffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffe0000
0000003fffffffffffffffffffffffffc01ffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffc0000
0000007fffffffffffffffffffffffff801ffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff80000
0000007fffffffffffffffffffffffff801ffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff80000
000000ffffffffffffffffffffffffff801ffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff00000
000001ffffffffffffffffffffffffff801ffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000
000001ffffffffffffffffffffffffff801ffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000
000003ffffffffffffffffffffffffff801ffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe00000
000003ffffffffffffffffffffffffff801ffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffe00000
000007ffffffffffffffffffffffffff803ffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffc00000
00000fffffffffffffffffffffffffff003ffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff800000
00000fffffffffffffffffffffffffff803ffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff800000
00001fffffffffffffffffffffffffff803ffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffff0007ffffffffffffff000200
00003fffffffffffffffffffffffffff007ffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe000700
00007fffffffffffffffffffffffffff00fffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe001f80
0000ffffffffffffffffffffffffffff00fffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe001f80
0001ffffffffffffffffffffffffffff00fffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffc003fc0
0001ffffffffffffffffffffffffffff00fffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffff8007fe0
0003ffffffffffffffffffffffffffff01fffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff0007fe0
0007ffffffffffffffffffffffffffff01fffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffe0007ffffffffffffff000fff0
0007ffffffffffffffffffffffffffff01fffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe003fff8
001fffffffffffffffffffffffffffff07fffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffc
007fffffffffffffffffffffffffffff07fffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffe
00ffffffffffffffffffffffffffffff07fffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffffc007ffff
dfffffffffffffffffffffffffffffff0ffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff800fffff
fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff800fffff
fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff001fffff
fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff003fffff
fffffffffffffffffffffffffffffffe3ffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffe003fffff
ffffffffffffffffffffffffffffffff3ffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffc007fffff
ffffffffffffffffffffffffffffffff3ffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffffc007fffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffffc00ffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff800ffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff801ffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffe0000fffffffffffffff001ffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff003ffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffe007ffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffff80007ffffffffffffffe007ffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffe0001fffffffffffffffc00fffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff801fffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffffc0003fffffffffffffff801fffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffff80003fffffffffffffff003fffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff007fffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffff007fffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc007fffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc00ffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffc01ffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff801ffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffff801ffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff803ffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffff803ffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffe007ffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffff80007fffffffffffffffe007ffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffe00fffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffc00fffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff801fffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff803fffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff003fffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff003fffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffe007fffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffc007fffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffffc00ffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffff80007ffffffffffffffffc00ffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffe0000fffffffffffffffff003ffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffc0001fffffffffffffffff003ffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffe00007ffffffffffffffffc00fffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffff80001fffffffffffffffff801fffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffff00003fffffffffffffffff801fffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffff00007fffffffffffffffff003fffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffe00007fffffffffffffffff007fffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffc0000ffffffffffffffffff007fffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffc0001fffffffffffffffffc007fffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffff80003fffffffffffffffffc00ffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffff80007fffffffffffffffffc01ffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffff00007fffffffffffffffff801ffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffff0000ffffffffffffffffff801ffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffffc0001ffffffffffffffffff803ffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffff80003ffffffffffffffffff803ffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffe0000ffffffffffffffffffe00fffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffc0000ffffffffffffffffffe00fffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffc0001ffffffffffffffffffe01fffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffff80003ffffffffffffffffffc03fffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffff00007ffffffffffffffffffc03fffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc03fffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc07fffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffffc0001fffffffffffffffffff807fffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffff00007fffffffffffffffffff81ffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffe0000ffffffffffffffffffff01ffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffe0001ffffffffffffffffffff03ffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffc0003ffffffffffffffffffff03ffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffff80003fffffffffffffffffffe07ffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffff00007fffffffffffffffffffe07ffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffe00007fffffffffffffffffffe0fffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc0fffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc1fffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffffc0001ffffffffffffffffffffc1fffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffff80007ffffffffffffffffffff83fffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffff00007ffffffffffffffffffff83fffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffe00007ffffffffffffffffffff83fffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffe0000fffffffffffffffffffff87fffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffc0001fffffffffffffffffffff87fffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffc0001fffffffffffffffffffff0ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffff80003fffffffffffffffffffff0ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffff00007fffffffffffffffffffff0ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffff0000ffffffffffffffffffffff1ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffe0000fffffffffffffffffffffe1ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffffc0001fffffffffffffffffffffe3ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffff80003fffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffff00007fffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffc0003ffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffc0007ffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffe0001fffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffffc0007fffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffff8000ffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffff8001ffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffff0001ffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffe0007ffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffc000fffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffff8003fffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffff0007fffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffe000ffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffe001ffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffc001ffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffc007ffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffc00fffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffe00ffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffe01ffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffff00fffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffffc3ffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffff83ffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffff87ffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
ffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8
showpage
% stop using temporary dictionary
end
% restore original state
origstate restore
%%Trailer
1.1 XEmacs/packages/xemacs-packages/gnus/texi/gnus-refcard.tex
Index: gnus-refcard.tex
===================================================================
\documentclass{article}
% Previously we had five input LaTeX files (booklet.tex bk-lt.tex bk-a4.tex
% refcard.tex gnusref.tex) and two logo files (gnuslogo-refcard.eps and
% gnuslogo-booklet.eps).
%
% From this LaTeX file (gnus-refcard.tex) plus a single logo (gnus-logo.eps),
% we can generate the refcard and the booklet version. Appropriate Makefile
% rules were added. This simplifies to distribute the refcard with Emacs.
%
% (Reiner Steib, March 2005)
\usepackage{ifthen}
\ifthenelse{\isundefined{\booklettrue}}{
\typeout{Creating reference card...}
}{
\typeout{Creating reference booklet...}}
\usepackage{supertabular}
\newlength{\logowidth} \setlength{\logowidth} {6.861in}
\newlength{\logoheight} \setlength{\logoheight}{7.013in}
\usepackage{graphicx}
\usepackage{geometry}
\ifthenelse{\isundefined{\booklettrue}}{% ifcard %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Reference Card
\def\Guide{Card}\def\guide{card}
\def\logoscale{0.25}
% Page setup for the refcard:
% \setlength{\textwidth}{7.26in} \setlength{\textheight}{10in}
% \setlength{\topmargin}{-1.0in}
% % the same settings work for A4, although there is a bit of space at the
% % top and bottom of the page.
% \setlength{\oddsidemargin}{-0.5in} \setlength{\evensidemargin}{-0.5in}
\ifthenelse{\isundefined{\letterpapertrue}}{
\geometry{a4paper,hmargin=10mm,tmargin=10mm,bmargin=35mm}
}{
\geometry{hmargin=20mm,tmargin=10mm,bmargin=12mm}
}
}{ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Reference Booklet
\def\Guide{Booklet}\def\guide{booklet}
\def\logoscale{0.5}% FIXME: too large for 2up printing? --rsteib
% FIXME: Use geometry package. --rsteib
% \ifthenelse{\isundefined{\letterpapertrue}}{
% \textwidth 4.9in \textheight 7.35in \topmargin -1.0in
% }{
% \textwidth 4.5in \textheight 7.5in \topmargin -1.0in
% }
% \oddsidemargin -0.5in \evensidemargin -0.5in
\ifthenelse{\isundefined{\letterpapertrue}}{
\geometry{a5paper,hmargin=10mm,tmargin=10mm,bmargin=4mm}
}{
% FIXME: Use geometry package. --rsteib
\geometry{a5paper,hmargin=20mm,tmargin=10mm,bmargin=4mm}
}
\def\sec{\section}
\def\subsec{\subsection}
\def\subsubsec{\subsubsection}
\def\blankpage{\vspace*{\fill}\par
%\centerline{(This page intentionally left blank.)}
\par\vspace*{\fill}\pagebreak}
}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \input{gnusref} % % % % % % % % % % % % % % % % % % % % % % % % % %
%% include file for the Gnus refcard and booklet
\def\progver{5.10}\def\refver{5.10-2} % program and refcard versions
\def\date{Mar, 2005}
\def\author{Gnus Bugfixing Girls + Boys $<$bugs(a)gnus.org$>$}
%%
\newlength{\keycolwidth}
\newenvironment{keys}[1]% #1 is the widest key
{\nopagebreak%\noindent%
\settowidth{\keycolwidth}{#1}%
\addtolength{\keycolwidth}{\tabcolsep}%
\addtolength{\keycolwidth}{-\columnwidth}%
\begin{supertabular}{@{}l@{\hspace{\tabcolsep}}p{-\keycolwidth}@{}}}%
{\end{supertabular}\\}
%% uncomment the first definition if you do not want pagebreaks in maps
%%\newcommand{\esamepage}{\samepage}
\newcommand{\esamepage}{}
\newcommand*{\B}[1]{{\bf#1})} % bold l)etter
\newcommand{\Title}{%
\begin{center}
{\bf\LARGE Gnus \progver\ Reference \Guide\\}
%{\normalsize \Guide\ version \refver}
\end{center}
}
% \newcommand*{\LogoOLD}[1]{\centerline{%
% \makebox[\logoscale\logowidth][l]{\vbox to \logoscale\logoheight
% {\vfill\epsfig{figure=gnuslogo-#1}}\vspace{-\baselineskip}}}}
\newcommand*{\Logo}[1]{\centerline{%
\includegraphics[width=\logoscale\logowidth]{gnus-logo}}}
\newcommand{\Copyright}{%
\begin{center}
Copyright \copyright\ 1995, 2002, 2003, 2004,
2005 Free Software Foundation, Inc.\\*
Copyright \copyright\ 1995 Vladimir Alexiev
$<$vladimir(a)cs.ualberta.ca$>$.\\*
Copyright \copyright\ 2000 Felix Natter $<$fnatter(a)gmx.net$>$.\\*
Copyright \copyright\ 2001, 2002, 2003, 2005 \author.\\*
Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne
Ingebrigtsen.\\*
and the Emacs Help Bindings feature (C-h b).\\*
Gnus logo copyright \copyright\ 1995 Luis Fernandes.\\*
\end{center}
Permission is granted to make and distribute copies of this reference
\guide{} provided the copyright notice and this permission are preserved on
all copies. Please send corrections, additions and suggestions to the
current maintainer's email address. \Guide{} last edited on \date.
}
\newcommand{\Notes}{%
\subsection*{Notes}
{\esamepage
Gnus is complex. Currently it has some 876 interactive (user-callable)
functions. Of these 618 are in the two major modes (Group and
Summary/Article). Many of these functions have more than one binding, some
have 3 or even 4 bindings. The total number of keybindings is 677. So in
order to save 40\% space, every function is listed only once on this
\guide, under the ``more logical'' binding. Alternative bindings are given
in parentheses in the beginning of the description.
Many Gnus commands are affected by the numeric prefix. Normally you enter a
prefix by holding the Meta key and typing a number, but in most Gnus modes
you don't need to use Meta since the digits are not self-inserting. The
prefixed behavior of commands is given in [brackets]. Often the prefix is
used to specify:
\quad [distance] How many objects to move the point over.
\quad [scope] How many objects to operate on (including the current one).
\quad [p/p] The ``Process/Prefix Convention'': If a prefix is given then it
determines how many objects to operate on. Else if there are some objects
marked with the process mark \#, these are operated on. Else only the
current object is affected.
\quad [level] A group subscribedness level. Only groups with a lower or
equal level will be affected by the operation. If no prefix is given,
`gnus-group-default-list-level' is used. If
`gnus-group-use-permanent-levels', then a prefix to the `g' and `l'
commands will also set the default level.
\quad [score] An article score. If no prefix is given,
`gnus-summary-default-score' is used. \\*[\baselineskip]
% some keys
Gnus startup-commands:\\*
\begin{keys}{M-x gnus-unplugged}
M-x gnus & start Gnus. \\
M-x gnus-no-server & start Gnus without connecting to server
(i.e. to read mail). \\
\end{keys}
Additionally, there are the two commands \texttt{gnus-plugged} and
\texttt{gnus-unplugged}, which are only used if you want to download
news and/or read previously downloaded news offline (see C-c C-i g Gnus
Unplugged RET). Note: \texttt{gnus-no-server} ignores the stuff in
\texttt{gnus-agent-directory}, and thus does not allow you to use Gnus
Unplugged.
%
\begin{keys}{C-c C-i}
C-c C-i & Go to the Gnus online {\bf info}.\\
C-c C-b & Send a Gnus {\bf bug} report.\\
\end{keys}
}}
\newcommand{\GroupLevels}{%
The table below assumes that you use the default Gnus levels.
Fill your user-specific levels in the blank cells.\\[1\baselineskip]
\begin{tabular}{|c|l|l|}
\hline
Level & Groups & Status \\
\hline
1 & draft/mail groups & \\
2 & mail groups & \\
3 & & subscribed \\
4 & & \\
5 & default list level & \\
\hline
6 & & unsubscribed \\
7 & & \\
\hline
8 & & zombies \\
\hline
9 & & killed \\
\hline
\end{tabular}}
\newcommand{\MarkCharacters}{%
{\esamepage If a command directly sets a mark, it is shown in parentheses.\\*
\newlength{\markcolwidth}
\settowidth{\markcolwidth}{` '}% widest character
\addtolength{\markcolwidth}{4\tabcolsep}
\addtolength{\markcolwidth}{-\columnwidth}
\newlength{\markdblcolwidth}
\setlength{\markdblcolwidth}{\columnwidth}
\addtolength{\markdblcolwidth}{-2\tabcolsep}
\begin{tabular}{|c|p{-\markcolwidth}|}
\hline
\multicolumn{2}{|p{\markdblcolwidth}|}{{\bf ``Read'' Marks.}
All these marks appear in the first column of the summary line, and so
are mutually exclusive.}\\
\hline
` ' & (M-u, M SPC, M c) Not read.\\
! & (!, M !, M t) Ticked (interesting).\\
? & (?, M ?) Dormant (only followups are interesting).\\
E & (E, M e, M x) {\bf Expirable}. Only has effect in mail groups.\\
G & (C, B DEL) Canceled article (or deleted in mailgroups).\\
\$ & (M-d, M s x, S x). Marked as spam.\\
\hline\hline
\multicolumn{2}{|p{\markdblcolwidth}|}
{The marks below mean that the article
is read (killed, uninteresting), and have more or less the same effect.
Some commands however explicitly differentiate between them (e.g.\ M
M-C-r, adaptive scoring).}\\
\hline
r & (d, M d, M r) Deleted (marked as {\bf read}).\\
C & (M C; M C-c; M H; c, Z c; Z n; Z C) Killed by {\bf catch-up}.\\
F & SOUPed article. See the manual.\\
O & {\bf Old} (read in a previous session).\\
K & (k, M k; C-k, M K) {\bf Killed}.\\
M & Article marked as read by duplicate suppression.\\
Q & Article is part of a sparse thread (see ``Threading''
in the manual).\\
R & {\bf Read} (viewed in actuality).\\
X & Killed by a kill file.\\
Y & Killed due to low score.\\
\hline\multicolumn{2}{c}{\vspace{1ex}}\\\hline
\multicolumn{2}{|p{\markdblcolwidth}|}
{{\bf Marks not affecting visibility}}\\
\hline
\# & (\#, M \#, M P p) Processable (will be affected by the next operation).
[2]\\
A & {\bf Answered} (followed-up or replied). [2]\\
F & Forwarded. [2]\\
$\ast$ & Cached. [2]\\
S & Saved. [2]\\
N & Recently arrived. [2]\\
. & Unseen. [2]\\
+ & Over default score. [3]\\
$-$ & Under default score. [3]\\
$=$ & Has children (thread underneath it). Add `\%e' to
`gnus-summary-line-format'. [3]\\
\hline
\end{tabular}
}}
\newcommand{\GroupModeGeneral}{%
\begin{keys}{C-c M-C-x}
RET & (=) Enter this group. [Prefix: how many (read) articles to fetch.
Positive: newest articles, negative: oldest ones; non-numerical:
view all articles, not just unread]\\
M-RET & Enter group quickly.\\
M-SPC & Same as RET but does not expunge and hide dormants.\\
M-C-RET & Enter group without any processing, changes will not be permanent.\\
SPC & Select this group and display the first (unread) article. [Same
prefix as above.]\\
? & Give a very short help message.\\
$<$ & Go to the beginning of the Group buffer.\\
$>$ & Go to the end of the Group buffer.\\
, & Jump to the lowest-level group with unread articles.\\
. & Jump to the first group with unread articles.\\
\^{} & Enter the Server buffer mode.\\
a & Post an {\bf article} to a group
[Prefix: use group under point to find posting-style].\\
b & Find {\bf bogus} groups and delete them.\\
c & Mark all unticked articles in this group as read ({\bf catch-up}).
[p/p]\\
g & Check the server for new articles ({\bf get}). [level]\\
M-g & Check the server for new articles in this group ({\bf get}). [p/p]\\
j & {\bf Jump} to a group.\\
m & {\bf Mail} a message to someone
[Prefix: use group under point to find posting-style].\\
n & Go to the {\bf next} group with unread articles. [distance]\\
M-n & Go to the {\bf next} group on the same or lower level.
[distance]\\
p & (DEL) Go to the {\bf previous} group with unread articles.
[distance]\\
M-p & Go to the {\bf previous} group on the same or lower level.
[distance]\\
q & {\bf Quit} Gnus.\\
r & Re-read the init file ({\bf reset}).\\
s & {\bf Save} the `.newsrc.eld' file (and `.newsrc' if
`gnus-save-newsrc-file').\\
z & Suspend (kill all buffers of) Gnus.\\
B & {\bf Browse} a foreign server.\\
C & Mark all articles in this group as read ({\bf Catch-up}). [p/p]\\
F & {\bf Find} new groups and process them.\\
N & Go to the {\bf next} group. [distance]\\
P & Go to the {\bf previous} group. [distance]\\
Q & {\bf Quit} Gnus without saving any startup (.newsrc) files.\\
R & {\bf Restart} Gnus.\\
Z & Clear the dribble buffer.\\
M-c & Clear data from group (marks and list of read articles). \\
C-c C-s & {\bf Sort} the groups by name, number of unread articles, or level
(depending on `gnus-group-sort-function').\\
C-c C-x & Run all expirable articles in this group through the {\bf expiry}
process.\\
C-c M-C-x & Run all articles in all groups through the {\bf expiry} process.\\
C-c M-g & Activate all {\bf groups}.\\
C-c C-i & Gnus online-manual ({\bf info}).\\
C-x C-t & {\bf Transpose} two groups.\\
H f & Fetch this group's {\bf FAQ} (using ange-ftp).\\
H c & Display this group's {\bf charter}. [Prefix: query for group]\\
H C & Display this group's {\bf control message} (using
ange-ftp). [Prefix: query for group]\\
H v & (V) Display the Gnus {\bf version} number.\\
H d & (C-c C-d) Show the {\bf description} of this group
[Prefix: re-read from server].\\
M-d & {\bf Describe} all groups. [Prefix: re-read from server]\\
D g & Regenerate a Sieve script from group parameters.\\
D u & Regenerate Sieve script and {\bf upload} to server.\\
\end{keys}
}
\newcommand{\ListGroups}{%
{\esamepage
\begin{keys}{A M}
A d & (C-c C-M-a) List all groups whose names or {\bf descriptions} match
a regexp.\\
A k & (C-c C-l) List all {\bf killed} groups.
[Prefix: look at active-file from server]\\
A l & List all groups on a specific level.
[Prefix: also list groups with no unread articles]\\
A a & (C-c C-a) List all groups whose names match a regexp
({\bf apropos}).\\
A A & List the server's active-file.\\
A M & List groups that {\bf match} a regexp.\\
A m & List groups that {\bf match} a regexp and have unread articles.
[level]\\
A s & (l) List all {\bf subscribed} groups with unread articles.
[level; 5 and lower is the default]\\
A u & (L) List all groups (including read and {\bf unsubscribed}).
[level; 7 and lower is the default]\\
A z & List all {\bf zombie} groups.\\
A c & List all groups with cached articles. [level]\\
A ? & List all groups with dormant articles. [level]\\
\end{keys}
}
\newcommand{\CreateEditGroups}{%
{\esamepage
The select methods are indicated in parentheses.\\*
\begin{keys}{G DEL}
G a & Make the Gnus list {\bf archive} group. (nndir over ange-ftp)\\
G c & {\bf Customize} this group's parameters.\\
G d & Make a {\bf directory} group (every file must be a posting and
files
must have numeric names). (nndir)\\
G D & Enter a {\bf directory} as a (temporary) group.
(nneething without recording articles read)\\
G e & (M-e) {\bf Edit} this group's select method.\\
G E & {\bf Edit} this group's info (select method, articles read,
etc).\\
G f & Make a group based on a {\bf file}. (nndoc)\\
G h & Make the Gnus {\bf help} (documentation) group. (nndoc)\\
G k & Make a {\bf kiboze} group. (nnkiboze)\\
G m & {\bf Make} a new group.\\
G p & Edit this group's {\bf parameters}.\\
G r & Rename this group (does not work with read-only groups!).\\
G u & Create one of the groups mentioned in gnus-{\bf useful}-groups.\\
G v & Add this group to a {\bf virtual} group. [p/p]\\
G V & Make a new empty {\bf virtual} group. (nnvirtual)\\
G w & Create ephemeral group based on web-search. [Prefix: make solid
group
instead]\\
G R & Make an {\bf RSS} group.\\
G DEL & {\bf Delete} group [Prefix: delete all articles as well].\\
G x & Expunge all deleted articles in an nnimap mailbox.\\
G l & Edit ACL (Access Control {\bf List}) for an nnimap mailbox.\\
\end{keys}
You can also create mail-groups and read your mail with Gnus (very useful
if you are subscribed to mailing lists), using one of the methods
nnmbox, nnbabyl, nnml, nnmh, or nnfolder. Read about it in the online info
(C-c C-i g Reading Mail RET).
}}
% TODO:
\newcommand{\SoupCommands}{%
\begin{keys}{G s w}
G s b & gnus-group-brew-soup: not documented.\\
G s p & gnus-soup-pack-packet: not documented.\\
G s r & nnsoup-pack-replies: not documented.\\
G s s & gnus-soup-send-replies: not documented.\\
G s w & gnus-soup-save-areas: not documented.\\
\end{keys}}
\newcommand{\MarkGroups}{%
\begin{keys}{M m}
M m & (\#) Set the process {\bf mark} on this group. [scope]\\
M r & Mark all groups matching regular expression.\\
M u & (M-\#) Remove the process mark from this group ({\bf unmark}).
[scope]\\
M U & Remove the process mark from all groups (\textbf{umark all}).\\
M w & Mark all groups in the current region. [prefix: unmark]\\
M b & Mark all groups in the {\bf buffer}. [prefix: unmark]\\
\end{keys}}
\newcommand{\GroupTopicsGeneral}{%
{\esamepage
Topics are ``categories'' for groups. Press t in the group-buffer to
toggle gnus-topic-mode (C-c C-i g Group Topics RET).\\*
\begin{keys}{C-c C-x}
T n & Prompt for topic {\bf name} and create it.\\
T m & {\bf Move} the current group to some other topic [p/p].\\
T j & {\bf Jump} to a topic.\\
T c & {\bf Copy} the current group to some other topic [p/p].\\
T D & Remove (not delete) the current group [p/p].\\
T M & {\bf Move} all groups matching a regexp to a topic.\\
T C & {\bf Copy} all groups matching a regexp to a topic.\\
T H & Toggle {\bf hiding} of empty topics.\\
T r & {\bf Rename} a topic.\\
T DEL & Delete an empty topic.\\
T \# & Mark all groups in the current topic with the process-mark.\\
T M-\# & Remove the process-mark from all groups in the current topic.\\
T TAB & (TAB) Indent current topic [Prefix: unindent].\\
M-TAB & Unindent the current topic.\\
RET & (SPC) Either unfold topic or enter group [level].\\
T s & {\bf Show} the current topic. [Prefix: show permanently]\\
T h & {\bf Hide} the current topic. [Prefix: hide permanently]\\
C-c C-x & Expire all articles in current group or topic.\\
C-k & {\bf Kill} a group or topic.\\
C-y & {\bf Yank} a group or topic.\\
A T & List active-file using {\bf topics}.\\
G p & Edit topic-{\bf parameters}.\\
T M-n & Go to {\bf next} topic. [distance]\\
T M-p & Go to {\bf previous} topic. [distance]\\
\end{keys}
}
}
\newcommand{\TopicSorting}{%
{\esamepage
\begin{keys}{T S m}
T S a & Sort {\bf alphabetically}.\\
T S u & Sort by number of {\bf unread} articles.\\
T S l & Sort by group {\bf level}.\\
T S v & Sort by group score ({\bf value}).\\
T S r & Sort by group {\bf rank}.\\
T S m & Sort by {\bf method}.\\
T S e & Sort by {\bf server} name.\\
T S s & Sort according to `gnus-group-sort-function'.\\
\end{keys}
With a prefix these commands will sort in reverse order.
}
}
\newcommand{\SubscribeKillYankGroups}{%
{\esamepage
\begin{keys}{S C-k}
S k & (C-k) {\bf Kill} this group.\\
S l & Set the {\bf level} of this group. [p/p]\\
S s & (U) Prompt for a group and toggle its {\bf subscription}.\\
S t & (u) {\bf Toggle} subscription to this group. [p/p]\\
S w & (C-w) Kill all groups in the region.\\
S y & (C-y) {\bf Yank} the last killed group.\\
S z & Kill all {\bf zombie} groups.\\
S C-k & Kill all groups on a certain level.\\
\end{keys}
}
}
\newcommand{\SummaryModeGeneral}{%
{\esamepage
\begin{keys}{M-RET}
SPC & (A SPC, A n) Select an article, scroll it one page, move to the
next one.\\
DEL & (A DEL, A p, b) Scroll this article one page back. [distance]\\
RET & (A RET) Scroll this article one line forward. [distance]\\
M-RET & (A M-RET) Scroll this article one line backward. [distance]\\
= & Expand the Summary window (fullsize).
[Prefix: shrink to display article window]\\
%
\& & Execute a command on all articles whose header matches a
regexp.
[Prefix: move backwards]\\
M-\& & Execute a command on all articles having the process mark.\\
%
M-n & (G M-n) Go to the {\bf next} summary line of an unread article.
[distance]\\
M-p & (G M-p) Go to the {\bf previous} summary line of an unread
article.
[distance]\\
M-s & {\bf Search} through all subsequent articles for a regexp.\\
M-r & Search through all previous articles for a regexp.\\
%
A P & {\bf Postscript}-print current buffer.\\
%
M-k & Edit this group's {\bf kill} file.\\
M-K & Edit the general {\bf kill} file.\\
%
C-t & Toggle {\bf truncation} of summary lines.\\
Y g & Regenerate the summary-buffer.\\
Y c & Insert all cached articles into the summary-buffer.\\
%
M-C-e & {\bf Edit} the group-parameters.\\
M-C-a & Customize the group-parameters.\\
%
% article handling
%
A $<$ & ($<$, A b) Scroll to the beginning of this article.\\
A $>$ & ($>$, A e) Scroll to the end of this article.\\
A s & (s) Perform an i{\bf search} in the article buffer.\\
%
A D & (C-d) Un{\bf digestify} this article into a separate group.
[Prefix: force digest]\\
M-C-d & Like C-d, but open several documents in nndoc-groups, wrapped
in an nnvirtual group [p/p]\\
%
A g & (g) (Re)fetch this article ({\bf get}). [Prefix: get raw
version]\\
A r & (\^{}, A \^{}) Fetch the parent(s) of this article.
[Prefix: if positive fetch \textit{n} ancestors;
negative: fetch only the \textit{n}th ancestor]\\
A t & {\bf Translate} this article.\\
A R & Fetch all articles mentioned in the {\bf References}-header.\\
A T & Fetch full \textbf{thread} in which the current article
appears.\\
M-\^{} & Fetch the article with a given Message-ID.\\
S y & {\bf Yank} the current article into an existing message-buffer.
[p/p]\\
A M & Setup group parameters for {\bf mailing} lists from
headers. [Prefix: replace old settings]\\
\end{keys}
}
}
\newcommand{\MIMESummary}{%
{\esamepage
For the commands operating on one MIME part (a subset of gnus-article-*), a
prefix selects which part to operate on. If the point is placed over a
MIME button in the article buffer, use the corresponding bindings for the
article buffer instead.
\begin{keys}{W M w}
K v & (b, W M b) {\bf View} the MIME-part.\\
K o & {\bf Save} the MIME part.\\
K c & {\bf Copy} the MIME part.\\
K e & View the MIME part {\bf externally}.\\
K i & View the MIME part {\bf internally}.\\
K $\mid$ & Pipe the MIME part to an external command.\\
K b & Make all the MIME parts have buttons in front of them.\\
K m & Try to repair {\bf multipart-headers}.\\
K C & View the MIME part using a different {\bf charset}.\\
X m & Save all parts matching a MIME type to a directory. [p/p]\\
M-t & Toggle the buttonized display of the article buffer.\\
W M w & Decode RFC2047-encoded words in the article headers.\\
W M c & Decode encoded article bodies. [Prefix: prompt for charset]\\
W M v & View all MIME parts in the current article.\\
\end{keys}
}
}
\newcommand{\SortSummary}{%
{\esamepage
\begin{keys}{C-c C-s C-a}
C-c C-s C-a & Sort the summary-buffer by {\bf author}.\\
% C-c C-s C-t & Sort the summary-buffer by {\bf recipient}.\\ % No Gnus
C-c C-s C-d & Sort the summary-buffer by {\bf date}.\\
C-c C-s C-i & Sort the summary-buffer by article score.\\
C-c C-s C-l & Sort the summary-buffer by amount of {\bf lines}.\\
C-c C-s C-c & Sort the summary-buffer by length.\\
C-c C-s C-n & Sort the summary-buffer by article {\bf number}.\\
C-c C-s C-s & Sort the summary-buffer by {\bf subject}.\\
C-c C-s C-r & Sort the summary-buffer {\bf randomly}.\\
C-c C-s C-o & Sort the summary-buffer using the default method.\\
\end{keys}
With a prefix these functions sort in reverse order.
}
}
\newcommand{\MailGroups}{% formerly \Bsubmap
{\esamepage
These commands (except `B c') are only valid in a mail group.\\*
\begin{keys}{B M-C-e}
B DEL & (B backspace, B delete) {\bf Delete} the mail article from disk
(!).
[p/p]\\
B B & Crosspost this article to another group.\\
B c & {\bf Copy} this article from any group to a mail group. [p/p]\\
B e & {\bf Expire} all expirable articles in this group. [p/p]\\
B i & {\bf Import} a random file into this group.\\
B I & Create an empty article in this group.\\
B m & {\bf Move} the article from one mail group to another. [p/p]\\
B p & Query whether the article was {\bf posted} as well.\\
B q & {\bf Query} where the article will end up after fancy splitting\\
B r & {\bf Respool} this mail article. [p/p]\\
B t & {\bf Trace} the fancy splitting patterns applied to this
article.\\
B w & (e) Edit this article.\\
B M-C-e & {\bf Expunge} (delete from disk) all expirable articles in this
group
(!). [p/p]\\
K E & {\bf Encrypt} article body. [p/p]\\
\end{keys}
}
}
\newcommand{\DraftGroup}{% formerly \Dsubmap
{\esamepage
The ``drafts''-group contains messages that have been saved but not sent
and rejected articles. \\*
\begin{keys}{B DEL}
D e & \textbf{edit} message.\\
D s & \textbf{Send} message. [p/p]\\
D S & \textbf{Send} all messages.\\
D t & \textbf{Toggle} sending (mark as unsendable).\\
B DEL & \textbf{Delete} message (like in mailgroup).\\
\end{keys}
}
}
\newcommand{\SelectArticles}{% formerly \Gsubmap
{\esamepage
These commands select the target article. They do not understand the prefix.\\*
\begin{keys}{G C-n}
h & Enter article-buffer.\\
G b & (,) Go to the {\bf best} article (the one with highest score).\\
G f & (.) Go to the {\bf first} unread article.\\
G n & (n) Go to the {\bf next} unread article.\\
G p & (p) Go to the {\bf previous} unread article.\\
%
G N & (N) Go to {\bf the} next article.\\
G P & (P) Go to the {\bf previous} article.\\
%
G C-n & (M-C-n) Go to the {\bf next} article with the same subject.\\
G C-p & (M-C-p) Go to the {\bf previous} article with the same subject.\\
%
G l & (l) Go to the previously read article ({\bf
last-read-article}).\\
G o & Pop an article off the summary history and go to it.\\
%
G g & Search an article via subject.\\
G j & (j) Search an article via Message-Id or subject.\\
\end{keys}
}
}
\newcommand{\ArticleModeGeneral}{%
{\esamepage
The normal navigation keys work in Article mode. Some additional keys are:\\
\begin{keys}{C-c RET}
C-c \^{} & Get the article with the Message-ID near point.\\
C-c RET & Send reply to address near point.\\
h & Go to the \textbf{header}-line of the article in the
summary-buffer.\\
s & Go to \textbf{summary}-buffer.\\
RET & (middle mouse button) Activate the button at point to follow
an URL or Message-ID.\\
TAB & Move the point to the next button.\\
M-TAB & Move point to previous button.\\
\end{keys}
}
}
\newcommand{\WashArticle}{% formerly \Wsubmap
{\esamepage
\begin{keys}{W W H}
W 6 & Translate a base64 article.\\
W a & Strip certain {\bf headers} from body.\\
W b & Make Message-IDs and URLs in the article mouse-clickable
{\bf buttons}.\\
W c & Translate CRLF-pairs to LF and then the remaining CR's to
LF's.\\
W d & Treat {\bf dumbquotes}.\\
W e & Treat {\bf emphasized} text.\\
W h & Treat {\bf HTML}.\\
W l & (w) Remove page breaks ({\bf\^{}L}) from the article.\\
W m & {\bf Morse} decode article.\\
W o & Treat {\bf overstrike} or underline (\^{}H\_) in the article.\\
W p & Verify X-{\bf PGP}-Sig header.\\
W q & Treat {\bf quoted}-printable in the article.\\
W r & (C-c C-r) Do a Caesar {\bf rotate} (rot13) on the article.\\
W s & Verify (and decrypt) a {\bf signed} message.\\
W t & (t) {\bf Toggle} display of all headers.\\
W u & {\bf Unsplit} broken URLs.\\
W v & (v) Toggle permanent {\bf verbose} displaying of all headers.\\
W w & Do word {\bf wrap} in the article.\\
W B & Add clickable {\bf buttons} to the article headers.\\
W C & {\bf Capitalize} first word in each sentence.\\
W Q & Fill long lines.\\
W Z & Translate a HZ-encoded article.\\
%
W G u & {\bf Unfold} folded header lines.\\
W G f & {\bf Fold} all header lines.\\
W G n & Unfold {\bf Newsgroups:} and Follow-Up-To:.\\
%
W Y c & Repair broken {\bf citations}.\\
W Y a & Repair broken {\bf attribution} lines.\\
W Y u & {\bf Unwrap} broken citation lines.\\
W Y f & Do a {\bf full} deuglification (W Y c, W Y a, W Y u).\\
\end{keys}
}
}
\newcommand{\BlankAndWhitespace}{%
{\esamepage
\begin{keys}{W E w}
W E l & Strip blank {\bf lines} from the beginning of the article.\\
W E m & Replace blank lines with empty lines and remove {\bf multiple}
blank lines.\\
W E t & Remove {\bf trailing} blank lines.\\
W E a & Strip blank lines at the beginning and the end
(W E l, W E m and W E t).\\
W E A & Strip {\bf all} blank lines.\\
W E s & Strip leading blank lines from the article body.\\
W E e & Strip trailing blank lines from the article body.\\
W E w & Remove leading {\bf whitespace} from all headers.\\
\end{keys}
}
}
\newcommand{\Picons}{%
{\esamepage
\begin{keys}{W D D}
W D s & (W g) Display {\bf smilies}.\\
W D x & (W f) Look for and display any X-{\bf Face} headers.\\
W D d & Display any Face headers.\\
W D n & Toggle picons in {\bf Newsgroups} and Followup-To.\\
W D m & Toggle picons in {\bf mail} headers (To and Cc).\\
W D f & Toggle picons in {\bf From}.\\
W D D & Remove all images from the article buffer.\\
\end{keys}
}
}
\newcommand{\TimeAndDate}{%
{\esamepage
\begin{keys}{W T u}
W T u & (W T z) Display the article timestamp in GMT ({\bf UT, ZULU}).\\
W T i & Display the article timestamp in {\bf ISO} 8601.\\
W T l & Display the article timestamp in the {\bf local} timezone.\\
W T s & Display according to `gnus-article-time-format'.\\
W T e & Display the time {\bf elapsed} since it was sent.\\
W T o & Display the {\bf original} timestamp.\\
W T p & Display the date in format that's {\bf
pronounceable} in English.\\
\end{keys}
}
}
\newcommand{\HideHighlightArticle}{%
{\esamepage
\begin{keys}{W W C-c}
W W a & Hide {\bf all} unwanted parts. Calls W W h, W W s, W W C-c.\\
W W h & Hide article {\bf headers}.\\
W W b & Hide {\bf boring} headers.\\
W W s & Hide {\bf signature}.\\
W W l & Hide {\bf list} identifiers in subject-header.\\
W W P & Hide {\bf PEM} (privacy enhanced messages).\\
W W B & Hide banner specified by group parameter.\\
W W c & Hide {\bf citation}.\\
W W C-c & Hide {\bf citation} using a more intelligent algorithm.\\
W W C & Hide cited text in articles that aren't roots.\\
W H a & Highlight {\bf all} parts. Calls W b, W H c, W H h, W H s.\\
W H c & Highlight article {\bf citations}.\\
W H h & Highlight article {\bf headers}.\\
W H s & Highlight article {\bf signature}.\\
\end{keys}
For all hiding-commands: A positive prefix always hides, and a negative
prefix will show what was previously hidden.
}}
\newcommand{\MIMEArticleMode}{%
{\esamepage
\begin{keys}{RET}
RET & (BUTTON-2) Toggle display of the MIME object.\\
v & Prompt for a method and then view object using this method.\\
o & Prompt for a filename and save the MIME object.\\
C-o & Prompt for a filename to save the MIME object to and remove it.\\
d & {\bf Delete} the MIME object.\\
c & {\bf Copy} the MIME object to a new buffer and display this
buffer.\\
i & Display the MIME object in this buffer.\\
C & Copy the MIME object to a new buffer and display this buffer using
{\bf Charset} \\
E & View internally. \\
e & View {\bf externally}. \\
t & View the MIME object as a different {\bf type}.\\
p & {\bf Print} the MIME object.\\
$\mid$ & Pipe the MIME object to a process.\\
. & Take action on the MIME object.\\
\end{keys}
}
}
%% end of article mode for reading ..........................................
\newcommand{\MarkArticlesGeneral}{% formerly \Msubmap
{\esamepage
\begin{keys}{M M-C-r}
d & (M d, M r) Mark this article as read and move to the next one.
[scope]\\
D & Mark this article as read and move to the previous one. [scope]\\
! & (u, M !, M t) Tick this article (mark it as interesting) and move
to the next one. [scope]\\
U & Tick this article and move to the previous one. [scope]\\
M ? & (?) Mark this article as dormant (only followups are
interesting). [scope]\\
M D & Show all {\bf dormant} articles (normally they are hidden unless
they
have any followups).\\
M M-D & Hide all {\bf dormant} articles.\\
C-w & Mark all articles between point and mark as read.\\
M-u & (M SPC, M c) Clear all marks from this article and move to the
next
one. [scope]\\
M-U & Clear all marks from this article and move to the previous one.
[scope]\\
%
M e & (E, M x) Mark this article as {\bf expirable}. [scope]\\
%
M k & (k) {\bf Kill} all articles with the same subject then select the
next unread one.\\
M K & (C-k) {\bf Kill} all articles with the same subject as this
one.\\
%
M C & {\bf Catch-up} the articles that are not ticked and not
dormant.\\
M C-c & {\bf Catch-up} all articles in this group.\\
M H & {\bf Catch-up} (mark read) this group to point (to-{\bf here}).\\
%
M b & Set a {\bf bookmark} in this article.\\
M B & Remove the {\bf bookmark} from this article.\\
%
M M-r & (x) Expunge all {\bf read} articles from this group.\\
M M-C-r & Expunge all articles having a given mark.\\
M S & (C-c M-C-s) {\bf Show} all expunged articles.\\
M M C-h & Displays some more keys doing ticking slightly differently.\\
\end{keys}
The variable `gnus-summary-goto-unread' controls what happens after a mark
has been set (C-x C-i g Setting Marks RET)
}}
\newcommand{\MarkByScore}{%
\begin{keys}{M V m}
M V c & {\bf Clear} all marks from all high-scored articles. [score]\\
M V k & {\bf Kill} all low-scored articles. [score]\\
M V m & Mark all high-scored articles with a given {\bf mark}. [score]\\
M V u & Mark all high-scored articles as interesting (tick them). [score]\\
\end{keys}
}
}
\newcommand{\ProcessMark}{%
{\esamepage
These commands set and remove the process mark (\#). You only need to use
it if the set of articles you want to operate on is non-contiguous. Else
use a numeric prefix.\\*
\begin{keys}{M P R}
M P p & (\#, M \#) Mark this article.\\
M P u & (M-\#, M M-\#) \textbf{unmark} this article.\\
M P b & Mark all articles in {\bf buffer}.\\
M P r & Mark all articles in the {\bf region}.\\
M P g & Unmark all articles in the region.\\
M P R & Mark all articles matching a {\bf regexp}.\\
M P G & Unmark all articles matching a regexp.\\
M P t & Mark all articles in this (sub){\bf thread}.\\
M P T & Unmark all articles in this (sub){\bf thread}.\\
M P s & Mark all articles in the current {\bf series}.\\
M P S & Mark all {\bf series} that already contain a marked article.\\
M P a & Mark {\bf all} articles (in series order).\\
M P U & \textbf{unmark} all articles.\\
M P i & {\bf Invert} the list of process-marked articles.\\
M P k & Push the current process-mark set onto stack and unmark
all articles.\\
M P y & Pop process-mark set from stack and restore it.\\
M P w & Push process-mark set on the stack.\\
M P v & Mark all articles with score over the default score. [Prefix:
score]\\
\end{keys}
}
}
\newcommand{\Limiting}{%
{\esamepage
\begin{keys}{/M}
// & (/s) Limit the summary-buffer to articles matching {\bf subject}.\\
/a & Limit the summary-buffer to articles matching {\bf author}.\\
/x & Limit depending on ``extra'' headers.\\
/u & (x) Limit to {\bf unread} articles.
[Prefix: also exclude ticked and dormant articles]\\
/. & Limit to unseen articles.\\
/m & Limit to articles marked with specified {\bf mark}.\\
/t & Ask for a number and exclude articles younger than that many days.
[Prefix: exclude older articles]\\
/n & Limit to current article. [p/p]\\
/w & Pop the previous limit off the stack and restore it.
[Prefix: pop all limits]\\
/v & Limit to score. [score]\\
/E & (M S) Include all expunged articles in the limit.\\
/D & Include all dormant articles in the limit.\\
/* & Limit to cached articles.\\
Y C & Include all cached articles in the limit.\\
/d & Exclude all dormant articles from the limit.\\
/M & Exclude all marked articles.\\
/T & Include all articles from the current thread in the limit.\\
/c & Exclude all dormant articles that have no children from the limit.\\
/C & Mark all excluded unread articles as read.
[Prefix: also mark ticked and dormant articles]\\
/o & Insert all {\bf old} articles. [Prefix: how many]\\
/N & Insert all {\bf new} articles.\\
/p & Limit to articles {\bf predicated} in the `display' group
parameter.\\
% /r & Limit to {\bf replied} articles. [Prefix: unreplied]\\ % No Gnus
\end{keys}
}
}
\newcommand{\OutputArticles}{% formerly \Osubmap
{\esamepage
\begin{keys}{O m}
O o & (o, C-o) Save this article using the default article saver. [p/p]\\
O b & Save this article's {\bf body} in plain file format [p/p]\\
O f & Save this article in plain {\bf file} format. [p/p]\\
O F & like O f, but overwrite file's contents. [p/p]\\
O h & Save this article in {\bf mh} folder format. [p/p]\\
O m & Save this article in {\bf mail} format. [p/p]\\
O r & Save this article in {\bf rmail} format. [p/p]\\
O v & Save this article in {\bf vm} format. [p/p]\\
O p & ($\mid$) {\bf Pipe} this article to a shell command. [p/p]\\
O P & \textbf{Print} this article using Muttprint. [p/p]\\
\end{keys}
}
}
\newcommand{\PostReplyetc}{% formerly \Ssubmap
{\esamepage
These commands put you in a separate news or mail buffer. See the section
about composing messages for more information.\\*
%After
%editing the article, send it by pressing C-c C-c. If
you are in a
%foreign group and want to post the article using the
foreign server, give
%a prefix to C-c C-c.\\*
\begin{keys}{S O m}
S p & (a) {\bf Post} an article to this group.\\
S f & (f) Post a {\bf followup} to this article.\\
S F & (F) Post a {\bf followup} and include the original. [p/p]\\
S o p & Forward this article as a {\bf post} to a newsgroup.\\
S M-c & Send a complaint about excessive crossposting to the author of this
article. [p/p]\\
%
S m & (m) Send a {\bf mail} to some other person.\\
S r & (r) Mail a {\bf reply} to the author of this article.\\
S R & (R) Mail a {\bf reply} and include the original. [p/p]\\
S B r & Like S r but ignore the Reply-To: header.\\
S B R & Like S R but ignore the Reply-To: header.\\
S w & Mail a {\bf wide} reply to this article.\\
S W & Mail a {\bf wide} reply to this article and include
the original.\\
S v & Mail a {\bf very} wide reply to this article.\\
S V & Mail a {\bf very} wide reply to this article and include the
original.\\
S o m & (C-c C-f) Forward this article by {\bf mail} to a person.\\
S D b & Resend {\bf bounced} mail.\\
S D r & {\bf Resend} mail to a different person.\\
S D e & {\bf Edit} and resend.\\
%
S n & Post a followup via {\bf news} even if you got the message
through mail.\\
S N & Post a followup via {\bf news} and include the original mail.
[p/p]\\
%
S c & (C) {\bf Cancel} this article (only works if it is
your own). [p/p]\\
S s & {\bf Supersede} this article with a new one (only for own
articles).\\
%
S O m & Digest these series and forward by {\bf mail}. [p/p]\\
S O p & Digest these series and forward as a {\bf post} to a newsgroup.
[p/p]\\
%
S u & {\bf Uuencode} a file and post it as a series.\\
\end{keys}
If you want to cancel or supersede an article you just posted (before it
has appeared on the server), go to the *post-news* buffer, change
`Message-ID' to `Cancel' or `Supersedes' and send it again with C-c
C-c.
}}
\newcommand{\Threading}{% formerly \Tsubmap
{\esamepage
\begin{keys}{T M-\#}
T \# & Mark this thread with the process mark.\\
T M-\# & Remove process-marks from this thread.\\
%
T t & Re-{\bf thread} the current article's thread.\\
T \^{} & Make the current article child of the marked (or previous)
article.\\
% movement
T n & (M-C-f, M-down) Go to the {\bf next} thread. [distance]\\
T p & (M-C-b, M-up) Go to the {\bf previous} thread. [distance]\\
T d & {\bf Descend} this thread. [distance]\\
T u & Ascend this thread ({\bf up}-thread). [distance]\\
T o & Go to the top of this thread.\\
%
T s & {\bf Show} the thread hidden under this article.\\
T h & {\bf Hide} this (sub)thread.\\
%
T i & {\bf Increase} the score of this thread.\\
T l & (M-C-l) {\bf Lower} the score of this thread.\\
%
T k & (M-C-k) {\bf Kill} the current (sub)thread. [Negative prefix:
tick it, positive prefix: unmark it.]\\
%
T H & {\bf Hide} all threads.\\
T S & {\bf Show} all hidden threads.\\
T T & (M-C-t) {\bf Toggle} threading.\\
\end{keys}
}
}
\newcommand{\Scoring}{% formerly \Vsubmap
{\esamepage
Read about Adaptive Scoring in the online info.\\*
\begin{keys}{\bf A p m l}
V a & {\bf Add} a new score entry, specifying all elements.\\
V c & Specify a new score file as {\bf current}.\\
V e & {\bf Edit} the current score alist.\\
V f & Edit a score {\bf file} and make it the current one.\\
V m & {\bf Mark} all articles below a given score as read.\\
V s & Set the {\bf score} of this article.\\
V t & Display all score rules applied to this article ({\bf track}).\\
W w & List {\bf words} used in scoring.\\
V x & {\bf Expunge} all low-scored articles. [score]\\
V C & {\bf Customize} the current score file through a user-friendly
interface.\\
V F & {\bf Flush} the cache of score files.\\
V R & {\bf Re-score} the summary buffer.\\
V S & Display the {\bf score} of this article.\\
\bf A p m l& Make a scoring entry based on this article.\\
\end{keys}
The four letters stand for:\\*
\quad \B{A}ction: I)ncrease, L)ower;\\*
\quad \B{p}art: a)uthor (from), s)ubject, x)refs (cross-posting), d)ate, l)ines,
message-i)d, t)references (parent), f)ollowup, b)ody, h)ead (all headers);\\*
\quad \B{m}atch type:\\*
\qquad string: s)ubstring, e)xact, r)egexp, f)uzzy,\\*
\qquad date: b)efore, a)t, n)this,\\*
\qquad number: $<$, =, $>$;\\*
\quad \B{l}ifetime: t)emporary, p)ermanent, i)mmediate.
If you type the second letter in uppercase, the remaining two are assumed
to be s)ubstring and t)emporary.
If you type the third letter in uppercase, the last one is assumed to be
t)emporary.
\quad Extra keys for manual editing of a score file:\\*
\begin{keys}{C-c C-c}
C-c C-c & Finish editing the score file.\\
C-c C-d & Insert the current {\bf date} as number of days.\\
\end{keys}
}
}
\newcommand{\ExtractSeries}{% formerly \Xsubmap
{\esamepage
Gnus recognizes if the current article is part of a series (multipart
posting whose parts are identified by numbers in their subjects, e.g.{}
1/10\dots10/10) and processes the series accordingly. You can mark and
process more than one series at a time. If the posting contains any
archives, they are expanded and gathered in a new group.\\*
\begin{keys}{X p}
X b & Un-{\bf binhex} these series. [p/p]\\
X o & Simply {\bf output} these series (no decoding). [p/p]\\
X p & Unpack these {\bf postscript} series. [p/p]\\
X s & Un-{\bf shar} these series. [p/p]\\
X u & {\bf Uudecode} these series. [p/p]\\
\end{keys}
Each one of these commands has four variants:\\*
\begin{keys}{X v \bf Z}
X \bf z & Decode these series. [p/p]\\
X \bf Z & Decode and save these series. [p/p]\\
X v \bf z & Decode and view these series. [p/p]\\
X v \bf Z & Decode, save and view these series. [p/p]\\
\end{keys}
where {\bf z} or {\bf Z} identifies the decoding method (b, o, p, s, u).
An alternative binding for the most-often used of these commands is\\*
\begin{keys}{C-c C-v C-v}
C-c C-v C-v & (X v u) Uudecode and view these series. [p/p]\\
\end{keys}
}}
\newcommand{\ExitSummary}{% formerly \Zsubmap
{\esamepage
\begin{keys}{Z G}
Z Z & (q, Z Q) Exit this group.\\
Z E & (Q) {\bf Exit} without updating the group information.\\
%
Z c & (c) Mark all unticked articles as read ({\bf catch-up}) and exit.\\
Z C & Mark all articles as read ({\bf catch-up}) and exit.\\
%
Z n & Mark all articles as read and go to the {\bf next} group.\\
Z N & Exit and go to {\bf the} next group.\\
Z P & Exit and go to the {\bf previous} group.\\
%
Z G & (M-g) Check for new articles in this group ({\bf get}).\\
Z R & (C-x C-s) Exit this group, and then enter it again ({\bf reenter}).
[Prefix: select all articles, read and unread.]\\
Z s & Update and save the dribble buffer. [Prefix: save .newsrc* as
well]\\
\end{keys}
}
}
\newcommand{\MsgCompositionGeneral}{%
Press C-c ? in the composition-buffer to get this information.\\*
{\esamepage
\begin{keys}{C-c C-m}
% sending
C-c C-c & Send message and exit. [Prefix: send via foreign server]\\
C-c C-s & Send message. [Prefix: send via foreign server]\\
C-c C-d & Don't send message (save as \textbf{draft}).\\
C-c C-k & \textbf{Kill} message-buffer.\\
C-c C-m & {\bf Mail} reply to the address near point.
[Prefix: include the original]\\
% modify headers/body
C-c C-o & Sort headers.\\
C-c C-e & \textbf{Elide} region.\\
C-c C-v & Kill everything outside region.\\
C-c C-r & Do a \textbf{Rot-13} on the body.\\
C-c C-w & Insert signature (from `message-signature-file').\\
C-c C-z & Kill everything up to signature.\\
C-c C-y & \textbf{Yank} original message.\\
C-c C-q & Fill the yanked message.\\
C-c M-C-y & \textbf{Yank} a buffer and quote it.\\
M-RET & Insert four newlines and format quoted text. [Prefix:
justify as well]\\
C-c M-r & \textbf{Rename} message buffer. [Prefix: ask for new name]\\
\end{keys}
}
}
\newcommand{\MsgCompositionMovementArticle}{%
The following functions create the header-field if necessary.\\*
{\esamepage
\begin{keys}{C-c C-f C-u}
C-c TAB & Move to \textbf{signature}.\\
C-c C-b & Move to \textbf{body}.\\
C-c C-f C-t & (C-c C-t) Move to \textbf{To:}.\\
C-c C-f C-c & Move to \textbf{Cc:}.\\
C-c C-f C-b & Move to \textbf{Bcc:}.\\
C-c C-f C-w & Move to \textbf{Fcc:}.\\
C-c C-f C-s & Move to \textbf{Subject:}.\\
C-c C-f C-r & Move to \textbf{Reply-To:}.\\
C-c C-f C-f & Move to \textbf{Followup-To:}.\\
C-c C-f C-n & (C-c C-n) Move to \textbf{Newsgroups:}.\\
C-c C-f C-u & Move to \textbf{Summary:}.\\
C-c C-f C-k & Move to \textbf{Keywords:}.\\
C-c C-f C-d & Move to \textbf{Distribution:}.\\
C-c C-f C-m & Move to \textbf{Mail-Followup-To:}.\\
C-c C-f C-o & Move to \textbf{From:}.\\
C-c C-f C-a & Insert a reasonable \textbf{Mail-Followup-To:} for
an unsubscribed list. [Prefix: include addresses in \textbf{Cc:}]\\
C-c C-f TAB & (C-c C-u) Move to \textbf{Importance:}.\\
C-c M-n & Insert \textbf{Disposition-Notification-To:}
(request receipt).\\
\end{keys}
}
}
\newcommand{\MsgCompositionMML}{%
{\esamepage
\begin{keys}{C-c C-m P}
C-c C-m f & (C-c C-a) Attach \textbf{file}.\\
C-c C-m b & Attach contents of \textbf{buffer}.\\
C-c C-m e & Attach \textbf{external} file (ftp..).\\
C-c C-m P & Create MIME-\textbf{preview} (new
buffer). [Prefix: show raw MIME preview]\\
C-c C-m v & \textbf{Validate} article.\\
C-c C-m p & Insert \textbf{part}.\\
C-c C-m m & Insert \textbf{multi}-part.\\
C-c C-m q & \textbf{Quote} region.\\
C-c C-m c s & Encrypt message using \textbf{S/MIME}.\\
C-c C-m c o & Encrypt message using PGP.\\
C-c C-m c p & Encrypt message using \textbf{PGP/MIME}.\\
C-c C-m s s & Sign message using \textbf{S/MIME}.\\
C-c C-m s o & Sign message using PGP.\\
C-c C-m s p & Sign message using \textbf{PGP/MIME}.\\
C-c C-m C-n & Remove security related MML tags from message.\\
% TODO: narrow headers (C-c C-m n) ?
\end{keys}
}
}
%% TODO:
\newcommand{\ServerMode}{%
{\esamepage
To enter this mode, press \^{} while in Group mode.\\*
\begin{keys}{SPC}
SPC & (RET) Browse this server.\\
a & {\bf Add} a new server.\\
c & {\bf Copy} this server.\\
e & {\bf Edit} a server.\\
k & {\bf Kill} this server. [scope]\\
l & {\bf List} all servers.\\
q & Return to the group buffer ({\bf quit}).\\
s & Request that the server scan its sources for new articles.\\
g & Request that the server regenerate its data.\\
y & {\bf Yank} the previously killed server.\\
O & Try to {\bf open} a connection to this server.\\
C & {\bf Close} connection to this server.\\
D & Mark this server as unreachable ({\bf deny}).\\
M-o & {\bf Open} the connection to all servers.\\
M-c & {\bf Close} the connection to all servers.\\
R & Make all denied servers into closed servers.\\
L & Set server status to offline.\\
\end{keys}
}
}
\newcommand{\BrowseServer}{%
{\esamepage
To enter this mode, press `B' while in Group mode.\\*
\begin{keys}{RET}
RET & Enter the current group.\\
SPC & Enter the current group and display the first article.\\
? & Give a very short help message.\\
n & Go to the {\bf next} group. [distance]\\
p & Go to the {\bf previous} group. [distance]\\
q & (l) {\bf Quit} browse mode.\\
u & Subscribe to the current group. [scope]\\
\end{keys}
}
}
\newcommand{\GroupUnplugged}{%
{\esamepage
\begin{keys}{J S}
J j & Toggle plugged-state.\\
J s & Fetch articles from all groups for offline-reading.\\
J u & Fetch all eligible articles from this group.\\
J S & \textbf{Send} all sendable messages in the drafts group.\\
%
J c & Enter \textbf{category} buffer.\\
J a & \textbf{Add} this group to an Agent category [p/p].\\
J r & \textbf{Remove} this group from its Agent category [p/p].\\
J Y & Synchronize flags changed while unplugged with remote server.\\
\end{keys}
}
}
\newcommand{\SummaryUnplugged}{%
{\esamepage
\begin{keys}{J M-\#}
J \# & \textbf{Mark} the article for downloading.\\
J M-\# & \textbf{Unmark} the article for downloading.\\
@ & \textbf{Toggle} whether to download the article.\\
J c & Mark all undownloaded articles as read (\textbf{catch-up}).\\
J u & Download all downloadable articles from group.\\
\end{keys}
}
}
\newcommand{\ServerUnplugged}{%
{\esamepage
\begin{keys}{J a}
J a & \textbf{Add} the current server to the list of servers covered
by the agent.\\
J r & \textbf{Remove} the current server from the list of servers covered
by the agent.\\
\end{keys}
}
}
% end {gnusref} % % % % % % % % % % % % % % % % % % % % % % % % % %
% o some things might not be updated: scoring and server modes, maybe more
% o Gnus Unplugged category-buffer commands need to be written
\begin{document}
\def\progver{5.10}\def\refver{5.10-1} % program and refcard versions
\def\date{Jan 10th, 2004}
\def\author{Gnus Bugfixing Girls + Boys $<$bugs(a)gnus.org$>$}
\ifthenelse{\isundefined{\booklettrue}}{ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\raggedbottom\raggedright
\twocolumn
% use \tiny to shrink it to 4 pages (needs a high-resolution printer though)
% \tiny
\scriptsize
\pagestyle{plain}
\Title
\par
\Logo{refcard}
}{
\setcounter{page}{0}
\thispagestyle{empty}
\vspace*{\fill}
\Title
\vspace{0.4in}
\Logo{booklet}
\vspace*{\fill}
\pagebreak
}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% TODO: how does this work ?
%\tableofcontents
\Notes
%
\section*{Group-Mode}
\GroupModeGeneral
\subsection*{Group Subscribedness-Levels}
\GroupLevels
\subsection*{List Groups}
\ListGroups
\subsection*{Create/Edit Foreign Groups}
\CreateEditGroups
\subsection*{Unsubscribe, Kill and Yank Groups}
\SubscribeKillYankGroups
\subsection*{Mark Groups}
\MarkGroups
\subsection*{Group-Unplugged}
\GroupUnplugged
% topics in group-mode
\subsection*{Group Topics}
\GroupTopicsGeneral
\subsubsection*{Topic Sorting}
\TopicSorting
% \ifthenelse{\isundefined{\booklettrue}}{}{\pagebreak}
% summary-mode
\section*{Summary Mode}
\SummaryModeGeneral
\subsection*{Select Articles}
\SelectArticles
%
\subsection*{Threading}
\Threading
%
\subsection*{Limiting}
\Limiting
\subsection*{Sort the Summary-Buffer}
\SortSummary
\subsection*{Score (Value) Commands}
\Scoring
\ifthenelse{\isundefined{\booklettrue}}{% ifcard %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection*{Output Articles}
\OutputArticles
\subsection*{Extract Series (Uudecode etc)}
\ExtractSeries
}{}%ifcard% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection*{MIME operations from the Summary-Buffer}
\MIMESummary
\ifthenelse{\isundefined{\booklettrue}}{}{% ifbooklet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection*{Extract Series (Uudecode etc)}
\ExtractSeries
\subsection*{Output Articles}
\OutputArticles
}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
\subsection*{Post, Followup, Reply, Forward, Cancel}
\PostReplyetc
\ifthenelse{\isundefined{\booklettrue}}{\newpage}{}% newpage ifcard
\subsection*{Message Composition}
\MsgCompositionGeneral
\subsubsection*{Jumping in message-buffer}
\MsgCompositionMovementArticle
\subsubsection*{Attachments/MML}
\MsgCompositionMML
% marking articles
\subsection*{Mark Articles}
\MarkArticlesGeneral
\subsubsection*{Mark Based on Score}
\MarkByScore
\subsubsection*{The Process Mark}
\ProcessMark
\subsubsection*{Mark Indication-Characters}
\MarkCharacters
%
\ifthenelse{\isundefined{\booklettrue}}{\newpage}{}%
\subsection*{Summary-Unplugged}
\SummaryUnplugged
\subsection*{Mail-Group Commands}
\MailGroups
\subsection*{Draft-Group Commands}
\DraftGroup
% exiting
\subsection*{Exit the Summary-Buffer}
\ExitSummary
%
%
\section*{Article Mode (reading)}
\ArticleModeGeneral
\subsection*{Wash the Article-Buffer}
\WashArticle
\subsubsection*{Blank Lines and Whitespace}
\BlankAndWhitespace
\subsubsection*{Picons, X-faces, Smileys}
\Picons
\subsubsection*{Time and Date}
\TimeAndDate
\subsection*{Hide/Highlight Parts of the Article}
\HideHighlightArticle
\subsection*{MIME operations from the Article-Buffer (reading)}
\MIMEArticleMode
%
%
\section*{Server Mode}
\ServerMode
\subsection*{Unplugged-Server}
\ServerUnplugged
%
%
\section*{Browse Server Mode}
\BrowseServer
%\pagebreak
\vspace*{\fill}
\Copyright
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:
% arch-tag: be438b0e-6832-4afb-8c56-5f84743e5cd1
1.1 XEmacs/packages/xemacs-packages/gnus/texi/xml2texi.scm
Index: xml2texi.scm
===================================================================
;;; xml2texi.scm --- Convert gnus-faq.xml to gnus-faq.texi
;; Copyright (C) 2005 Free Software Foundation, Inc.
;; Author: Karl Pflästerer <sigurd(a)12move.de>
;; Keywords: tools
;; This file is not 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 the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Commentary:
;;
;;; Code:
(require (lib "ssax.ss" "ssax")
(lib "sxpath.ss" "ssax")
(lib "sxml-tree-trans.ss" "ssax")
(lib "pregexp.ss")
(lib "list.ss")
(lib "etc.ss")
(rename (lib "1.ss" "srfi") list-index list-index)
(rename (lib "13.ss" "srfi") string-join string-join))
;;; Constants
;; In and out; for convenience if we work from the REPL
(define +infile+ "gnus-faq.xml")
(define +outfile+ "gnus-faq.texi")
;; These are the names of the sections. These variables hold the names
;; of the sections where numbering starts in the main menu.
;; Where we start numbering in menu
(define +first-numbered-section+ "Installation FAQ")
;; Where we end numbering in menu
(define +last-numbered-section+ "Tuning Gnus")
;; Which sections not to include; i.e. not to name a node.
(define +ignored-sections+ '("Frequently Asked Questions with Answers"))
;; Names of menu entries and the corresponding descriptions (used in the
;; main menu).
(define +section-comments-alist+
'(("Introduction" . "About Gnus and this FAQ.")
("Installation FAQ" . "Installation of Gnus.")
("Startup / Group buffer" . "Start up questions and the first
buffer Gnus shows you.")
("Getting Messages" . "Making Gnus read your mail and news.")
("Reading messages" . "How to efficiently read messages.")
("Composing messages" . "Composing mails or Usenet
postings.")
("Old messages" . "Importing, archiving, searching and deleting
messages.")
("Gnus in a dial-up environment" . "Reading mail and news while
offline.")
("Getting help" . "When this FAQ isn't enough.")
("Tuning Gnus" . "How to make Gnus faster.")
("Glossary" . "Terms used in the FAQ explained.")))
;; Where to break descriptions in menus
(define +width+ 72)
;; The boilerplate text we include before the document
(define boilerplate
(lambda (titel)
(format
"\
@c \\input texinfo @c -*-texinfo-*-~%\
@c Uncomment 1st line before texing this file alone.~%\
@c %**start of header~%\
@c Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.~%\
@c~%\
@c Do not modify this file, it was generated from gnus-faq.xml, available from~%\
@c <
URL:http://my.gnus.org/FAQ/>.~%\
@c~%\
@setfilename gnus-faq.info~%\
@settitle ~A~%\
@c %**end of header~%\
@c~%\
" titel)))
;; Inserted right before the end of the file
(define +tag-for-gnus-faq-texi+
(format "\
~%\
@ignore~%\
arch-\
tag: 64dc5692-edb4-4848-a965-7aa0181acbb8~%\
@end ignore~%\
"))
;;; Little Helpers
;; (a b c) -> (1 2 3)
(define (number-list start inc lst)
(let loop ((lst lst) (lvl start) (acc '()))
(if (null? lst)
(reverse acc)
(loop (cdr lst) (+ inc lvl) (cons lvl acc)))))
;; Given an alist made of regexps and their replacements (key and value
;; are in a proper list) returns a function which given a string
;; replaces all occurences of the regexps (from left to right).
;; ((re1 repl1) (re2 repl2)) -> str -> str
(define make-reg-replacer
(lambda (defalist)
(let ((allreg (string-join (map car defalist) "|")))
(lambda (str)
(if (and (string? str) (pregexp-match allreg str))
(let loop ((lst defalist) (str str))
(if (null? lst)
str
(loop (cdr lst) (pregexp-replace* (caar lst) str (cadar lst)))))
str)))))
(define escape-texi
(make-reg-replacer '(("@" "@@") ("{"
"@{") ("}" "@}"))))
(define normalize
(compose escape-texi (make-reg-replacer `((,(format "~%\\s+") ,(format
"~%"))))))
(define normalize-example
(compose escape-texi (make-reg-replacer '(("^\\s+|\\s+$"
"")))))
(define trim-ws (make-reg-replacer '(("^\\s+|\\s+$" ""))))
(define filter-sect
(lambda (lst)
(filter (lambda (e) (not (member e +ignored-sections+))) lst)))
;;;; Para
(define format-para
(lambda (list-of-entries)
(format "~%~A~%" (trim-ws (apply string-append list-of-entries)))))
;;;; Questions
(define format-q-level
(lambda (level)
(apply format "[~A.~A]" (reverse level))))
(define format-q-description
(compose trim-ws (make-reg-replacer `((,(format "~%") " ")))))
;;;; Building nodes
;; curr-node up-node (list of nodes) (list of node names) ->
;; ((curr-node curr-name) (next next-name) (prev prev-name) up)
(define (find-prev-next-up curr up search-list name-list)
(do ((lst search-list (cdr lst))
(rlst name-list (cdr rlst))
(prev up (car lst))
(prevn up (car rlst)))
((or (null? lst) (equal? (car lst) curr))
(values (cons curr (if (pair? rlst) (car rlst) curr))
(if (and (pair? lst) (pair? (cdr lst))) ;next
(cons (cadr lst) (cadr rlst))
(cons "" ""))
(cons prev prevn)
up))))
(define (format-node section title up lst-of-nodes lst-of-names)
(if (member title +ignored-sections+)
()
(call-with-values
(lambda () (find-prev-next-up title up lst-of-nodes lst-of-names))
(lambda (currn prevn nextn up)
(format "~%@node ~A~%~A ~A~%"
(cdr currn) ;; (cdr prevn) (cdr nextn) up
section ;; @subsection etc.
(if (pair? title)
(apply format "~A.~A" (reverse title))
title))))))
;;;; Building menus
(define format-menu
(lambda (alist-of-entries)
(let ((len (apply max (map (lambda (s) (string-length (car s)))
alist-of-entries))))
(format "~%@menu~%~A@end menu~%"
(apply string-append
(map (lambda (e)
(format "* ~A::~A~A~%"
(car e) ;the entry
(make-string (- len (string-length (car e)) -3) #\
)
(format-menu-description (cdr e) +width+ (+ len
7))))
alist-of-entries))))))
(define format-menu-description
(lambda (entry width offset)
(let loop ((lst (pregexp-split "\\s" entry)) (len 0) (acc '()))
(if (null? lst)
(apply string-append (reverse! acc))
(let ((slen (+ 1 (string-length (car lst))))) ; +1 because of whitespace
added later
(if (> (+ slen len) (- width offset))
(loop (cdr lst) 0 (cons
(format "~%~A ~A" ; start
a new line
(make-string offset #\ ) ; the whitespace
(car lst))
acc))
(loop (cdr lst) (+ slen len) (cons (format " ~A"(car lst))
acc))))))))
(define format-sub-titles
(lambda (list-of-entries first-number-entry last-number-entry)
(let ((offset (or (list-index (lambda (e) (equal? e first-number-entry))
list-of-entries) 0))
(end (or (list-index (lambda (e) (equal? e last-number-entry))
list-of-entries)
(length list-of-entries))))
(map (lambda (entry ind)
(format "FAQ ~A ~A"
(if (<= offset ind end)
(format "~A -" (- ind offset -1)) ;numbered entry
"-")
entry))
list-of-entries (number-list 0 1 list-of-entries)))))
;;;; We number some sections first
;; ntags is an alist => ((tag startcounter increment)
(define (number-nodes tree level ntags)
(if (null? ntags)
tree
(let* ((vals (car ntags))
(ntag (car vals))
(start (second vals))
(inc (third vals))
(ntags (cdr ntags)))
(map
(lambda (node sublevel)
(pre-post-order
node
`((,ntag *preorder*
. ,(lambda (tag . entry)
`(,tag ,(cons sublevel level)
,@(number-nodes entry (cons sublevel level) ntags))))
(*default* . ,(lambda x x))
(*text* . ,(lambda (tag s) s)))))
tree (number-list start inc tree)))))
;;(transform->numbered faqsxml '(section article qandaset ((qandadiv 1 1)
(qandaentry 0 1))))
(define transform->numbered
(lambda (sxml rules)
(let* ((rules (reverse rules))
(rule (car rules))
(ntag (cadr rules))
(styles (map (lambda (tag) (cons tag (lambda x x))) (list-tail rules 2))))
(pre-post-order
sxml
`((*default* *preorder* . ,(lambda x x))
(*TOP* . ,(lambda x x))
,@styles
(,ntag *preorder*
. ,(lambda (tag . nodes)
(cons tag (number-nodes nodes '() rule)))))))))
;;;; The main transform function
(define (transform sxml)
(let* ((sxml (transform->numbered
sxml '(section article qandaset ((qandadiv 1 1) (qandaentry 0
1)))))
(qandadivtitles (filter-sect (map second ((sxpath '(// qandadiv title))
sxml))))
(fqandadivtitles (format-sub-titles qandadivtitles ""
""))
(subtitles (filter-sect (append (map second ((sxpath '(// section title))
sxml))
qandadivtitles
(map second ((sxpath '(// glossary
title)) sxml)))))
(fsubtitles (format-sub-titles subtitles +first-numbered-section+
+last-numbered-section+))
(questlevel (map second ((sxpath '(article section qandaset qandadiv
qandaentry)) sxml)))
(up1 (cadar ((sxpath '(article articleinfo title)) sxml)))
;;; ************************************************************
;;; The Style Sheet
;;; ************************************************************
(style-sheet
`(
;;; ************************************************************
;;; First the SXML special markers
;;; ************************************************************
;; *TOP* *PI* @ are markers from SXML
(*TOP* . ,(lambda (tag . x) x))
(*PI* . ,(lambda _ '()))
(@ . ,(lambda _ ""))
;; Look for the example rule where we overwrite the *text* rule
;; so code doesn't get mangled.
(*text*
. ,(lambda (tag string)
(normalize string)))
;; If nothing else matches
(*default* . ,(lambda x x))
;;; ************************************************************
;;; Now to the tags of our FAQ
;;; ************************************************************
(article . ,(lambda (tag . sects)
(list (boilerplate up1) sects
+tag-for-gnus-faq-texi+)))
(articleinfo
((*default* . ,(lambda _ '()))
(title
. ,(lambda (tag titel)
(let ((menucom (map (lambda (entry)
(let ((e (assoc entry
+section-comments-alist+)))
(if e (cdr e) "")))
subtitles)))
(list (format-node '@section titel "" '()
'())
(format-menu (map cons fsubtitles menucom)))))))
. ,(lambda (tag . info) info))
;; Sections
(abstract
. ,(lambda (tag . text)
(cons (format "~%@subheading Abstract~%") text)))
(section
((title
. ,(lambda (tag titel)
(format-node '@subheading titel up1 subtitles fsubtitles))))
. ,(lambda (tag . entry) entry))
;; Q&A well it's called FAQ isn't it?
(qandaset . ,(lambda (tag . x) x))
(qandadiv
((title
. ,(lambda (tag titel) titel)))
. ,(lambda (tag level titel . entries)
(let ((questions (map cadr entries))
(nlevel (filter (lambda (lvl) (eq? (car level) (cadr lvl)))
questlevel)))
(list*
(format-node '@subsection titel up1 subtitles fsubtitles)
(format-menu (map (lambda (lvl quest)
(cons (format-q-level lvl)
(format-q-description quest)))
nlevel questions))
entries))))
(qandaentry
. ,(lambda (tag level question answer)
(let ((nodes
(filter (lambda (lvl) (eq? (cadr lvl) (cadr level)))
questlevel))
(up (list-ref fqandadivtitles (- (cadr level) 1))))
(list*
(format-node "@subsubheading Question" level up nodes
(map format-q-level nodes))
question answer))))
(question . ,(lambda (tag quest) quest))
(answer
. ,(lambda (tag . answ) (list* (format "~%@subsubheading
Answer~%") answ)))
;; Para
(para . ,(lambda (tag . x) (format-para x)))
(simpara . ,(lambda (tag . x) (cons (format "~%") x)))
;; Itemized lists.
;; We rewrite para here because it plays here the role of an
;; item marker
(itemizedlist
. ,(lambda (tag lstitem)
(format "~%@itemize @bullet~%~A@end itemize~%"
lstitem)))
(listitem
((para
. ,(lambda (tag item)
(format "~%@item~%~A~%" (trim-ws item)))))
. ,(lambda (tag . x) (string-join x "")))
;; The glossary.
(glossary
((title . ,(lambda _'())))
. ,(lambda (tag . terms)
(let ((titel (cadar ((sxpath '(article glossary title))
sxml))))
(cons (format-node '@subsection titel up1 subtitles
fsubtitles)
(list (format "~%@table @dfn~%")
terms
(format "~%@end table~%"))))))
(glossentry . ,(lambda (tag . entry) entry))
(glossterm
. ,(lambda (tag term)
(format "~%@item ~A" term)))
(glossdef
. ,(lambda (tag def) def))
;; Lisp examples
;; We rewrite the *text* rule so code stays the way it's writen.
(programlisting
((*text*
. ,(lambda (tag exampl)
(normalize-example exampl))))
. ,(lambda (tag . exampl)
(format "~%@example~%~A~%@end example~%@noindent~%"
(string-join exampl ""))))
;; The link handling
;; Here we are interested in the attributes, so we rewrite the @
;; rule. If we find a value we look if it's an email or http
;; uri.
(ulink
((@
. ,(lambda (at val) val)))
. ,(lambda (tag uri name)
(if (pregexp-match "^http:|^ftp:" uri)
(if (equal? uri name)
(format "@uref{~A}" uri)
(format "@uref{~A, ~A}" uri name))
(format "@email{~A, ~A}" (substring uri 7) name))))
(url
. ,(lambda (tag val) val))
;; userinput
(userinput
. ,(lambda (tag val)
(format "@samp{~A}" val)))
)))
(pre-post-order sxml style-sheet)))
;;;; We call main with infile and outfile as arguments
(define main
(lambda (in out)
(with-output-to-file out
(lambda ()
(call-with-input-file in
(lambda (port)
(SRV:send-reply (transform (ssax:xml->sxml port '()))))))
'replace)))
;; Local Variables:
;; coding: iso-8859-1
;; End:
;; arch-tag: cdd948f7-def9-4ea1-b5ae-b57c308097d7
;;; xml2texi.scm ends here
1.1 XEmacs/packages/xemacs-packages/gnus/texi/xml2texi.sh
Index: xml2texi.sh
===================================================================
#! /bin/sh
#|
exec mzscheme -mr $0 ${1+"$@"}
|#
;; Copyright (C) 2005 Free Software Foundation, Inc.
;;
;; Author: Karl Pflästerer <sigurd(a)12move.de>
;; Keywords: tools
;;
;; This file is not 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 the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Commentary:
;;
;; Requirements:
;;
;; To run this scheme program you need MzScheme and DrScheme.
;;
;; Some URLs:
;;
http://www.plt-scheme.org/software/mzscheme/
;;
http://www.drscheme.org/
;;
http://www.plt-scheme.org/software/
;;
;; ,----[
http://www.plt-scheme.org/license/ ]
;; | PLT software is distributed under the
;; | GNU Lesser General Public License (LGPL).
;; `----
;;; Code:
(require (lib "cmdline.ss"))
(define +scmfile+ "xml2texi.scm")
(define +in+ "gnus-faq.xml")
(define +out+ "gnus-faq.texi")
(command-line
"xml2texi"
(current-command-line-arguments)
(once-each
(("-i" "--input") in "Name of XML data file (default
gnus-faq.xml)"
(set! +in+ in))
(("-o" "--output") out "Name of output file (default
gnus-faq.texi)"
(set! +out+ out))
(("-l" "--library") lib "Name of Scheme library to load
(default xml2texi.scm)"
(set! +scmfile+ lib)))
(help-labels "The first (or only) remaining argument is used as the name of the
Input file"
"The second argument is used as the name of the Output file")
(args infile+outfile
(cond ((= (length infile+outfile) 2)
(set! +in+ (car infile+outfile))
(set! +out+ (cadr infile+outfile)))
((= (length infile+outfile) 1)
(set! +in+ (car infile+outfile)))
(else #f))))
(load +scmfile+)
(main +in+ +out+)
;; Local Variables:
;; mode: scheme
;; coding: iso-8859-1
;; End:
;; arch-tag: 582279c5-b7bf-44b0-ba09-d243a7d7f6e0