Merge changes in Emacs21.
authorShengHuo ZHU <zsh@cs.rochester.edu>
Tue, 19 Dec 2000 22:19:13 +0000 (22:19 +0000)
committerShengHuo ZHU <zsh@cs.rochester.edu>
Tue, 19 Dec 2000 22:19:13 +0000 (22:19 +0000)
113 files changed:
lisp/ChangeLog
lisp/binhex.el
lisp/catchup.pbm [new file with mode: 0644]
lisp/catchup.xpm [new file with mode: 0644]
lisp/cu-exit.pbm [new file with mode: 0644]
lisp/cu-exit.xpm [new file with mode: 0644]
lisp/describe-group.pbm [new file with mode: 0644]
lisp/describe-group.xpm [new file with mode: 0644]
lisp/earcon.el
lisp/exit-gnus.pbm [new file with mode: 0644]
lisp/exit-gnus.xpm [new file with mode: 0644]
lisp/exit-summ.pbm [new file with mode: 0644]
lisp/exit-summ.xpm [new file with mode: 0644]
lisp/flow-fill.el
lisp/followup.pbm [new file with mode: 0644]
lisp/followup.xpm [new file with mode: 0644]
lisp/fuwo.pbm [new file with mode: 0644]
lisp/fuwo.xpm [new file with mode: 0644]
lisp/get-news.pbm [new file with mode: 0644]
lisp/get-news.xpm [new file with mode: 0644]
lisp/gnntg.pbm [new file with mode: 0644]
lisp/gnntg.xpm [new file with mode: 0644]
lisp/gnus-agent.el
lisp/gnus-art.el
lisp/gnus-audio.el
lisp/gnus-cache.el
lisp/gnus-cite.el
lisp/gnus-cus.el
lisp/gnus-ems.el
lisp/gnus-gl.el
lisp/gnus-group.el
lisp/gnus-int.el
lisp/gnus-ml.el
lisp/gnus-msg.el
lisp/gnus-nocem.el
lisp/gnus-range.el
lisp/gnus-salt.el
lisp/gnus-score.el
lisp/gnus-setup.el
lisp/gnus-soup.el
lisp/gnus-spec.el
lisp/gnus-start.el
lisp/gnus-sum.el
lisp/gnus-undo.el
lisp/gnus-util.el
lisp/gnus-vm.el
lisp/gnus.el
lisp/imap.el
lisp/kill-group.pbm [new file with mode: 0644]
lisp/kill-group.xpm [new file with mode: 0644]
lisp/lpath.el
lisp/mail-reply.pbm [new file with mode: 0644]
lisp/mail-reply.xpm [new file with mode: 0644]
lisp/mail-source.el
lisp/mailcap.el
lisp/message.el
lisp/messcompat.el
lisp/mm-bodies.el
lisp/mm-decode.el
lisp/mm-encode.el
lisp/mm-util.el
lisp/mm-uu.el
lisp/mml.el
lisp/next-ur.pbm [new file with mode: 0644]
lisp/next-ur.xpm [new file with mode: 0644]
lisp/nnbabyl.el
lisp/nndir.el
lisp/nneething.el
lisp/nngateway.el
lisp/nnheader.el
lisp/nnkiboze.el
lisp/nnlistserv.el
lisp/nnmail.el
lisp/nnmbox.el
lisp/nnmh.el
lisp/nnml.el
lisp/nnoo.el
lisp/nnsoup.el
lisp/nnspool.el
lisp/nntp.el
lisp/nnultimate.el
lisp/nnweb.el
lisp/parse-time.el
lisp/pop3.el
lisp/post.pbm [new file with mode: 0644]
lisp/post.xpm [new file with mode: 0644]
lisp/prev-ur.pbm [new file with mode: 0644]
lisp/prev-ur.xpm [new file with mode: 0644]
lisp/qp.el
lisp/reply-wo.pbm [new file with mode: 0644]
lisp/reply-wo.xpm [new file with mode: 0644]
lisp/reply.pbm [new file with mode: 0644]
lisp/reply.xpm [new file with mode: 0644]
lisp/rfc2045.el
lisp/rfc2047.el
lisp/rfc2231.el
lisp/rot13.pbm [new file with mode: 0644]
lisp/rot13.xpm [new file with mode: 0644]
lisp/save-aif.pbm [new file with mode: 0644]
lisp/save-aif.xpm [new file with mode: 0644]
lisp/save-art.pbm [new file with mode: 0644]
lisp/save-art.xpm [new file with mode: 0644]
lisp/subscribe.pbm [new file with mode: 0644]
lisp/subscribe.xpm [new file with mode: 0644]
lisp/time-date.el
lisp/unsubscribe.pbm [new file with mode: 0644]
lisp/unsubscribe.xpm [new file with mode: 0644]
lisp/utf7.el
lisp/uu-decode.pbm [new file with mode: 0644]
lisp/uu-decode.xpm [new file with mode: 0644]
lisp/uu-post.pbm [new file with mode: 0644]
lisp/uu-post.xpm [new file with mode: 0644]
lisp/uudecode.el

index a4df54b..ad38ac0 100644 (file)
@@ -1,3 +1,529 @@
+2000-12-19 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el: Merged. Emacs21 CVS tag is zsh-merge-ognus-1.
+
+2000-12-19  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-charset-synonym-alist): Fix a typo.
+
+2000-12-18  Gerd Moellmann  <gerd@gnu.org>
+
+       * *.xpm, *.pbm: Convert icons icons to size 24x24.
+
+2000-12-18  Dave Love  <fx@gnu.org>
+
+       * gnus-msg.el (news-setup, news-reply-mode): Don't autoload
+       (unused).
+
+2000-12-13  Miles Bader  <miles@gnu.org>
+
+       * smiley-ems.el (smiley-region): Bind `inhibit-point-motion-hooks'
+       to t, so that we don't get stuck while trying to smilefy
+       intangible text.
+
+2000-12-12  Gerd Moellmann  <gerd@gnu.org>
+
+       * smiley-ems.el (smiley-regexp-alist): Make regexps match
+       at the end of the buffer.
+       (smiley-region): In the loop, move to the end of the submatch
+       matching the smiley instead of using the end of the match 
+       of the whole regexp.
+
+2000-12-12  Eli Zaretskii  <eliz@is.elta.co.il>
+
+       * message.el (message-mode): Doc fix.
+
+2000-12-12  Gerd Moellmann  <gerd@gnu.org>
+
+       * smiley-ems.el (smiley-region): Doc fix.
+       
+2000-12-11  Miles Bader  <miles@gnu.org>
+
+       * gnus-sum.el (gnus-summary-recenter): When trying to keep the
+       bottom line visible, check to see if it's partially obscured, and
+       if so, either scroll one more line to make it fully visible, or
+       revert to showing the second line from the top.
+
+2000-12-07  Dave Love  <fx@gnu.org>
+
+       * mailcap.el (mailcap-download-directory)
+       * gnus-audio.el (gnus-audio-directory)
+       * smiley-ems.el (smiley-data-directory): Fix :type.
+
+2000-11-30  Dave Love  <fx@gnu.org>
+
+       * message.el (message-auto-save-directory): Use
+       file-name-as-directory.
+       (message-set-auto-save-file-name): Create
+       message-auto-save-directory if necessary.
+       (message-replace-chars-in-string): Removed -- unused.
+       (message-mail-alias-type): Customize.
+       (message-headers): Remove duplicate defgroup.
+
+2000-11-29  Dave Love  <fx@gnu.org>
+
+       * qp.el (quoted-printable-decode-region): Use error, not message
+       to report malformed text (like base64).  Amend message.
+
+2000-11-29  Miles Bader  <miles@gnu.org>
+
+       * message.el (message-header-lines): Fontify tag.
+
+2000-11-27  Dave Love  <fx@gnu.org>
+
+       * nnlistserv.el: Ignore errors when requiring nnweb and avoid a
+       compiler warning.
+
+;2000-11-26  Dave Love  <fx@gnu.org>
+;
+;      * mm-uu.el (mm-uu-configure-list): Fix typo in :type.
+;
+2000-11-23  Dave Love  <fx@gnu.org>
+
+       * uu-post.pbm, uu-decode.pbm: new files from XPMs.
+
+;      * mm-uu.el (uudecode): Require.
+;      (uudecode-decode-region, uudecode-decode-region-external): Don't
+;      autoload.
+       (mm-uu-copy-to-buffer): Doc fix.
+       (mm-uu-decode-function, mm-uu-binhex-decode-function): Doc, custom
+       type fix.
+
+       * mailcap.el: Doc fixes.
+       (mailcap-mime-data): Various adjustments.
+       (mailcap): New group.
+       (mailcap-download-directory): Customize.
+       (mailcap-generate-unique-filename, mailcap-binary-suffixes)
+       (mailcap-temporary-directory): Deleted (unused).
+       (mailcap-unescape-mime-test): Simplify slightly.
+       (mailcap-viewer-passes-test): Use functionp.
+       (mailcap-command-p): Aliased to executable-find.
+
+       * rfc2047.el (rfc2047-encode-message-header): Don't encode if
+       default-enable-multibyte-characters is nil.
+
+2000-11-22  Gerd Moellmann  <gerd@gnu.org>
+
+       * gnus-group.el (gnus-group-make-tool-bar): Fix a paren typo.
+
+2000-11-21  Dave Love  <fx@gnu.org>
+
+       * gnus-art.el (gnus-mime-button-map): Don't inherit from
+       gnus-article-mode-map.
+;      (gnus-mime-button-menu): Use mouse-set-point.
+       (gnus-insert-mime-button, gnus-mime-display-alternative) 
+       (gnus-mime-display-alternative): Don't use local-map property.
+
+2000-11-17  Dave Love  <fx@gnu.org>
+
+       * uudecode.el (uudecode-insert-char): Fix bogus feature test.
+       (uudecode-decode-region-external): Doc fix.  Use with-temp-buffer
+       and make-temp-file.
+       (uudecode-decode-region): Doc fix.
+
+2000-11-14  Dave Love  <fx@gnu.org>
+
+       * cu-exit.pbm, exit-summ.pbm, followup.pbm, fuwo.pbm:
+       * mail-reply.pbm, next-ur.pbm, post.pbm, prev-ur.pbm:
+       * reply-wo.pbm, reply.pbm, rot13.pbm, save-aif.pbm, save-art.pbm:
+       New files, derived from the XPMs.
+
+2000-11-10  Dave Love  <fx@gnu.org>
+
+       * gnus-agent.el (gnus-agent-confirmation-function): Add :version.
+       (gnus-agent-lib-file, gnus-agent-load-alist)
+       (gnus-agent-save-alist, gnus-agent-article-name): Use
+       expand-file-name.
+
+       * gnus-group.el (gnus-group-name-charset-method-alist): Add
+       :version.
+       (nnkiboze-score-file): Defvar when compiling.
+
+       * gnus-start.el (gnus-read-newsrc-file): Add :version.
+
+       * gnus-art.el (gnus-article-banner-alist) 
+       (gnus-emphasize-whitespace-regexp, gnus-ignored-mime-types) 
+       (gnus-article-date-lapsed-new-header) 
+       (gnus-article-mime-match-handle-function, gnus-mime-action-alist) 
+       (gnus-treat-strip-list-identifiers, gnus-treat-date-iso8601) 
+       (gnus-treat-strip-headers-in-body) 
+       (gnus-treat-capitalize-sentences, gnus-treat-play-sounds) 
+       (gnus-treat-translate): Add :version.
+       (gnus-article-mime-part-function): Fix defcustom.
+
+       * nnmail.el (nnmail-expiry-target) 
+       (nnmail-scan-directory-mail-source-once, nnmail-extra-headers) 
+       (nnmail-split-header-length-limit): Add :version.
+
+       * gnus-sum.el (gnus-auto-expirable-marks) 
+       (gnus-inhibit-user-auto-expire, gnus-list-identifiers) 
+       (gnus-extra-headers, gnus-ignored-from-addresses) 
+       (gnus-newsgroup-ignored-charsets) 
+       (gnus-group-highlight-words-alist) 
+       (gnus-summary-show-article-charset-alist): Add :version.
+
+       * catchup.pbm, describe-group.pbm, exit-gnus.pbm, get-news.pbm:
+       gnntg.pbm, kill-group.pbm, subscribe.pbm, unsubscribe.pbm: New
+       files, converted from the XPMs.
+
+       * gnus-cache.el (gnus-cache-active-file): Don't use
+       file-name-as-directory on directory.
+       (gnus-cache-file-name): Use expand-file-name, not concat.  Don't
+       use file-name-as-directory on directory.
+
+       * time-date.el (timezone-make-date-arpa-standard): Autoload.
+       (date-to-time): Use it.
+
+;      * message.el (message-mode) <adaptive-fill-regexp>:
+;      <adaptive-fill-first-line-regexp>: Use [:alnum:] in regexp range.
+;      (message-newline-and-reformat): Likewise.
+       (message-forward-as-mime, message-forward-ignored-headers) 
+       (message-buffer-naming-style, message-default-charset) 
+       (message-dont-reply-to-names, message-send-mail-partially-limit):
+       Add :version.
+
+       * mm-util.el: Doc fixes.
+       (mm-mime-charset): Don't use the raw result of
+       mm-preferred-coding-system.
+       (mm-with-unibyte-buffer, mm-with-unibyte-current-buffer)
+       (mm-with-unibyte): Simplify.
+
+       * gnus-int.el (gnus-start-news-server): Use expand-file-name, not
+       concat.
+
+       * pop3.el (pop3-version): Deleted.
+       (pop3-make-date): New function, avoiding message-make-date.
+       (pop3-munge-message-separator): Use it.
+
+2000-11-09  Dave Love  <fx@gnu.org>
+
+       * gnus-group.el (gnus-group-make-directory-group) 
+       (gnus-group-fetch-faq): Use expand-file-name.
+       (gnus-group-fetch-faq): Simplify completing-read form.
+
+       * mm-bodies.el (mm-encode-body): Use mm-multibyte-p, don't just
+       test for Mule.
+
+       * message.el (tool-bar-map): Defvar when compiling.
+
+       * gnus-setup.el (running-xemacs, gnus-use-installed-tm)
+       (gnus-tm-lisp-directory): Deleted.
+       (gnus-use-installed-mailcrypt, gnus-emacs-lisp-directory): Use
+       (featurep 'xemacs).
+       (gnus-gnus-lisp-directory, gnus-mailcrypt-lisp-directory) 
+       (gnus-mailcrypt-lisp-directory, gnus-bbdb-lisp-directory): Remove
+       version numbers from file names.
+
+2000-11-08  Dave Love  <fx@gnu.org>
+
+       * mm-view.el: Use featurep for XEmacs test.
+       (mm-inline-message): Test for `remove-specifier'; don't use
+       condition-case.
+
+       * mm-bodies.el (mm-encode-body): Use mm-multibyte-p.
+
+       * gnus-score.el (gnus-score-load-file): Use expand-file-name.
+       (gnus-score-find-bnews): Don't concat "".
+
+       * cu-exit.xpm, prev-ur.xpm, next-ur.xpm, post.xpm, fuwo.xpm:
+       * followup.xpm, uu-post.xpm, uu-decode.xpm, mail-reply.xpm:
+       * reply.xpm, reply-wo.xpm, rot13.xpm, save-aif.xpm, save-art.xpm:
+       * exit-summ.xpm: New files, renamed from icons by Luis Fernandes.
+
+       * gnus-sum.el: Put some defvars in eval-when-compile.
+       (gnus-summary-mode-hook): Add :options.
+       (gnus-summary-make-menu-bar): Add some :help, used by tool bar.
+       (gnus-summary-tool-bar-map): New variable.
+       (gnus-summary-make-tool-bar): New function.
+       (gnus-summary-mode): Put kill-all-local-variables first.
+
+       * gnus-group.el (gnus-group-toolbar-map): New variable.
+       (gnus-group-make-tool-bar): Rewritten.
+       (gnus-group-mode): Put kill-all-local-variables first.
+
+       * rfc2047.el: Require gnus-util.
+
+       * nnml.el (gnus-sorted-intersection): Autoload.
+
+       * nnheader.el: Wrap subst-char-in-string def in eval-and-compile.
+       Put some defvars in eval-when-compile.
+       (gnus-intersection, gnus-sorted-complement):  Autoload.
+
+       * imap.el (imap-point-at-eol): New, replacing gnus-point-at-eol.
+
+       * mm-encode.el (mm-body-7-or-8): Autoload.
+
+       * mm-decode.el (mm-insert-inline): Autoload.
+
+       * mml.el:
+       * message.el: Put some defvars in eval-when-compile.
+
+       * gnus-msg.el: Put some defvars in eval-when-compile.
+       (gnus-msg-mail): Move after gnus-setup-message.
+
+       * smiley-ems.el (smiley-data-directory, smiley-regexp-alist): Doc fix.
+
+2000-11-07  Dave Love  <fx@gnu.org>
+
+       * gnus-util.el (nnheader): Don't require message (recursive
+       autoload).
+
+       * uudecode.el: Avoid compiler warnings.
+
+       * rfc2047.el: (rfc2047-fold-region): Use gnus-point-at-bol.
+       (rfc2047-charset-encoding-alist): Add iso-8859-1[45].
+
+2000-11-06  Dave Love  <fx@gnu.org>
+
+       * gnus-salt.el (gnus-binary-mode): Fix call to gnus-add-minor-mode.
+
+       * uudecode.el: Use (featurep 'xemacs).  Require cl when compiling.
+       (uudecode-char-int): New alias, replacing char-int.
+       (uudecode-decode-region): Don't call buffer-disable-undo.
+
+;      * mm-uu.el (mm-uu-configure): Unquote lambda.
+;      (mm-uu-configure-list): Doc fix.
+;
+;      * earcon.el (running-xemacs): Don't define.
+;
+;2000-11-03  Stefan Monnier  <monnier@cs.yale.edu>
+;
+;      * message.el (message-font-lock-keywords): Match a final newline
+;      to help font-lock's multiline support.
+;
+2000-11-03  Dave Love  <fx@gnu.org>
+
+       * gnus-nocem.el (gnus-nocem-check-article-limit): Default to 500.
+
+       * mm-partial.el (mm-inline-partial): Space-prefix temp buffer
+       name.
+
+       * gnus-cus.el (gnus-group-parameters) <gcc-self>: Fix custom type.
+       <banner>: Fix custom type, doc.
+
+       * mm-decode.el (mm-display-external): Space-prefix temp buffer
+       name.  Don't disable undo explicitly.
+
+;2000-11-02  Dave Love  <fx@gnu.org>
+;
+;      * message.el (message-font-lock-keywords): Use [:alpha:] for
+;      cite-prefix.
+
+2000-11-01  Dave Love  <fx@gnu.org>
+
+       * rfc2047.el (base64): Require unconditionally.
+       (message-posting-charset): Defvar when compiling.
+       (rfc2047-encode-message-header, rfc2047-encodable-p): Require
+       message.
+
+       * gnus-sum.el (nnoo): Require.
+       (mm-uu-dissect): Autoload.
+
+       * mml.el (mml-parse-1): Clarify message.
+       (mml-minibuffer-read-type): Use mailcap-mime-types.
+
+2000-11-01  Stefan Monnier  <monnier@cs.yale.edu>
+
+       * mml.el: Fix a typo in the requiring of CL.
+
+2000-11-01  Dave Love  <fx@gnu.org>
+
+       * utf7.el: Require cl when compiling.
+
+       * binhex.el: Use (featurep 'xemacs).
+       (binhex-char-int): New alias, replacing char-int.  Change callers.
+       (binhex-decode-region): Simplify work buffer code.
+       (binhex-decode-region-external): Use expand-file-name, not concat.
+
+2000-10-30  Dave Love  <fx@gnu.org>
+
+       * gnus-art.el: Fix 2000-10-27 change properly.
+
+2000-10-28  Miles Bader  <miles@gnu.org>
+
+       * gnus-art.el (gnus-read-save-file-name): Remove extraneous paren.
+
+2000-10-27  Dave Love  <fx@gnu.org>
+
+       * gnus-group.el (gnus-group-make-menu-bar): Add some :help
+       strings.
+       (gnus-group-make-tool-bar): New function.
+       (gnus-group-mode): Use it.
+
+       * message.el (message-mode-menu): Add some :help strings.
+       (message-mode) [message-tool-bar-map]: Define tool-bar-map.
+       (featurep): Use (featurep 'xemacs).  Install tool bar for Emacs.
+
+       * catchup.xpm, exit-gnus.xpm, gnntg.xpm, subscribe.xpm:
+       * describe-group.xpm, get-news.xpm, kill-group.xpm:
+       * unsubscribe.xpm: New files.  Renamed icons from Luis Fernandes.
+
+       * mm-decode.el (mm-valid-and-fit-image-p): Don't test
+       display-graphic-p here.
+
+2000-10-27  Miles Bader  <miles@lsi.nec.co.jp>
+
+       * gnus-ems.el (gnus-ems-redefine): Use (featurep 'xemacs) instead
+       of the `gnus-xemacs' variable, as the latter has been removed.
+       * gnus-start.el (gnus-1, gnus-read-descriptions-file): Likewise.
+       * gnus-art.el (gnus-treat-display-xface)
+       (gnus-treat-display-smileys, gnus-treat-display-picons) 
+       (gnus-article-read-summary-keys): Likewise.
+
+2000-10-26  Dave Love  <fx@gnu.org>
+
+       (defvar): Use rmail-spool-directory unconditionally.
+
+2000-10-18  Dave Love  <fx@gnu.org>
+
+       * mm-bodies.el (mm-uu-decode-function)
+       (mm-uu-binhex-decode-function): Defvar when compiling.
+
+       * gnus-nocem.el (gnus-nocem-issuers): Update.
+       (gnus-nocem-check-from): New option.
+       (gnus-nocem-scan-groups): Use it.
+       (gnus-nocem-check-article): Bind gnus-newsgroup-name.
+       (gnus-nocem-check-article-limit): Add :version.
+
+2000-10-16  Stefan Monnier  <monnier@cs.yale.edu>
+
+       * ietf-drums.el (mm-util): Require CL when compiling.
+
+2000-10-15  Dave Love  <fx@gnu.org>
+
+       * qp.el: Require mm-util.
+
+2000-10-13  Dave Love  <fx@gnu.org>
+
+       * qp.el (quoted-printable-decode-region): Avoid invalid
+       coding-systems.
+
+2000-10-12  Gerd Moellmann  <gerd@gnu.org>
+
+       * mm-bodies.el: Don't require `mm-uu' at compile-time; it leads
+       to a recursive load.
+
+2000-10-12  Dave Love  <fx@gnu.org>
+
+       * mm-util.el (mm-charset-synonym-alist): Add windows-1252.
+
+       * gnus.el (gnus-group-startup-message): Check for PBM image.
+
+2000-10-09  Dave Love  <fx@gnu.org>
+
+       * mail-source.el (mail-source-fetch-imap): Bind
+       default-enable-multibyte-characters rather than using
+       mm-disable-multibyte.
+
+2000-10-05  Dave Love  <fx@gnu.org>
+
+       * qp.el (mm-decode-coding-region, mm-encode-coding-region):
+       Autoload.
+       (quoted-printable-decode-region):  Rename arg which confused
+       charset with coding-system.  Don't use nonascii-insert-offset.
+       Coding-system encode the region initially.  Don't recognize `=='
+       as valid QP.  Coding-system decode the region finally.
+       (quoted-printable-decode-string): Rename arg which confused
+       charset with coding-system.
+
+       * mm-bodies.el: Require mm-uu, Don't require qp, uudecode.
+       (mm-encode-body): Apply mm-charset-to-coding-system to arg of
+       mm-encode-coding-region.
+       (mm-decode-body, mm-decode-string): Rename variables which
+       confused charset with coding-system.
+       (binhex-decode-region): Don't autoload.
+       (mm-body-encoding): Require message.
+       (mm-decode-content-transfer-encoding): Require mm-uu in relevant
+       cond branches.
+
+       * gnus-art.el (article-de-quoted-unreadable)
+       (article-de-base64-unreadable): Fold search case
+       rather than downcasing string.  Apply mm-charset-to-coding-system
+       to arg of quoted-printable-decode-region.
+
+2000-10-04  Dave Love  <fx@gnu.org>
+
+       * gnus-ems.el: Don't turn off compiler warnings in local vars.
+       Require ring when compiling.
+       (gnus-article-compface-xbm): New variable.
+
+2000-10-04  Dave Love  <fx@gnu.org>
+
+       * smiley-ems.el (smiley-regexp-alist, smiley-update-cache): Use
+       pbm images.
+
+       * frown.pbm, smile.pbm, wry.pbm: New files.
+
+       * frown.xbm, smile.xbm, wry.xbm: Deleted.
+
+2000-10-03  Dave Love  <fx@gnu.org>
+
+       * mail-source.el (mail-sources): Revert to nil.
+
+       * nnmail (nnmail-spool-file): Revert to `((file))'.
+
+       * qp.el: Don't require mm-util.
+       (quoted-printable-decode-region): Rewritten.
+       (quoted-printable-decode-string, quoted-printable-encode-region):
+       Doc fix.
+       (quoted-printable-encode-region): Barf on multibyte characters.
+       Maybe make the class multibyte.  Upcase chars, not formatted
+       strings.  Allow mm-use-ultra-safe-encoding to be unbound.
+       (quoted-printable-encode-string): Don't use
+       mm-with-unibyte-buffer.
+
+2000-09-29  Gerd Moellmann  <gerd@gnu.org>
+
+       * smiley-ems.el (smiley-update-cache):  Use `:ascent center'.
+
+2000-09-21  Dave Love  <fx@gnu.org>
+
+       * smiley-ems.el (smiley-region): Test if display-graphic-p bound
+       (for Emacs 20).  Tidy somewhat.
+
+2000-09-21  Dave Love  <fx@gnu.org>
+
+       * gnus-ems.el (gnus-article-display-xface): Use unibyte for the
+       image processing.  Rationalize logic somewhat.
+
+2000-09-20  Dave Love  <fx@gnu.org>
+
+       * gnus-start.el (gnus-1) <gnus-simple-splash>: Don't test for X
+       specifically.
+
+       * gnus.el (gnus-version-number): Avoid some redundant
+       autoloads.
+
+2000-09-20  Gerd Moellmann  <gerd@gnu.org>
+
+       * gnus-ems.el (gnus-article-display-xface): Don't convert PBM
+       to XBM; we always have PBM support.
+
+2000-09-14  Dave Love  <fx@gnu.org>
+
+       * gnus.el (gnus-charset): 
+       * mm-decode.el (mime-display):
+       * imap.el (imap) <defgroup>: Add :version.
+
+2000-09-13  Gerd Moellmann  <gerd@gnu.org>
+
+       * parse-time.el: Fix author's mail address.
+
+       * earcon.el, flow-fill.el, gnus-cite.el, gnus-gl.el, gnus-ml.el:
+       * gnus-mlspl.el, gnus-nocem.el, gnus-range.el, gnus-salt.el:
+       * gnus-setup.el, gnus-soup.el, gnus-undo.el, gnus-vm.el:
+       * messcompat.el, nnbabyl.el, nndir.el, nneething.el:
+       * nngateway.el, nnheaderxm.el, nnkiboze.el, nnlistserv.el:
+       * nnmbox.el, nnmh.el, nnoo.el, nnsoup.el, nnspool.el, rfc2045.el:
+       * rfc2231.el, uudecode.el: Fix copyright notice.
+
+       * nnweb.el (toplevel): To make the file bootstrap in Emacs,
+       require `w3' at load-time only if not running in batch mode.
+
+2000-12-19 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el: Before merge with Emacs21.
+
 2000-12-19  Raymond Scholz <ray-2000@zonix.de>
 
        * gnus-art.el (gnus-article-dumbquotes-map): Add EUR symbol.
index 1a181a3..81f8f96 100644 (file)
 
 (eval-when-compile (require 'cl))
 
-(if (not (fboundp 'char-int))
-    (defalias 'char-int 'identity))
+(eval-when-compile
+  (defalias 'binhex-char-int
+    (if (fboundp 'char-int)
+       'char-int
+      'identity)))
 
 (defvar binhex-decoder-program "hexbin"
   "*Non-nil value should be a string that names a uu decoder.
@@ -132,14 +135,14 @@ input and write the converted data to its standard output.")
 (defun binhex-string-big-endian (string)
   (let ((ret 0) (i 0) (len (length string)))
     (while (< i len)
-      (setq ret (+ (lsh ret 8) (char-int (aref string i)))
+      (setq ret (+ (lsh ret 8) (binhex-char-int (aref string i)))
            i (1+ i)))
     ret))
 
 (defun binhex-string-little-endian (string)
   (let ((ret 0) (i 0) (shift 0) (len (length string)))
     (while (< i len)
-      (setq ret (+ ret (lsh (char-int (aref string i)) shift))
+      (setq ret (+ ret (lsh (binhex-char-int (aref string i)) shift))
            i (1+ i)
            shift (+ shift 8)))
     ret))
@@ -149,11 +152,11 @@ input and write the converted data to its standard output.")
     (let ((pos (point-min)) len)
       (vector
        (prog1
-          (setq len (char-int (char-after pos)))
+          (setq len (binhex-char-int (char-after pos)))
         (setq pos (1+ pos)))
        (buffer-substring pos (setq pos (+ pos len)))
        (prog1
-          (setq len (char-int (char-after pos)))
+          (setq len (binhex-char-int (char-after pos)))
         (setq pos (1+ pos)))
        (buffer-substring pos (setq pos (+ pos 4)))
        (buffer-substring pos (setq pos (+ pos 4)))
@@ -260,9 +263,9 @@ If HEADER-ONLY is non-nil only decode header and return filename."
   "Binhex decode region between START and END using external decoder."
   (interactive "r")
   (let ((cbuf (current-buffer)) firstline work-buffer status
-       (file-name (concat binhex-temporary-file-directory
-                          (binhex-decode-region start end t)
-                          ".data")))
+       (file-name (expand-file-name
+                   (concat (binhex-decode-region start end t) ".data")
+                   binhex-temporary-file-directory)))
     (save-excursion
       (goto-char start)
       (when (re-search-forward binhex-begin-line nil t)
diff --git a/lisp/catchup.pbm b/lisp/catchup.pbm
new file mode 100644 (file)
index 0000000..3fc571b
Binary files /dev/null and b/lisp/catchup.pbm differ
diff --git a/lisp/catchup.xpm b/lisp/catchup.xpm
new file mode 100644 (file)
index 0000000..832c4eb
--- /dev/null
@@ -0,0 +1,73 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 43 1",
+"  c Gray0",
+". c #099909990999",
+"X c Gray6",
+"o c #133313331333",
+"O c Gray9",
+"+ c Gray11",
+"@ c Gray12",
+"# c #23f323f323f3",
+"$ c Gray15",
+"% c #2ff12ff12ff1",
+"& c #3fff3fff3fff",
+"* c Gray25",
+"= c #4ccc4ccc4ccc",
+"- c #519151915191",
+"; c #53ed53ed53ed",
+": c #565b565b565b",
+"> c Gray35",
+", c #5b1a5b1a5b1a",
+"< c #5fe95fe95fe9",
+"1 c #626262626262",
+"2 c Gray40",
+"3 c #67e767e767e7",
+"4 c Gray42",
+"5 c #6fff6fff6fff",
+"6 c Gray45",
+"7 c Gray46",
+"8 c #77e977e977e9",
+"9 c #7bdb7bdb7bdb",
+"0 c #7ccc7ccc7ccc",
+"q c Gray50",
+"w c #866586658665",
+"e c Gray56",
+"r c Gray60",
+"t c #9bcb9bcb9bcb",
+"y c #9fff9fff9fff",
+"u c #a7c7a7c7a7c7",
+"i c #af0eaf0eaf0e",
+"p c Gray70",
+"a c Gray75",
+"s c Gray81",
+"d c #dfffdfffdfff",
+"f c #efffefffefff",
+"g c Gray100",
+/* pixels */
+"aaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaa7$$*uaaaaaaaaareep",
+"aaaaaa$rr6<aaaaaaaae;==>",
+"aaaaaa7<r6<aaaaaaaa<6rr$",
+"9&&&&&&>6;aaaareeeee#rw*",
+"&aqqagga@<<<7e7qqqqqq=:u",
+"33e4qgggsaa%1Oa&&&ggge<a",
+"17a9ygf7%%%%#=$aa%ggga<a",
+"7aa&gga<aaaae$>ae7ggya<a",
+"aa;sgg;uaaaapepa<agg&a<a",
+"au;&&&%aaaaaaaae<aaa;a6.",
+"a<aggg%aaaaaaaa3qqq&e<:o",
+"r7<5gg%aaaaaaaaXyggqeaue",
+"6gs$6fa=re6666=s@egy3rrr",
+"ga>r=aa=r6 <qqdd3=yg&rrr",
+"&>er=aa=r6 aggg=wr&g&rrr",
+"rrrrr$a<:6 @$$$rri=d5qrr",
+"rrrrr<===6$wrrrrrr6&qo6r",
+"rrrrrrrrrewrrrrrrr6   oq",
+"rrrrrrrrrrrrrrrrrrrrrrrr",
+"rrrrrrrrrrrrrrrrrrrrrrrr",
+"rrrrrrrrrrrrrrrrrrrrrrrr"
+};
diff --git a/lisp/cu-exit.pbm b/lisp/cu-exit.pbm
new file mode 100644 (file)
index 0000000..210869c
Binary files /dev/null and b/lisp/cu-exit.pbm differ
diff --git a/lisp/cu-exit.xpm b/lisp/cu-exit.xpm
new file mode 100644 (file)
index 0000000..bc051f8
--- /dev/null
@@ -0,0 +1,64 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 34 1",
+"  c Gray0",
+". c #0bfb0bfb0bfb",
+"X c Gray6",
+"o c Gray9",
+"O c Gray11",
+"+ c Gray12",
+"@ c #23f323f323f3",
+"# c Gray15",
+"$ c #2ff52ff52ff5",
+"% c #3fff3fff3fff",
+"& c Gray25",
+"* c Gray28",
+"= c #4ccc4ccc4ccc",
+"- c #53e853e853e8",
+"; c #5b1a5b1a5b1a",
+": c #5fef5fef5fef",
+"> c #67e767e767e7",
+", c Gray42",
+"< c #6ff76ff76ff7",
+"1 c #77dc77dc77dc",
+"2 c Gray50",
+"3 c #866586658665",
+"4 c #88a888a888a8",
+"5 c Gray56",
+"6 c Gray60",
+"7 c #9bcb9bcb9bcb",
+"8 c #9fff9fff9fff",
+"9 c #a7d7a7d7a7d7",
+"0 c Gray70",
+"q c #b635b635b635",
+"w c Gray75",
+"e c Gray78",
+"r c #dfffdfffdfff",
+"t c Gray100",
+/* pixels */
+"wwwwwwwwwwwwwwwwwwwwwwww",
+"wwwwwwwwwwwwwwwwwwwwwwww",
+"wwwwwwwwwwwwwwwwwwwwwwww",
+"wwwwwwwwwwwwwwwwwwwwwwww",
+"wwwwwwwwwwwwwwwwwwwwwwww",
+"wwwwwwwwwww-$$$-wwwwwwww",
+"wwwwwww9-$w$ttt$wwwwwwww",
+"wwwwww:<ro:1ttto::wwwwww",
+"wwww1$wrt5 wttt$w$$1wwww",
+"wwww1.ttt5 5ww$ttt.1wwww",
+"wwwww$8tt+222% 222$wwwww",
+"wwwww$%tt%ttt2 ww$6wwwww",
+"wwwww$52t%ttt2wtt%wwwwww",
+"wwwww1 %r%ttt2w22>wwwwww",
+"wwwwww,::X%%%+$w:5wwwwww",
+"qqqqqq4*5%t%t255;qqqqqqq",
+"6666663#*+2+2%**=6666666",
+"6666666=0$w$0*0&36666666",
+"6666666=,$9@5*,#66666666",
+"6666666= +% 2% #66666666",
+"6666666= %e@<2 #66666666",
+"6666666:#     +666666666",
+"666666666=====3666666666",
+"666666666666666666666666"
+};
diff --git a/lisp/describe-group.pbm b/lisp/describe-group.pbm
new file mode 100644 (file)
index 0000000..de7bf11
Binary files /dev/null and b/lisp/describe-group.pbm differ
diff --git a/lisp/describe-group.xpm b/lisp/describe-group.xpm
new file mode 100644 (file)
index 0000000..e191277
--- /dev/null
@@ -0,0 +1,72 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 42 1",
+"  c Gray0",
+". c #099909990999",
+"X c #0bfb0bfb0bfb",
+"o c #133313331333",
+"O c Gray9",
+"+ c Gray11",
+"@ c #23f323f323f3",
+"# c Gray15",
+"$ c #2d8d2d8d2d8d",
+"% c #399939993999",
+"& c #433243324332",
+"* c #4ccc4ccc4ccc",
+"= c #519151915191",
+"- c #53e353e353e3",
+"; c #565656565656",
+": c Gray36",
+"> c #5fdf5fdf5fdf",
+", c Gray42",
+"< c #6fff6fff6fff",
+"1 c Gray45",
+"2 c #77f777f777f7",
+"3 c #7ccc7ccc7ccc",
+"4 c Gray50",
+"5 c #865a865a865a",
+"6 c Gray58",
+"7 c Gray60",
+"8 c #9bfb9bfb9bfb",
+"9 c Gray62",
+"0 c #9fff9fff9fff",
+"q c #a0c0a0c0a0c0",
+"w c Gray64",
+"e c Gray65",
+"r c Gray70",
+"t c #b635b635b635",
+"y c Gray73",
+"u c Gray75",
+"i c #d332d332d332",
+"p c Gray85",
+"a c #e665e665e665",
+"s c #eccbeccbeccb",
+"d c #f998f998f998",
+"f c Gray100",
+/* pixels */
+"&77&77&77&77&77&77&77&77",
+"777777777777777777777777",
+"77777777777777777iaaa777",
+"&77&77&77&77&77<ff<fffp0",
+"77777777777777uffffffffp",
+"7777777777777udfffffffff",
+"&77&77&77&77<ff<ff<ff<ff",
+"777777777777ffffffffffff",
+"777777777777ffffffffffff",
+"&77&77&77&77<ff<ff<ff<ff",
+"777777777777ffffffffffff",
+"777777777777ffffffffffff",
+"&77&77&77&77:ff<ff<ff<ff",
+"777777777777rfffffffffff",
+"77777&##37770pffffffffff",
+"&77%-6ty-#77&7i<ff<ff<fs",
+"777*5w7wy*17777pffffffae",
+"777$13&7w+*77770rsfffre7",
+"&73X:@3*1 *7&77&77&77&77",
+"71o2;o***o17777777777777",
+"3o,**X%*X377777777777777",
+"XO,  +##3&77&77&77&77&77",
+":;o #50w7777777777777777",
+"@oX+57707777777777777777"
+};
index 1fe7d9e..7c42e8b 100644 (file)
@@ -1,7 +1,11 @@
 ;;; earcon.el --- Sound effects for messages
-;; Copyright (C) 1996 Free Software Foundation
+
+;; Copyright (C) 1996, 2000 Free Software Foundation
 
 ;; Author: Steven L. Baur <steve@miranova.com>
+
+;; This file is part of GNU Emacs.
+
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation; either version 2, or (at your option)
diff --git a/lisp/exit-gnus.pbm b/lisp/exit-gnus.pbm
new file mode 100644 (file)
index 0000000..32ad0e0
Binary files /dev/null and b/lisp/exit-gnus.pbm differ
diff --git a/lisp/exit-gnus.xpm b/lisp/exit-gnus.xpm
new file mode 100644 (file)
index 0000000..d910b55
--- /dev/null
@@ -0,0 +1,76 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 46 1",
+"  c Gray0",
+". c Gray6",
+"X c #133313331333",
+"o c Gray11",
+"O c Gray12",
+"+ c Gray15",
+"@ c #2ff82ff82ff8",
+"# c Gray20",
+"$ c #399939993999",
+"% c #3fff3fff3fff",
+"& c Gray25",
+"* c Gray28",
+"= c #4ccc4ccc4ccc",
+"- c #53e353e353e3",
+"; c #565e565e565e",
+": c #5b1a5b1a5b1a",
+"> c #5ff55ff55ff5",
+", c #626262626262",
+"< c Gray40",
+"1 c #67e767e767e7",
+"2 c Gray42",
+"3 c #6ff96ff96ff9",
+"4 c Gray45",
+"5 c #77d777d777d7",
+"6 c #7ccc7ccc7ccc",
+"7 c Gray50",
+"8 c Gray56",
+"9 c #97f797f797f7",
+"0 c Gray60",
+"q c #9bd19bd19bd1",
+"w c #9ff29ff29ff2",
+"e c #a7cba7cba7cb",
+"r c Gray67",
+"t c #afd5afd5afd5",
+"y c Gray70",
+"u c Gray75",
+"i c #c3c3c3c3c3c3",
+"p c Gray78",
+"a c #cbcbcbcbcbcb",
+"s c Gray81",
+"d c #d7d8d7d8d7d8",
+"f c #dff2dff2dff2",
+"g c Gray89",
+"h c #e7e7e7e7e7e7",
+"j c #eff8eff8eff8",
+"k c Gray100",
+/* pixels */
+"kkkkkkkkkufkkkku7skkkkkk",
+"kkkkkkkkw>%fkkw 7kkkkkkk",
+"kk3%wkkksu ukk%u7skkkkkk",
+"kww>>@@uu3f@8 @@7.@Owskk",
+"kkwf777%>77O> >>%7777wkk",
+"kkkkkss7j8O.@ 8jujsfjkkk",
+"kkkjuuwO @> @>@@ujkkkkkk",
+"kkk>%O77O$ > %f  >kkkkkk",
+"kkk87sj7<=u>@7s8>@%wkkkk",
+"kkkkkkq==u>>u ukk3u7kkkk",
+"7uwfuw+=>u u> >fuw7uwwuf",
+"8twut#>:8q q8* uprwswwtu",
+"ipuge&,5uq5uau-@uuuuuadu",
+"psuu>4@uuuuuduu5uuduuuuu",
+"uugu>4@uuguuuuuuuuauuuuu",
+"uuuy:>-uuuuuuugguaaugguu",
+"psu8=+uuuuspuuuuudduuuuu",
+"ipu8=+uuujfhguuuuuudauuu",
+"ue82=+8euuuuishspujdgguu",
+"e@$$+X=;>uu5ttp9sduuuuuu",
+"&4$8$ 7=4@@5y>qejdjduuuu",
+";$4O4444444O@eye5@uuusfd",
+">>>>3<>@*<3>@wp9f7uuufsd",
+"uuujfhgedhfjqpswsiuuuuuu"
+};
diff --git a/lisp/exit-summ.pbm b/lisp/exit-summ.pbm
new file mode 100644 (file)
index 0000000..d019231
Binary files /dev/null and b/lisp/exit-summ.pbm differ
diff --git a/lisp/exit-summ.xpm b/lisp/exit-summ.xpm
new file mode 100644 (file)
index 0000000..00caf53
--- /dev/null
@@ -0,0 +1,45 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 15 1",
+"  c Gray0",
+". c #0bfb0bfb0bfb",
+"X c Gray9",
+"o c #23f323f323f3",
+"O c #2fef2fef2fef",
+"+ c Gray28",
+"@ c #53e353e353e3",
+"# c #5fdf5fdf5fdf",
+"$ c Gray42",
+"% c #77d777d777d7",
+"& c Gray56",
+"* c #9bcb9bcb9bcb",
+"= c #a7c7a7c7a7c7",
+"- c Gray70",
+"; c Gray75",
+/* pixels */
+"@;;@;;@;;@;;@;;@;;@;;@;;",
+";;;;;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;;;;",
+"@;;@;;&=@OOOo     O;;@;;",
+";;;;;;X&;;;;=##   O;;;;;",
+";;;;;;.%;;;;;;;   O;;;;;",
+"@;;@;;@;;@;;*;;   O;;@;;",
+";;;;;;;;;;;;%;;   O;;;;;",
+";;;;;;O%;;;;;;;   O;;;;;",
+"@;;@;;o=;@;;-&-   O;;@;;",
+";;;;;;X&;;;;+ &   O;;;;;",
+";;;;;;.%;;;;$ &   O;;;;;",
+"@;;@;;o=;@;;;;;   O;;@;;",
+";;;;;;X&;;;;;;;   O;;;;;",
+";;;;;;*;;;;;@;;   O;;;;;",
+"@;;@;;&=;@;;;;;   O;;@;;",
+";;;;;; #;;;;;&#XO+O;;;;;",
+";;;;;;o=;*OO*#o%#+*;;;;;",
+"@;;@;@;%OOOO@%*@%*@;;@;;",
+";;;;;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;;;;",
+"@;;@;;@;;@;;@;;@;;@;;@;;",
+";;;;;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;;;;"
+};
index 80e122a..64946f9 100644 (file)
@@ -1,22 +1,26 @@
 ;;; flow-fill.el --- interprete RFC2646 "flowed" text
+
 ;; Copyright (C) 2000 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <jas@pdc.kth.se>
 ;; Keywords: mail
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2 of the License, or
-;; (at your option) any later version.
-;;
-;; This program is distributed in the hope that it will be useful,
+;; 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 this program; if not, write to the Free Software
-;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+;; 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.
 
 ;;; Commentary:
 
diff --git a/lisp/followup.pbm b/lisp/followup.pbm
new file mode 100644 (file)
index 0000000..61be114
Binary files /dev/null and b/lisp/followup.pbm differ
diff --git a/lisp/followup.xpm b/lisp/followup.xpm
new file mode 100644 (file)
index 0000000..c7cd85a
--- /dev/null
@@ -0,0 +1,54 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 24 1",
+"  c Gray0",
+". c Gray6",
+"X c Gray9",
+"o c Gray12",
+"O c #2ff22ff22ff2",
+"+ c #3fff3fff3fff",
+"@ c Gray28",
+"# c #53ed53ed53ed",
+"$ c #5fee5fee5fee",
+"% c #67e767e767e7",
+"& c #6fff6fff6fff",
+"* c #77f077f077f0",
+"= c #7bdb7bdb7bdb",
+"- c Gray50",
+"; c Gray56",
+": c #9bd79bd79bd7",
+"> c #9fff9fff9fff",
+", c #a7c7a7c7a7c7",
+"< c Gray70",
+"1 c Gray75",
+"2 c Gray81",
+"3 c #dfffdfffdfff",
+"4 c #efffefffefff",
+"5 c Gray100",
+/* pixels */
+"<,1<,1<,1<,1<,1<,1<,1<,1",
+",;1,;1,;1,;1,;1,;1,;1,;1",
+"111111111111111111111111",
+"<,1<,1<,1<,:=+.<,1<,1<,1",
+",;1,;1,;1;O*>5+$;1,;1,;1",
+"11111111##142+>O11111111",
+"<,1<,:=+2555 o2#,1<,1<,1",
+",;1;O*>5555>-151$1,;1,;1",
+"111<@15555525554*:111111",
+"<,1<$:5555555555>=<,1<,1",
+",;1,;*>553--55555+,;1,;1",
+"111111=>&$1O555552#11111",
+"<,111:=+241$+55555#,1<,1",
+",;1,$*>55$ 1+555551$1,;1",
+"11##14555 $4>>55554*:111",
+"<@155555&5551-55555>=<,1",
+",O15555555553-355551o,;1",
+"1,#55555555553$555+%;111",
+"<,#25555555555&1*O<,1<,1",
+",;1+55555555555X;1,;1,;1",
+"111=>5555555555:*1111111",
+"<,1:*45555555552%<<,1<,1",
+",;11$15555555555-;,;1,;1",
+"1111,#55555555553#111111"
+};
diff --git a/lisp/fuwo.pbm b/lisp/fuwo.pbm
new file mode 100644 (file)
index 0000000..b81af10
Binary files /dev/null and b/lisp/fuwo.pbm differ
diff --git a/lisp/fuwo.xpm b/lisp/fuwo.xpm
new file mode 100644 (file)
index 0000000..e860d95
--- /dev/null
@@ -0,0 +1,53 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 23 1",
+"  c Gray0",
+". c Gray6",
+"X c Gray9",
+"o c Gray12",
+"O c #2fef2fef2fef",
+"+ c #3fff3fff3fff",
+"@ c #53ee53ee53ee",
+"# c #5fe85fe85fe8",
+"$ c #67e767e767e7",
+"% c #6fff6fff6fff",
+"& c #77ea77ea77ea",
+"* c #7bdb7bdb7bdb",
+"= c Gray50",
+"- c Gray56",
+"; c #9bd69bd69bd6",
+": c #9fff9fff9fff",
+"> c #a7c7a7c7a7c7",
+", c Gray70",
+"< c Gray75",
+"1 c Gray81",
+"2 c #dfffdfffdfff",
+"3 c #efffefffefff",
+"4 c Gray100",
+/* pixels */
+",><,><,><,><,><,><,><,><",
+">-<>-<>-<>-<>-<>-<>-<>-<",
+"<<<<<<<<<<<<<<<<<<<<<<<<",
+",><,><,><,><,><,><,><,><",
+">-<>-<>-<>-<>-<>-<>-<>-<",
+"<<<<<<<<<<<<;O;<<<<<<<<<",
+",><,><,><,>< X;,><,><,><",
+">-<>-<>-<>-&#-<>-<>-<>-<",
+"<<<<<<<<<<<;<<<<<<<<<<<<",
+",><,><,><,><,><,><,><,><",
+">-<>-<>-<-O>>-<>-<>-<>-<",
+"<<<<<<<<@@<@<<<<<<<<<<<<",
+",><<<;*+1<<#;<<,><,><,><",
+">-<>#&:<==+#&-<>-<>-<>-<",
+"<<@@<3+=<1o <#<<<<<<<<<<",
+",>O<=+444:+.4=-,><,><,><",
+">-O=<4444:4::<$>-<>-<>-<",
+"<&;444444444+4+<<<<<<<<<",
+",#;444444444<=4O<<,><,><",
+">-O4444444442=2&-<>-<>-<",
+"<<;%444444444=<<#<<<<<<<",
+",><@2444444444+4=-,><,><",
+">-<-=444444444::<$>-<>-<",
+"<<<,$1444444444+4+<<<<<<"
+};
diff --git a/lisp/get-news.pbm b/lisp/get-news.pbm
new file mode 100644 (file)
index 0000000..c008071
Binary files /dev/null and b/lisp/get-news.pbm differ
diff --git a/lisp/get-news.xpm b/lisp/get-news.xpm
new file mode 100644 (file)
index 0000000..b9ad760
--- /dev/null
@@ -0,0 +1,68 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 38 1",
+"  c Gray0",
+". c #0bfb0bfb0bfb",
+"X c Gray6",
+"o c #133313331333",
+"O c Gray9",
+"+ c Gray11",
+"@ c Gray12",
+"# c #23f323f323f3",
+"$ c Gray15",
+"% c #2ff32ff32ff3",
+"& c #399939993999",
+"* c #3fff3fff3fff",
+"= c Gray25",
+"- c #433243324332",
+"; c Gray28",
+": c #4ccc4ccc4ccc",
+"> c #519151915191",
+", c #53e753e753e7",
+"< c #565a565a565a",
+"1 c Gray35",
+"2 c #5b1a5b1a5b1a",
+"3 c #5fe55fe55fe5",
+"4 c Gray45",
+"5 c Gray46",
+"6 c #77d777d777d7",
+"7 c #7ccc7ccc7ccc",
+"8 c Gray50",
+"9 c #866586658665",
+"0 c Gray56",
+"q c Gray60",
+"w c #9bcb9bcb9bcb",
+"e c #9fff9fff9fff",
+"r c #a7c7a7c7a7c7",
+"t c Gray70",
+"y c Gray75",
+"u c Gray81",
+"i c #dfffdfffdfff",
+"p c Gray100",
+/* pixels */
+"0000000ryyyyyyyyyyyyyyyy",
+"@8888833yyyyyyyyyyyyyyyy",
+"*pppppy3yyyyyyyyyyyyyyyy",
+"*pppppy3yyyyyr=$$6yyyyyy",
+"*ppppp3%3yyyr<9qq36yyyyy",
+"*ppppp ;0>yy0:qqqq%yyyyy",
+"*pppppy @82tq>0qq8>yyyyy",
+"*pppppy%>q42y0>q42yyyyyy",
+"*pppppy3q=q8%%.=:#%6yyyy",
+"%yyyyy03y0:qqqqqqqq:0yyy",
+"33333330yr<9qqqqqqq42yyy",
+"yyyyyyyyyyr=qqqqqqqq$yyy",
+"yyyyyyyyyyyy$:%***$q$**X",
+"yyyyyyyyyyyy$:yppe3q$pp*",
+"yyyyyyyyyyyy$:ypp*q3qpp*",
+"yyyyyyyyyyyy$:yp8402upp*",
+"yyyyyyyyyyyyo$yi*&48ppp*",
+"yyyyyyyyyyy>4&u>00:ippp*",
+"yyyyyyyyyyy%q:00Oq%yyyy%",
+"yyyyyyyyyyy%q4:o<3&%3333",
+"yyyyyyyyyyy%qqq$9443yyyy",
+"yyyyyyyyyyy%44@0&4<3yyyy",
+"yyyyyyyyyyy6o$;r%&O0yyyy",
+"yyyyyyyyyyyy$:0y34%yyyyy"
+};
diff --git a/lisp/gnntg.pbm b/lisp/gnntg.pbm
new file mode 100644 (file)
index 0000000..2f5e526
Binary files /dev/null and b/lisp/gnntg.pbm differ
diff --git a/lisp/gnntg.xpm b/lisp/gnntg.xpm
new file mode 100644 (file)
index 0000000..ea2a723
--- /dev/null
@@ -0,0 +1,64 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 34 1",
+"  c Gray0",
+". c #099909990999",
+"X c #0bfb0bfb0bfb",
+"o c #133313331333",
+"O c Gray9",
+"+ c Gray11",
+"@ c #23f323f323f3",
+"# c Gray15",
+"$ c #2fef2fef2fef",
+"% c #399939993999",
+"& c #3fff3fff3fff",
+"* c Gray25",
+"= c #433243324332",
+"- c Gray28",
+"; c #4ccc4ccc4ccc",
+": c #519151915191",
+"> c #566656665666",
+", c #5fed5fed5fed",
+"< c #626262626262",
+"1 c Gray42",
+"2 c Gray45",
+"3 c Gray46",
+"4 c #77d777d777d7",
+"5 c #7ccc7ccc7ccc",
+"6 c Gray50",
+"7 c #866586658665",
+"8 c Gray56",
+"9 c Gray60",
+"0 c #9bcb9bcb9bcb",
+"q c #a7c7a7c7a7c7",
+"w c Gray70",
+"e c Gray75",
+"r c #dfffdfffdfff",
+"t c Gray100",
+/* pixels */
+"w8888888weeeeeeeeeeeeeee",
+"8&66666&8eeeeeeeeeeeeeee",
+"86ttttt68eeeeeeeeeeeeeee",
+"86ttttt68eeeee0###0eeeee",
+"86ttttr&-4eee8:000:8eeee",
+"86tttte 144ee,20002,eeee",
+"86ttttt6 =,4e4<000<4eeee",
+"86ttttt6-,0,4e4,0,4eeeee",
+"86ttttt684,0<$$.,#$$0eee",
+"8,eeeee,8e,200000000#eee",
+"q,,,,,,,qe8:00000000,4ee",
+"eeeeeeeeeee0=000006,0$ee",
+"eeeeeeeeeeee8;00002;0$ee",
+"eeeeeeeeeeee8;00002;0$ee",
+"eeeeeeeeeeee8;00002;0$ee",
+"eeeeeeeeeeee8;00002;0$ee",
+"eeeeeeeeeeee8#;;;;%#;$ee",
+"eeeeeeeeeeee=2222+88@0ee",
+"eeeeeeeeeeee#00000.4$eee",
+"eeeeeeeeeeee#00720O,,eee",
+"eeeeeeeeeeee#002;02%8eee",
+"eeeeeeeeeeee+22$,>2%8eee",
+"eeeeeeeeeeee-#o48O%$qeee",
+"eeeeeeeeeeee8;#ee$2,eeee"
+};
index 1f5d756..3375b93 100644 (file)
@@ -82,12 +82,14 @@ If nil, only read articles will be expired."
 
 (defcustom gnus-agent-confirmation-function 'y-or-n-p
   "Function to confirm when error happens."
+  :version "21.1"
   :group 'gnus-agent
   :type 'function)
 
 (defcustom gnus-agent-synchronize-flags 'ask
   "Indicate if flags are synchronized when you plug in.
 If this is `ask' the hook will query the user."
+  :version "21.1"
   :type '(choice (const :tag "Always" t)
                 (const :tag "Never" nil)
                 (const :tag "Ask" ask))
@@ -170,7 +172,9 @@ If this is `ask' the hook will query the user."
 
 (defun gnus-agent-lib-file (file)
   "The full path of the Gnus agent library FILE."
-  (concat (gnus-agent-directory) "agent.lib/" file))
+  (expand-file-name file
+                   (file-name-as-directory
+                    (expand-file-name "agent.lib" (gnus-agent-directory)))))
 
 ;;; Fetching setup functions.
 
@@ -1026,14 +1030,14 @@ the actual number of articles toggled is returned."
   (setq gnus-agent-article-alist
        (gnus-agent-read-file
         (if dir
-            (concat dir ".agentview")
+            (expand-file-name ".agentview" dir)
           (gnus-agent-article-name ".agentview" group)))))
 
 (defun gnus-agent-save-alist (group &optional articles state dir)
   "Save the article-state alist for GROUP."
   (let ((file-name-coding-system nnmail-pathname-coding-system))
       (with-temp-file (if dir
-                         (concat dir ".agentview")
+                         (expand-file-name ".agentview" dir)
                        (gnus-agent-article-name ".agentview" group))
        (princ (setq gnus-agent-article-alist
                     (nconc gnus-agent-article-alist
@@ -1043,8 +1047,10 @@ the actual number of articles toggled is returned."
        (insert "\n"))))
 
 (defun gnus-agent-article-name (article group)
-  (concat (gnus-agent-directory) (gnus-agent-group-path group) "/"
-         (if (stringp article) article (string-to-number article))))
+  (expand-file-name (if (stringp article) article (string-to-number article))
+                   (file-name-as-directory
+                    (expand-file-name (gnus-agent-group-path group)
+                                      (gnus-agent-directory)))))
 
 (defun gnus-agent-batch-confirmation (msg)
   "Show error message and return t."
index d2370ca..82e02b5 100644 (file)
@@ -226,6 +226,15 @@ asynchronously.     The compressed face will be piped to this command."
   "Banner alist for stripping.
 For example, 
      ((egroups . \"^[ \\t\\n]*-------------------+\\\\( eGroups Sponsor -+\\\\)?....\\n\\\\(.+\\n\\\\)+\"))"
+  :version "21.1"
+  :type '(repeat (cons symbol regexp))
+  :group 'gnus-article-washing)
+
+(defcustom gnus-article-banner-alist nil
+  "Banner alist for stripping.
+For example, 
+     ((egroups . \"^[ \\t\\n]*-------------------+\\\\( eGroups Sponsor -+\\\\)?....\\n\\\\(.+\\n\\\\)+\"))"
+  :version "21.1"
   :type '(repeat (cons symbol regexp))
   :group 'gnus-article-washing)
 
@@ -270,6 +279,7 @@ is the face used for highlighting."
 Typical values are \"^[ \\t]+\\\\|[ \\t]*\\n\" and \"[ \\t]+\\\\|[ \\t]*\\n\".
 The former avoids underlining of leading and trailing whitespace,
 and the latter avoids underlining any whitespace at all."
+  :version "21.1"
   :group 'gnus-article-emphasis
   :type 'regexp)
 
@@ -616,11 +626,13 @@ displayed by the first non-nil matching CONTENT face."
 
 (defcustom gnus-ignored-mime-types nil
   "List of MIME types that should be ignored by Gnus."
+  :version "21.1"
   :group 'gnus-article-mime
   :type '(repeat regexp))
 
 (defcustom gnus-unbuttonized-mime-types '(".*/.*")
   "List of MIME types that should not be given buttons when rendered inline."
+  :version "21.1"
   :group 'gnus-article-mime
   :type '(repeat regexp))
 
@@ -632,13 +644,17 @@ on parts -- for instance, adding Vcard info to a database."
   :type 'function)
 
 (defcustom gnus-mime-multipart-functions nil
-  "An alist of MIME types to functions to display them.")
+  "An alist of MIME types to functions to display them."
+  :version "21.1"
+  :group 'gnus-article-mime
+  :type 'alist)
 
 (defcustom gnus-article-date-lapsed-new-header nil
   "Whether the X-Sent and Date headers can coexist.
 When using `gnus-treat-date-lapsed', the \"X-Sent:\" header will
 either replace the old \"Date:\" header (if this variable is nil), or
 be added below it (otherwise)."
+  :version "21.1"
   :group 'gnus-article-headers
   :type 'boolean)
 
@@ -650,6 +666,7 @@ part or alternative part is used.  For `undisplayed', the first
 undisplayed part is used.  For a function, the first part which 
 the function return `t' is used.  For `nil', the first part is
 used."
+  :version "21.1"
   :group 'gnus-article-mime
   :type '(choice 
          (item :tag "first" :value nil)
@@ -674,6 +691,21 @@ used."
   :type '(repeat (cons (string :tag "name")
                       (function))))
 
+(defcustom gnus-mime-action-alist
+  '(("save to file" . gnus-mime-save-part)
+    ("display as text" . gnus-mime-inline-part)
+    ("view the part" . gnus-mime-view-part)
+    ("pipe to command" . gnus-mime-pipe-part)
+    ("toggle display" . gnus-article-press-button)
+    ("view as type" . gnus-mime-view-part-as-type)
+    ("internalize type" . gnus-mime-internalize-part)
+    ("externalize type" . gnus-mime-externalize-part))
+  "An alist of actions that run on the MIME attachment."
+  :version "21.1"
+  :group 'gnus-article-mime
+  :type '(repeat (cons (string :tag "name")
+                      (function))))
+
 ;;;
 ;;; The treatment variables
 ;;;
@@ -781,10 +813,18 @@ See the manual for details."
   :group 'gnus-article-treat
   :type gnus-article-treat-custom)
 
+(defcustom gnus-treat-hide-citation-maybe nil
+  "Hide cited text.
+Valid values are nil, t, `head', `last', an integer or a predicate.
+See the manual for details."
+  :group 'gnus-article-treat
+  :type gnus-article-treat-custom)
+
 (defcustom gnus-treat-strip-list-identifiers 'head
   "Strip list identifiers from `gnus-list-identifiers`.
 Valid values are nil, t, `head', `last', an integer or a predicate.
 See the manual for details."
+  :version "21.1"
   :group 'gnus-article-treat
   :type gnus-article-treat-custom)
 
@@ -858,6 +898,7 @@ See the manual for details."
   "Display the date in the ISO8601 format.
 Valid values are nil, t, `head', `last', an integer or a predicate.
 See the manual for details."
+  :version "21.1"
   :group 'gnus-article-treat
   :type gnus-article-treat-head-custom)
 
@@ -873,6 +914,7 @@ See the manual for details."
   "Strip the X-No-Archive header line from the beginning of the body.
 Valid values are nil, t, `head', `last', an integer or a predicate.
 See the manual for details."
+  :version "21.1"
   :group 'gnus-article-treat
   :type gnus-article-treat-custom)
 
@@ -943,6 +985,7 @@ See the manual for details."
   "Capitalize sentence-starting words.
 Valid values are nil, t, `head', `last', an integer or a predicate.
 See the manual for details."
+  :version "21.1"
   :group 'gnus-article-treat
   :type gnus-article-treat-custom)
 
@@ -957,6 +1000,7 @@ See the manual for details."
   "Play sounds.
 Valid values are nil, t, `head', `last', an integer or a predicate.
 See the manual for details."
+  :version "21.1"
   :group 'gnus-article-treat
   :type gnus-article-treat-custom)
 
@@ -964,6 +1008,7 @@ See the manual for details."
   "Translate articles from one language to another.
 Valid values are nil, t, `head', `last', an integer or a predicate.
 See the manual for details."
+  :version "21.1"
   :group 'gnus-article-treat
   :type gnus-article-treat-custom)
 
@@ -2747,6 +2792,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
 
     (easy-menu-define
      gnus-article-treatment-menu gnus-article-mode-map ""
+     ;; Fixme: this should use :active (and maybe :visible).
      '("Treatment"
        ["Hide headers" gnus-article-hide-headers t]
        ["Hide signature" gnus-article-hide-signature t]
@@ -2771,6 +2817,9 @@ If variable `gnus-use-long-file-name' is non-nil, it is
   (when (boundp 'gnus-summary-post-menu)
     (easy-menu-add gnus-summary-post-menu gnus-article-mode-map)))
 
+;; Fixme: do something for the Emacs tool bar in Article mode a la
+;; Summary.
+
 (defun gnus-article-mode ()
   "Major mode for displaying an article.
 
@@ -3041,7 +3090,8 @@ If ALL-HEADERS is non-nil, no headers are hidden."
 
 (defvar gnus-mime-button-map
   (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map gnus-article-mode-map)
+    ;; Not for Emacs 21: fixme better.
+    ;; (set-keymap-parent map gnus-article-mode-map)
     (define-key map gnus-mouse-2 'gnus-article-push-button)
     (define-key map gnus-down-mouse-3 'gnus-mime-button-menu)
     (dolist (c gnus-mime-button-commands)
@@ -3302,7 +3352,6 @@ In no internal viewer is available, use an external viewer."
     (if action-pair
        (funcall (cdr action-pair)))))
 
-
 (defun gnus-article-part-wrapper (n function)
   (save-current-buffer
     (set-buffer gnus-article-buffer)
@@ -3468,12 +3517,13 @@ In no internal viewer is available, use an external viewer."
     (setq b (point))
     (gnus-eval-format
      gnus-mime-button-line-format gnus-mime-button-line-format-alist
-     `(local-map ,gnus-mime-button-map
-                keymap ,gnus-mime-button-map
-                gnus-callback gnus-mm-display-part
-                gnus-part ,gnus-tmp-id
-                article-type annotation
-                gnus-data ,handle))
+     `(keymap ,gnus-mime-button-map
+       ;; Not for Emacs 21: fixme better.
+       ;; local-map ,gnus-mime-button-map
+       gnus-callback gnus-mm-display-part
+       gnus-part ,gnus-tmp-id
+       article-type annotation
+       gnus-data ,handle))
     (setq e (point))
     (widget-convert-button
      'link b e
@@ -3715,7 +3765,8 @@ In no internal viewer is available, use an external viewer."
                       ',gnus-article-mime-handle-alist))
               (gnus-mime-display-alternative
                ',ihandles ',not-pref ',begend ,id))
-            local-map ,gnus-mime-button-map
+            ;; Not for Emacs 21: fixme better.
+            ;; local-map ,gnus-mime-button-map
             ,gnus-mouse-face-prop ,gnus-article-mouse-face
             face ,gnus-article-button-face
             keymap ,gnus-mime-button-map
@@ -3740,7 +3791,8 @@ In no internal viewer is available, use an external viewer."
                         ',gnus-article-mime-handle-alist))
                 (gnus-mime-display-alternative
                  ',ihandles ',handle ',begend ,id))
-              local-map ,gnus-mime-button-map
+              ;; Not for Emacs 21: fixme better.
+              ;; local-map ,gnus-mime-button-map
               ,gnus-mouse-face-prop ,gnus-article-mouse-face
               face ,gnus-article-button-face
               keymap ,gnus-mime-button-map
index 8aa8529..8906745 100644 (file)
@@ -32,6 +32,7 @@
 
 (defgroup gnus-audio nil
   "Playing sound in Gnus."
+  :version "21.1"
   :group 'gnus-visual
   :group 'multimedia)
 
@@ -43,7 +44,7 @@
 
 (defcustom gnus-audio-directory (nnheader-find-etc-directory "sounds")
   "The directory containing the Sound Files."
-  :type 'directory
+  :type '(choice directory (const nil))
   :group 'gnus-audio)
 
 (defcustom gnus-audio-au-player "/usr/bin/showaudio"
index 51a978e..293ea35 100644 (file)
@@ -36,7 +36,7 @@
   (require 'gnus-sum))
 
 (defcustom gnus-cache-active-file
-  (concat (file-name-as-directory gnus-cache-directory) "active")
+  (expand-file-name "active" gnus-cache-directory)
   "*The cache active file."
   :group 'gnus-cache
   :type 'file)
@@ -410,20 +410,22 @@ Returns the list of articles removed."
       (and (not unread) (not ticked) (not dormant) (memq 'read class))))
 
 (defun gnus-cache-file-name (group article)
-  (concat (file-name-as-directory gnus-cache-directory)
-         (file-name-as-directory
-          (nnheader-translate-file-chars
-           (if (gnus-use-long-file-name 'not-cache)
-               group
-             (let ((group (nnheader-replace-duplicate-chars-in-string
-                           (nnheader-replace-chars-in-string group ?/ ?_)
-                           ?. ?_)))
-               ;; Translate the first colon into a slash.
-               (when (string-match ":" group)
-                 (aset group (match-beginning 0) ?/))
-               (nnheader-replace-chars-in-string group ?. ?/)))
-           t))
-         (if (stringp article) article (int-to-string article))))
+  (expand-file-name
+   (if (stringp article) article (int-to-string article))
+   (file-name-as-directory
+    (expand-file-name
+     (nnheader-translate-file-chars
+      (if (gnus-use-long-file-name 'not-cache)
+         group
+       (let ((group (nnheader-replace-duplicate-chars-in-string
+                     (nnheader-replace-chars-in-string group ?/ ?_)
+                     ?. ?_)))
+         ;; Translate the first colon into a slash.
+         (when (string-match ":" group)
+           (aset group (match-beginning 0) ?/))
+         (nnheader-replace-chars-in-string group ?. ?/)))
+      t)
+     gnus-cache-directory))))
 
 (defun gnus-cache-update-article (group article)
   "If ARTICLE is in the cache, remove it and re-enter it."
index a2b68c1..acbd0bb 100644 (file)
@@ -1,8 +1,13 @@
-;;; gnus-cite.el --- parse citations in articles for Gnus
+;;; gnus-cite.el --- parse citations in articles for Gnus  -*- coding: iso-latin-1 -*-
+
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
 ;;        Free Software Foundation, Inc.
 
-;; Author: Per Abhiddenware; you can redistribute it and/or modify
+;; Author: Per Abhiddenware
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation; either version 2, or (at your option)
 ;; any later version.
index 74a3a0e..c735fe9 100644 (file)
@@ -156,7 +156,7 @@ All posts will be sent to the specified group.")
 
     (gcc-self (choice :tag  "GCC"
                      :value t
-                     (const t)
+                     (const :tag "To current group" t)
                      (const none)
                      (string :format "%v" :hide-front-space t)) "\
 Specify default value for GCC header.
@@ -169,11 +169,18 @@ is present and a string, this string will be inserted literally as a
 rules as described later).")
 
     (banner (choice :tag "Banner"
-                   (const signature)
-                   symbol
+                   :value nil
+                   (const :tag "Remove signature" signature)
+                   (symbol :tag "Item in `gnus-article-banner-alist'" none)
                    regexp
                    (const :tag "None" nil)) "\
-Regular expression matching banners to be removed from articles.")
+If non-nil, specify how to remove `banners' from articles.
+
+Symbol `signature' means to remove signatures delimited by
+`gnus-signature-separator'.  Any other symbol is used to look up a
+regular expression to match the banner in `gnus-article-banner-alist'.
+A string is used as a regular expression to match the banner
+directly.")
 
     (auto-expire (const :tag "Automatic Expire" t) "\
 All articles that are read will be marked as expirable.")
index 6991610..beeac96 100644 (file)
@@ -26,7 +26,9 @@
 
 ;;; Code:
 
-(eval-when-compile (require 'cl))
+(eval-when-compile
+  (require 'cl)
+  (require 'ring))
 
 ;;; Function aliases later to be redefined for XEmacs usage.
 
@@ -94,6 +96,7 @@
 (defvar gnus-tmp-name)
 (defvar gnus-tmp-closing-bracket)
 (defvar gnus-tmp-subject-or-nil)
+(defvar gnus-check-before-posting)
 
 (defun gnus-ems-redefine ()
   (cond
@@ -277,8 +280,4 @@ for XEmacs."
 
 (provide 'gnus-ems)
 
-;; Local Variables:
-;; byte-compile-warnings: '(redefine callargs)
-;; End:
-
 ;;; gnus-ems.el ends here
index afb16fc..a17e0ce 100644 (file)
@@ -1,5 +1,7 @@
 ;;; gnus-gl.el --- an interface to GroupLens for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Brad Miller <bmiller@cs.umn.edu>
 ;; Keywords: news, score
index 98df29b..e088377 100644 (file)
@@ -400,6 +400,7 @@ ticked: The number of ticked articles."
 For example:
     (((nntp \"news.com.cn\") . cn-gb-2312))
 "
+  :version "21.1"
   :group 'gnus-charset
   :type '(repeat (cons (sexp :tag "Method") (symbol :tag "Charset"))))
 
@@ -703,16 +704,20 @@ in the minibuffer prompt."
        ["Select" gnus-group-select-group (gnus-group-group-name)]
        ["See old articles" (gnus-group-select-group 'all)
        :keys "C-u SPC" :active (gnus-group-group-name)]
-       ["Catch up" gnus-group-catchup-current (gnus-group-group-name)]
+       ["Catch up" gnus-group-catchup-current :active (gnus-group-group-name)
+       :help "Mark unread articles in the current group as read"]
        ["Catch up all articles" gnus-group-catchup-current-all
        (gnus-group-group-name)]
        ["Check for new articles" gnus-group-get-new-news-this-group
-       (gnus-group-group-name)]
+       :active (gnus-group-group-name)
+       :help "Check for new messages in current group"]
        ["Toggle subscription" gnus-group-unsubscribe-current-group
        (gnus-group-group-name)]
-       ["Kill" gnus-group-kill-group (gnus-group-group-name)]
+       ["Kill" gnus-group-kill-group :active (gnus-group-group-name)
+       :help "Kill (remove) current group"]
        ["Yank" gnus-group-yank-group gnus-list-of-killed-groups]
-       ["Describe" gnus-group-describe-group (gnus-group-group-name)]
+       ["Describe" gnus-group-describe-group :active (gnus-group-group-name)
+       :help "Display description of the current group"]
        ["Fetch FAQ" gnus-group-fetch-faq (gnus-group-group-name)]
        ;; Actually one should check, if any of the marked groups gives t for
        ;; (gnus-check-backend-function 'request-expire-articles ...)
@@ -838,7 +843,8 @@ in the minibuffer prompt."
        ["Brew SOUP" gnus-group-brew-soup (fboundp 'gnus-soup-pack-packet)])
        ["Send a mail" gnus-group-mail t]
        ["Post an article..." gnus-group-post-news t]
-       ["Check for new news" gnus-group-get-new-news t]
+       ["Check for new news" gnus-group-get-new-news
+       :help "Get newly arrived articles"]
        ["Activate all groups" gnus-activate-all-groups t]
        ["Restart Gnus" gnus-group-restart t]
        ["Read init file" gnus-group-read-init-file t]
@@ -854,11 +860,40 @@ in the minibuffer prompt."
        ["Flush score cache" gnus-score-flush-cache t]
        ["Toggle topics" gnus-topic-mode t]
        ["Send a bug report" gnus-bug t]
-       ["Exit from Gnus" gnus-group-exit t]
+       ["Exit from Gnus" gnus-group-exit
+       :help "Quit reading news"]
        ["Exit without saving" gnus-group-quit t]))
 
     (gnus-run-hooks 'gnus-group-menu-hook)))
 
+(defvar gnus-group-toolbar-map nil)
+
+;; Emacs 21 tool bar.  Should be no-op otherwise.
+(defun gnus-group-make-tool-bar ()
+  (if (and (fboundp 'tool-bar-add-item-from-menu)
+          (default-value 'tool-bar-mode)
+          (not gnus-group-toolbar-map))
+      (setq gnus-group-toolbar-map
+           (let ((tool-bar-map (make-sparse-keymap)))
+             (tool-bar-add-item-from-menu
+              'gnus-group-get-new-news "get-news" gnus-group-mode-map)
+             (tool-bar-add-item-from-menu
+              'gnus-group-get-new-news-this-group "gnntg" gnus-group-mode-map)
+             (tool-bar-add-item-from-menu
+              'gnus-group-catchup-current "catchup" gnus-group-mode-map)
+             (tool-bar-add-item-from-menu
+              'gnus-group-describe-group "describe-group" gnus-group-mode-map)
+             (tool-bar-add-item "subscribe" 'gnus-group-subscribe 'subscribe
+                                :help "Subscribe to the current group")
+             (tool-bar-add-item "unsubscribe" 'gnus-group-unsubscribe
+                                'unsubscribe
+                                :help "Unsubscribe from the current group")
+             (tool-bar-add-item-from-menu
+              'gnus-group-exit "exit-gnus" gnus-group-mode-map)
+             tool-bar-map)))
+  (if gnus-group-toolbar-map
+      (set (make-local-variable 'tool-bar-map) gnus-group-toolbar-map)))
+
 (defun gnus-group-mode ()
   "Major mode for reading news.
 
@@ -877,9 +912,10 @@ The following commands are available:
 
 \\{gnus-group-mode-map}"
   (interactive)
-  (when (gnus-visual-p 'group-menu 'menu)
-    (gnus-group-make-menu-bar))
   (kill-all-local-variables)
+  (when (gnus-visual-p 'group-menu 'menu)
+    (gnus-group-make-menu-bar)
+    (gnus-group-make-tool-bar))
   (gnus-simplify-mode-line)
   (setq major-mode 'gnus-group-mode)
   (setq mode-name "Group")
@@ -2389,14 +2425,14 @@ mail messages or news articles in files that have numeric names."
     (while (or (not group) (gnus-gethash group gnus-newsrc-hashtb))
       (setq group
            (gnus-group-prefixed-name
-            (concat (file-name-as-directory (directory-file-name dir))
-                    ext)
+            (expand-file-name ext dir)
             '(nndir "")))
       (setq ext (format "<%d>" (setq i (1+ i)))))
     (gnus-group-make-group
      (gnus-group-real-name group)
      (list 'nndir (gnus-group-real-name group) (list 'nndir-directory dir)))))
 
+(eval-when-compile (defvar nnkiboze-score-file))
 (defun gnus-group-make-kiboze-group (group address scores)
   "Create an nnkiboze group.
 The user will be prompted for a name, a regexp to match groups, and
@@ -3326,7 +3362,7 @@ to use."
     (when current-prefix-arg
       (completing-read
        "Faq dir: " (and (listp gnus-group-faq-directory)
-                       (mapcar (lambda (file) (list file))
+                       (mapcar #'list
                                gnus-group-faq-directory))))))
   (unless group
     (error "No group name given"))
@@ -3337,7 +3373,7 @@ to use."
     (while (and (not found)
                (setq dir (pop dirs)))
       (let ((name (gnus-group-real-name group)))
-       (setq file (concat (file-name-as-directory dir) name)))
+       (setq file (expand-file-name name dir)))
       (if (not (file-exists-p file))
          (gnus-message 1 "No such file: %s" file)
        (let ((enable-local-variables nil))
index 509ace2..dfb0572 100644 (file)
@@ -70,8 +70,7 @@ If CONFIRM is non-nil, the user will be asked for an NNTP server."
                           (list 'nnmh-directory
                                 (file-name-as-directory
                                  (expand-file-name
-                                  (concat "~/" (substring
-                                                gnus-nntp-server 1)))))
+                                  (substring gnus-nntp-server 1) "~/")))
                           (list 'nnmh-get-new-mail nil)))
                    (t
                     (list 'nntp gnus-nntp-server)))))
index 7938fec..5eb0fd0 100644 (file)
@@ -1,23 +1,26 @@
-;;; gnus-ml.el --- Mailing list minor mode for gnus
+;;; gnus-ml.el --- Mailing list minor mode for Gnus
 
-;; Copyright (C) 2000 by Julien Gilles 
+;; Copyright (C) 2000 Free Software Foundation, Inc.
 
 ;; Author: Julien Gilles  <jgilles@free.fr>
 ;; Keywords: news
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2 of the License, or
-;; (at your option) any later version.
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program; if not, write to the Free Software
-;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+;; 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.
 
 ;;; Commentary:
 
index 1f657ba..52f60d3 100644 (file)
@@ -143,6 +143,7 @@ use this option with care."
 
 (defvar gnus-message-buffer "*Mail Gnus*")
 (defvar gnus-article-copy nil)
+(defvar gnus-check-before-posting nil)
 (defvar gnus-last-posting-server nil)
 (defvar gnus-message-group-art nil)
 
@@ -630,8 +631,9 @@ If SILENT, don't prompt the user."
 \f
 
 ;; Dummies to avoid byte-compile warning.
-(defvar nnspool-rejected-article-hook)
-(defvar xemacs-codename)
+(eval-when-compile
+  (defvar nnspool-rejected-article-hook)
+  (defvar xemacs-codename))
 
 (defun gnus-extended-version ()
   "Stringified Gnus version and Emacs version."
index 7d0be1d..d682451 100644 (file)
@@ -86,9 +86,10 @@ matches an previously scanned and verified nocem message."
   :group 'gnus-nocem
   :type 'boolean)
 
-(defcustom gnus-nocem-check-article-limit nil
+(defcustom gnus-nocem-check-article-limit 500
   "*If non-nil, the maximum number of articles to check in any NoCeM group."
   :group 'gnus-nocem
+  :version "21.1"
   :type '(choice (const :tag "unlimited" nil)
                 (integer 1000)))
 
@@ -97,6 +98,7 @@ matches an previously scanned and verified nocem message."
 Otherwise don't bother fetching articles unless their author matches a
 valid issuer, which is much faster if you are selective about the issuers."
   :group 'gnus-nocem
+  :version "21.1"
   :type 'boolean)
 
 ;;; Internal variables
index 5e0dc13..223a32e 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-range.el --- range and sequence functions for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
index 164be42..dd2aa1f 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-salt.el --- alternate summary mode interfaces for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
index a3442e3..c6ddb5b 100644 (file)
@@ -1102,8 +1102,7 @@ EXTRA is the possible non-standard header."
                                        gnus-kill-files-directory)))
                          (expand-file-name file))
                         file)
-                   (concat (file-name-as-directory gnus-kill-files-directory)
-                           file))))
+                   (expand-file-name file gnus-kill-files-directory))))
         (cached (assoc file gnus-score-cache))
         (global (member file gnus-internal-global-score-files))
         lists alist)
@@ -2566,7 +2565,7 @@ GROUP using BNews sys file syntax."
          ;; If short file names were used, we have to translate slashes.
          (goto-char (point-min))
          (let ((regexp (concat
-                        "[/:" (if trans (char-to-string trans) "") "]")))
+                        "[/:" (if trans (char-to-string trans)) "]")))
            (while (re-search-forward regexp nil t)
              (replace-match "." t t)))
          ;; Kludge to get rid of "nntp+" problems.
index 5bc7656..307aaaf 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-setup.el --- Initialization & Setup for Gnus 5
-;; Copyright (C) 1995, 96 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 2000 Free Software Foundation, Inc.
 
 ;; Author: Steven L. Baur <steve@miranova.com>
 ;; Keywords: news
 
 (eval-when-compile (require 'cl))
 
-(defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version))
-
 (defvar gnus-use-installed-gnus t
   "*If non-nil Use installed version of Gnus.")
 
-(defvar gnus-use-installed-tm running-xemacs
-  "*If non-nil use installed version of tm.")
-
-(defvar gnus-use-installed-mailcrypt running-xemacs
+(defvar gnus-use-installed-mailcrypt (featurep 'xemacs)
   "*If non-nil use installed version of mailcrypt.")
 
-(defvar gnus-emacs-lisp-directory (if running-xemacs
+(defvar gnus-emacs-lisp-directory (if (featurep 'xemacs)
                                      "/usr/local/lib/xemacs/"
                                    "/usr/local/share/emacs/")
   "Directory where Emacs site lisp is located.")
 
 (defvar gnus-gnus-lisp-directory (concat gnus-emacs-lisp-directory
-                                        "gnus-5.0.15/lisp/")
+                                        "gnus/lisp/")
   "Directory where Gnus Emacs lisp is found.")
 
-(defvar gnus-tm-lisp-directory (concat gnus-emacs-lisp-directory
-                                      "site-lisp/")
-  "Directory where TM Emacs lisp is found.")
-
 (defvar gnus-mailcrypt-lisp-directory (concat gnus-emacs-lisp-directory
-                                             "site-lisp/mailcrypt-3.4/")
+                                             "site-lisp/mailcrypt/")
   "Directory where Mailcrypt Emacs Lisp is found.")
 
 (defvar gnus-bbdb-lisp-directory (concat gnus-emacs-lisp-directory
-                                        "site-lisp/bbdb-1.51/")
+                                        "site-lisp/bbdb/")
   "Directory where Big Brother Database is found.")
 
 (defvar gnus-use-mhe nil
index de67cc7..1f43068 100644 (file)
@@ -1,5 +1,7 @@
 ;;; gnus-soup.el --- SOUP packet writing support for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <abraham@iesd.auc.dk>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
index 3878b8a..0b15c2c 100644 (file)
@@ -1,4 +1,4 @@
-;;; gnus-spec.el --- format spec functions for Gnus
+;;; gnus-spec.el --- format spec functions for Gnus  -*- coding: iso-latin-1 -*-
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000
 ;;        Free Software Foundation, Inc.
 
index f1b228d..418cef4 100644 (file)
@@ -197,6 +197,7 @@ Gnus always reads its own startup file, which is called
 be readily understood by other newsreaders.  If you don't plan on
 using other newsreaders, set this variable to nil to save some time on
 entry."
+  :version "21.1"
   :group 'gnus-newsrc
   :type 'boolean)
 
@@ -681,7 +682,7 @@ prompt the user for the name of an NNTP server to use."
       (cond
        ((featurep 'xemacs)
        (gnus-xmas-splash))
-       ((and (eq window-system 'x)
+       ((and window-system
             (= (frame-height) (1+ (window-height))))
        (gnus-x-splash))))
 
index 78df651..345b0fe 100644 (file)
 (require 'gnus-undo)
 (require 'gnus-util)
 (require 'mm-decode)
+;; Recursive :-(.
+;; (require 'gnus-art)
+(require 'nnoo)
 (autoload 'gnus-summary-limit-include-cached "gnus-cache" nil t)
 (autoload 'gnus-cache-write-active "gnus-cache")
 (autoload 'gnus-mailing-list-insinuate "gnus-ml" nil t)
+(autoload 'mm-uu-dissect "mm-uu")
 
 (defcustom gnus-kill-summary-on-exit t
   "*If non-nil, kill the summary buffer when you exit from it.
@@ -490,11 +494,13 @@ this variable specifies group names."
        gnus-low-score-mark gnus-ancient-mark gnus-read-mark
        gnus-souped-mark gnus-duplicate-mark)
   "*The list of marks converted into expiration if a group is auto-expirable."
+  :version "21.1"
   :group 'gnus-summary
   :type '(repeat character))
 
 (defcustom gnus-inhibit-user-auto-expire t
   "*If non-nil, user marking commands will not mark an article as expirable, even if the group has auto-expire turned on."
+  :version "21.1"
   :group 'gnus-summary
   :type 'boolean)
 
@@ -555,6 +561,7 @@ with some simple extensions:
 (defcustom gnus-list-identifiers nil
   "Regexp that matches list identifiers to be removed from subject.
 This can also be a list of regexps."
+  :version "21.1"
   :group 'gnus-summary-format
   :group 'gnus-article-hiding
   :type '(choice (const :tag "none" nil)
@@ -633,6 +640,7 @@ This variable is local to the summary buffers."
 (defcustom gnus-summary-mode-hook nil
   "*A hook for Gnus summary mode.
 This hook is run before any variables are set in the summary buffer."
+  :options '(turn-on-gnus-mailing-list-mode)
   :group 'gnus-summary-various
   :type 'hook)
 
@@ -808,12 +816,14 @@ which it may alter in any way.")
 
 (defcustom gnus-extra-headers nil
   "*Extra headers to parse."
+  :version "21.1"
   :group 'gnus-summary
   :type '(repeat symbol))
 
 (defcustom gnus-ignored-from-addresses
   (and 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
   :type 'regexp)
 
@@ -840,6 +850,7 @@ which it may alter in any way.")
   "List of charsets that should be ignored.
 When these charsets are used in the \"charset\" parameter, the
 default charset will be used instead."
+  :version "21.1"
   :type '(repeat symbol)
   :group 'gnus-charset)
 
@@ -855,6 +866,7 @@ default charset will be used instead."
 (defcustom gnus-group-highlight-words-alist nil
   "Alist of group regexps and highlight regexps.
 This variable uses the same syntax as `gnus-emphasis-alist'."
+  :version "21.1"
   :type '(repeat (cons (regexp :tag "Group")
                       (repeat (list (regexp :tag "Highlight regexp")
                                     (number :tag "Group for entire word" 0)
@@ -869,12 +881,14 @@ This variable uses the same syntax as `gnus-emphasis-alist'."
 The article will be shown with the charset corresponding to the
 numbered argument.
 For example: ((1 . cn-gb-2312) (2 . big5))."
+  :version "21.1"
   :type '(repeat (cons (number :tag "Argument" 1)
                       (symbol :tag "Charset")))
   :group 'gnus-charset)
 
 (defcustom gnus-preserve-marks t
   "Whether marks are preserved when moving, copying and respooling messages."
+  :version "21.1"
   :type 'boolean
   :group 'gnus-summary-marks)
 
@@ -897,6 +911,14 @@ when prompting the user for which type of files to save."
   :type 'regexp)
 
 
+(defcustom gnus-summary-save-parts-default-mime "image/.*"
+  "*A regexp to match MIME parts when saving multiple parts of a message
+with gnus-summary-save-parts (X m). This regexp will be used by default
+when prompting the user for which type of files to save."
+  :group 'gnus-summary
+  :type 'regexp)
+
+
 ;;; Internal variables
 
 (defvar gnus-article-mime-handles nil)
@@ -919,6 +941,9 @@ when prompting the user for which type of files to save."
 (defvar gnus-summary-save-parts-type-history nil)
 (defvar gnus-summary-save-parts-last-directory nil)
 
+(defvar gnus-summary-save-parts-type-history nil)
+(defvar gnus-summary-save-parts-last-directory nil)
+
 ;; Avoid highlighting in kill files.
 (defvar gnus-summary-inhibit-highlight nil)
 (defvar gnus-newsgroup-selected-overlay nil)
@@ -1138,7 +1163,7 @@ the type of the variable (string, integer, character, etc).")
   "Variables that have separate values in the newsgroups.")
 
 ;; Byte-compiler warning.
-(defvar gnus-article-mode-map)
+(eval-when-compile (defvar gnus-article-mode-map))
 
 ;; MIME stuff.
 
@@ -1747,7 +1772,8 @@ increase the score of each group you read."
               ["Show X-Face" gnus-article-display-x-face t]
               ["Quoted-Printable" gnus-article-de-quoted-unreadable t]
               ["Base64" gnus-article-de-base64-unreadable t]
-              ["Rot 13" gnus-summary-caesar-message t]
+              ["Rot 13" gnus-summary-caesar-message
+              :help "\"Caesar rotate\" article by 13"]
               ["Unix pipe" gnus-summary-pipe-message t]
               ["Add buttons" gnus-article-add-buttons t]
               ["Add buttons to head" gnus-article-add-buttons-to-head t]
@@ -1758,8 +1784,10 @@ increase the score of each group you read."
              ["Verify X-PGP-Sig" gnus-article-verify-x-pgp-sig t]
              ["HZ" gnus-article-decode-HZ t])
              ("Output"
-              ["Save in default format" gnus-summary-save-article t]
-              ["Save in file" gnus-summary-save-article-file t]
+              ["Save in default format" gnus-summary-save-article
+              :help "Save article using default method"]
+              ["Save in file" gnus-summary-save-article-file
+              :help "Save article in file"]
               ["Save in Unix mail format" gnus-summary-save-article-mail t]
               ["Save in MH folder" gnus-summary-save-article-folder t]
               ["Save in VM folder" gnus-summary-save-article-vm t]
@@ -1790,7 +1818,8 @@ increase the score of each group you read."
                (gnus-check-backend-function
                 'request-expire-articles gnus-newsgroup-name)])
              ("Extract"
-              ["Uudecode" gnus-uu-decode-uu t]
+              ["Uudecode" gnus-uu-decode-uu
+              :help "Decode uuencoded article(s)"]
               ["Uudecode and save" gnus-uu-decode-uu-and-save t]
               ["Unshar" gnus-uu-decode-unshar t]
               ["Unshar and save" gnus-uu-decode-unshar-and-save t]
@@ -1841,15 +1870,20 @@ increase the score of each group you read."
     (easy-menu-define
      gnus-summary-post-menu gnus-summary-mode-map ""
      '("Post"
-       ["Post an article" gnus-summary-post-news t]
-       ["Followup" gnus-summary-followup t]
-       ["Followup and yank" gnus-summary-followup-with-original t]
+       ["Post an article" gnus-summary-post-news
+       :help "Post an article"]
+       ["Followup" gnus-summary-followup
+       :help "Post followup to this article"]
+       ["Followup and yank" gnus-summary-followup-with-original
+       :help "Post followup to this article, quoting its contents"]
        ["Supersede article" gnus-summary-supersede-article t]
-       ["Cancel article" gnus-summary-cancel-article t]
+       ["Cancel article" gnus-summary-cancel-article
+       :help "Cancel an article you posted"]
        ["Reply" gnus-summary-reply t]
        ["Reply and yank" gnus-summary-reply-with-original t]
        ["Wide reply" gnus-summary-wide-reply t]
-       ["Wide reply and yank" gnus-summary-wide-reply-with-original t]
+       ["Wide reply and yank" gnus-summary-wide-reply-with-original
+       :help "Mail a reply, quoting this article"]
        ["Mail forward" gnus-summary-mail-forward t]
        ["Post forward" gnus-summary-post-forward t]
        ["Digest and mail" gnus-uu-digest-mail-forward t]
@@ -1857,7 +1891,8 @@ increase the score of each group you read."
        ["Resend message" gnus-summary-resend-message t]
        ["Send bounced mail" gnus-summary-resend-bounced-mail t]
        ["Send a mail" gnus-summary-mail-other-window t]
-       ["Uuencode and post" gnus-uu-post-news t]
+       ["Uuencode and post" gnus-uu-post-news
+       :help "Post a uuencoded article"]
        ["Followup via news" gnus-summary-followup-to-mail t]
        ["Followup via news and yank"
        gnus-summary-followup-to-mail-with-original t]
@@ -1874,7 +1909,8 @@ increase the score of each group you read."
        ["Mark same subject and select"
         gnus-summary-kill-same-subject-and-select t]
        ["Mark same subject" gnus-summary-kill-same-subject t]
-       ["Catchup" gnus-summary-catchup t]
+       ["Catchup" gnus-summary-catchup
+        :help "Mark unread articles in this group as read"]
        ["Catchup all" gnus-summary-catchup-all t]
        ["Catchup to here" gnus-summary-catchup-to-here t]
        ["Catchup region" gnus-summary-mark-region-as-read t]
@@ -1924,8 +1960,10 @@ increase the score of each group you read."
          gnus-newsgroup-process-stack]
         ["Save" gnus-summary-save-process-mark t]))
        ("Scroll article"
-       ["Page forward" gnus-summary-next-page t]
-       ["Page backward" gnus-summary-prev-page t]
+       ["Page forward" gnus-summary-next-page
+        :help "Show next page of article"]
+       ["Page backward" gnus-summary-prev-page
+        :help "Show previous page of article"]
        ["Line forward" gnus-summary-scroll-up t])
        ("Move"
        ["Next unread article" gnus-summary-next-unread-article t]
@@ -1976,10 +2014,12 @@ increase the score of each group you read."
        ["Customize group parameters" gnus-summary-customize-parameters t]
        ["Send a bug report" gnus-bug t]
        ("Exit"
-       ["Catchup and exit" gnus-summary-catchup-and-exit t]
+       ["Catchup and exit" gnus-summary-catchup-and-exit
+        :help "Mark unread articles in this group as read, then exit"]
        ["Catchup all and exit" gnus-summary-catchup-all-and-exit t]
        ["Catchup and goto next" gnus-summary-catchup-and-goto-next-group t]
-       ["Exit group" gnus-summary-exit t]
+       ["Exit group" gnus-summary-exit
+        :help "Exit current group, return to group selection mode"]
        ["Exit group without updating" gnus-summary-exit-no-update t]
        ["Exit and goto next group" gnus-summary-next-group t]
        ["Exit and goto prev group" gnus-summary-prev-group t]
@@ -1989,6 +2029,49 @@ increase the score of each group you read."
 
     (gnus-run-hooks 'gnus-summary-menu-hook)))
 
+(defvar gnus-summary-tool-bar-map nil)
+
+;; Emacs 21 tool bar.  Should be no-op otherwise.
+(defun gnus-summary-make-tool-bar ()
+  (if (and (fboundp 'tool-bar-add-item-from-menu)
+          (default-value 'tool-bar-mode)
+          (not gnus-summary-tool-bar-map))
+      (setq gnus-summary-tool-bar-map
+           (let ((tool-bar-map (make-sparse-keymap)))
+             (tool-bar-add-item-from-menu
+              'gnus-summary-prev-unread "prev-ur" gnus-summary-mode-map)
+             (tool-bar-add-item-from-menu
+              'gnus-summary-next-unread "next-ur" gnus-summary-mode-map)
+             (tool-bar-add-item-from-menu
+              'gnus-summary-post-news "post" gnus-summary-mode-map)
+             (tool-bar-add-item-from-menu
+              'gnus-summary-followup-with-original "fuwo" gnus-summary-mode-map)
+             (tool-bar-add-item-from-menu
+              'gnus-summary-followup "followup" gnus-summary-mode-map)
+             (tool-bar-add-item-from-menu
+              'gnus-summary-reply-with-original "reply-wo" gnus-summary-mode-map)
+             (tool-bar-add-item-from-menu
+              'gnus-summary-reply "reply" gnus-summary-mode-map)
+             (tool-bar-add-item-from-menu
+              'gnus-summary-caesar-message "rot13" gnus-summary-mode-map)
+             (tool-bar-add-item-from-menu
+              'gnus-uu-decode-uu "uu-decode" gnus-summary-mode-map)
+             (tool-bar-add-item-from-menu
+              'gnus-summary-save-article-file "save-aif" gnus-summary-mode-map)
+             (tool-bar-add-item-from-menu
+              'gnus-summary-save-article "save-art" gnus-summary-mode-map)
+             (tool-bar-add-item-from-menu
+              'gnus-uu-post-news "uu-post" gnus-summary-mode-map)
+             (tool-bar-add-item-from-menu
+              'gnus-summary-catchup "catchup" gnus-summary-mode-map)
+             (tool-bar-add-item-from-menu
+              'gnus-summary-catchup-and-exit "cu-exit" gnus-summary-mode-map)
+             (tool-bar-add-item-from-menu
+              'gnus-summary-exit "exit-summ" gnus-summary-mode-map)
+             tool-bar-map)))
+  (if gnus-summary-tool-bar-map
+      (set (make-local-variable 'tool-bar-map) gnus-summary-tool-bar-map)))
+
 (defun gnus-score-set-default (var value)
   "A version of set that updates the GNU Emacs menu-bar."
   (set var value)
@@ -2097,9 +2180,10 @@ The following commands are available:
 
 \\{gnus-summary-mode-map}"
   (interactive)
-  (when (gnus-visual-p 'summary-menu 'menu)
-    (gnus-summary-make-menu-bar))
   (kill-all-local-variables)
+  (when (gnus-visual-p 'summary-menu 'menu)
+    (gnus-summary-make-menu-bar)
+    (gnus-summary-make-tool-bar))
   (gnus-summary-make-local-variables)
   (let ((gnus-summary-local-variables gnus-newsgroup-variables))
     (gnus-summary-make-local-variables))
@@ -3846,7 +3930,7 @@ Unscored articles will be counted as having a score of zero."
 (defvar gnus-tmp-root-expunged nil)
 (defvar gnus-tmp-dummy-line nil)
 
-(defvar gnus-tmp-header)
+(eval-when-compile (defvar gnus-tmp-header))
 (defun gnus-extra-header (type &optional header)
   "Return the extra header of TYPE."
   (or (cdr (assq type (mail-header-extra (or header gnus-tmp-header))))
@@ -5233,10 +5317,22 @@ displayed, no centering will be performed."
        ;; Set the window start to either `bottom', which is the biggest
        ;; possible valid number, or the second line from the top,
        ;; whichever is the least.
-       (set-window-start
-        window (min bottom (save-excursion
-                             (forward-line (- top)) (point)))
-        t))
+       (let ((top-pos (save-excursion (forward-line (- top)) (point))))
+         (if (> bottom top-pos)
+             ;; Keep the second line from the top visible
+             (set-window-start window top-pos t)
+           ;; Try to keep the bottom line visible; if it's partially
+           ;; obscured, either scroll one more line to make it fully
+           ;; visible, or revert to using TOP-POS.
+           (save-excursion
+             (goto-char (point-max))
+             (forward-line -1)
+             (let ((last-line-start (point)))
+               (goto-char bottom)
+               (set-window-start window (point) t)
+               (when (not (pos-visible-in-window-p last-line-start window))
+                 (forward-line 1)
+                 (set-window-start window (min (point) top-pos) t)))))))
       ;; Do horizontal recentering while we're at it.
       (when (and (get-buffer-window (current-buffer) t)
                 (not (eq gnus-auto-center-summary 'vertical)))
@@ -5888,6 +5984,9 @@ Given a prefix, will force an `article' buffer configuration."
 
 (defun gnus-summary-display-article (article &optional all-header)
   "Display ARTICLE in article buffer."
+  (when (gnus-buffer-live-p gnus-article-buffer)
+    (with-current-buffer gnus-article-buffer
+      (mm-enable-multibyte-mule4)))
   (gnus-set-global-variables)
   (when (gnus-buffer-live-p gnus-article-buffer)
     (with-current-buffer gnus-article-buffer
index 8823747..7dd333f 100644 (file)
@@ -1,5 +1,7 @@
 ;;; gnus-undo.el --- minor mode for undoing in Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
index c58e4da..9194c56 100644 (file)
 (require 'custom)
 (eval-when-compile (require 'cl))
 (require 'nnheader)
-(require 'message)
 (require 'time-date)
 
 (eval-and-compile
+  (autoload 'message-fetch-field "message")
   (autoload 'rmail-insert-rmail-file-header "rmail")
   (autoload 'rmail-count-new-messages "rmail")
   (autoload 'rmail-show-message "rmail"))
index c611582..d9abe3e 100644 (file)
@@ -1,5 +1,7 @@
 ;;; gnus-vm.el --- vm interface for Gnus
-;; Copyright (C) 1994,95,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Per Persson <pp@gnu.ai.mit.edu>
 ;; Keywords: news, mail
index 17340e3..6f59410 100644 (file)
@@ -1,4 +1,4 @@
-;;; gnus.el --- a newsreader for GNU Emacs
+:;;; gnus.el --- a newsreader for GNU Emacs
 ;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996,
 ;;        1997, 1998, 2000 Free Software Foundation, Inc.
 
@@ -40,6 +40,7 @@
 (defgroup gnus-charset nil
   "Group character set issues."
   :link '(custom-manual "(gnus)Charsets")
+  :version "21.1"
   :group 'gnus)
 
 (defgroup gnus-cache nil
@@ -303,9 +304,9 @@ be set in `.emacs' instead."
                                (setq gnus-mode-line-image-cache
                                      (find-image
                                       '((:type xpm :file "gnus-pointer.xpm"
-                                               :ascent 80)
+                                               :ascent center)
                                         (:type xbm :file "gnus-pointer.xbm"
-                                               :ascent 80))))
+                                               :ascent center))))
                              gnus-mode-line-image-cache)
                            'help-echo "This is Gnus")
                      str)
@@ -774,6 +775,10 @@ be set in `.emacs' instead."
      (display-graphic-p)
      (let ((image (find-image
                   `((:type xpm :file "gnus.xpm")
+                    (:type pbm :file "gnus.pbm"
+                           ;; Account for the pbm's blackground.
+                           :background ,(face-foreground 'gnus-splash-face)
+                           :foreground ,(face-background 'default))
                     (:type xbm :file "gnus.xbm"
                            ;; Account for the xbm's blackground.
                            :background ,(face-foreground 'gnus-splash-face)
@@ -1516,6 +1521,9 @@ If nil, no default charset is assumed when posting."
 (defvar gnus-agent-fetching nil
   "Whether Gnus agent is in fetching mode.")
 
+(defvar gnus-agent-fetching nil
+  "Whether Gnus agent is in fetching mode.")
+
 (defvar gnus-command-method nil
   "Dynamically bound variable that says what the current backend is.")
 
@@ -1671,10 +1679,9 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
            (nthcdr 3 package)
          (cdr package)))))
    '(("info" :interactive t Info-goto-node)
-     ("pp" pp pp-to-string pp-eval-expression)
+     ("pp" pp-to-string)
      ("qp" quoted-printable-decode-region quoted-printable-decode-string)
      ("ps-print" ps-print-preprint)
-     ("browse-url" :interactive t browse-url)
      ("message" :interactive t
       message-send-and-exit message-yank-original)
      ("babel" babel-as-string)
index 828301f..f10aeaa 100644 (file)
   (autoload 'utf7-encode "utf7")
   (autoload 'utf7-decode "utf7")
   (autoload 'format-spec "format-spec")
-  (autoload 'format-spec-make "format-spec"))
+  (autoload 'format-spec-make "format-spec")
+  ;; Avoid use gnus-point-at-eol so we're independent of Gnus.  These
+  ;; days we have point-at-eol anyhow.
+  (if (fboundp 'point-at-eol)
+      (defalias 'imap-point-at-eol 'point-at-eol)
+    (defun imap-point-at-eol ()
+      (save-excursion
+       (end-of-line)
+       (point)))))
 
 ;; User variables.
 
 (defgroup imap nil
   "Low-level IMAP issues."
+  :version "21.1"
   :group 'mail)
 
 (defcustom imap-kerberos4-program '("imtest -m kerberos_v4 -u %l -p %p %s"
@@ -2224,7 +2233,7 @@ Return nil if no complete line has arrived."
     (assert (eq (char-after) ?\())
     (while (and (not (eq (char-after) ?\)))
                (setq start (progn (imap-forward) (point)))
-               (> (skip-chars-forward "^ )" (gnus-point-at-eol)) 0))
+               (> (skip-chars-forward "^ )" (imap-point-at-eol)) 0))
       (push (buffer-substring start (point)) flag-list))
     (assert (eq (char-after) ?\)))
     (imap-forward)
diff --git a/lisp/kill-group.pbm b/lisp/kill-group.pbm
new file mode 100644 (file)
index 0000000..5083144
Binary files /dev/null and b/lisp/kill-group.pbm differ
diff --git a/lisp/kill-group.xpm b/lisp/kill-group.xpm
new file mode 100644 (file)
index 0000000..de83fd9
--- /dev/null
@@ -0,0 +1,50 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 20 1",
+"  c Gray0",
+". c Gray6",
+"X c Gray12",
+"o c #2ff42ff42ff4",
+"O c #3fff3fff3fff",
+"+ c Gray28",
+"@ c #53e353e353e3",
+"# c #5fe25fe25fe2",
+"$ c #67e767e767e7",
+"% c #6fff6fff6fff",
+"& c #77d777d777d7",
+"* c Gray50",
+"= c Gray56",
+"- c #9fff9fff9fff",
+"; c Gray70",
+": c Gray75",
+"> c Gray81",
+", c #dfffdfffdfff",
+"< c #efffefffefff",
+"1 c Gray100",
+/* pixels */
+"::::::::::::::::::::::::",
+"::::::::::::::::::::::::",
+"::::::::::::::::::::::::",
+"::::#oOOOOOOOOOo+;::::::",
+"::::#:111111111:O$::::::",
+"::::#:1111-O%11:*>@:::::",
+"::::#:111=X.o#<>OOo#::::",
+"::::#:111 OX# :111:#::::",
+"::::#:111  =  :111:#::::",
+"::::#:111>Xo.-1111:#::::",
+"::::#:1111*:O11111:#::::",
+"::::#:11%1*oO->111:#::::",
+"::::#:1-O:,1:*O111:#::::",
+"::::#:111****:1111:#::::",
+"::::#:1111* 111111:#::::",
+"::::#:1,:O-1O*:111:#::::",
+"::::#:1:X1111*#111:#::::",
+"::::#:11>1111,<111:#::::",
+"::::#:111111111111:#::::",
+"::::#:111111111111:#::::",
+"::::#:111111111111:#::::",
+"::::&oooooooooooooo&::::",
+"::::::::::::::::::::::::",
+"::::::::::::::::::::::::"
+};
index f5103ec..9e5874f 100644 (file)
               make-temp-file
               mail-aliases-setup mm-copy-tree
               mule-write-region-no-coding-system put-image
+              ring-elements
               rmail-select-summary rmail-summary-exists rmail-update-summary
               sc-cite-regexp set-font-family set-font-size temp-directory
+              tool-bar-add-item tool-bar-add-item-from-menu
               url-view-url vcard-pretty-print
               url-insert-file-contents
               w3-coding-system-for-mime-charset w3-prepare-buffer w3-region
diff --git a/lisp/mail-reply.pbm b/lisp/mail-reply.pbm
new file mode 100644 (file)
index 0000000..9ca7659
Binary files /dev/null and b/lisp/mail-reply.pbm differ
diff --git a/lisp/mail-reply.xpm b/lisp/mail-reply.xpm
new file mode 100644 (file)
index 0000000..92f5dd5
--- /dev/null
@@ -0,0 +1,51 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 21 1",
+"  c Gray0",
+". c Gray6",
+"X c Gray12",
+"o c #2ff02ff02ff0",
+"O c #3fff3fff3fff",
+"+ c Gray28",
+"@ c #53f353f353f3",
+"# c #5ff95ff95ff9",
+"$ c #67e767e767e7",
+"% c #6fff6fff6fff",
+"& c #77dc77dc77dc",
+"* c Gray50",
+"= c Gray56",
+"- c #9beb9beb9beb",
+"; c #9fff9fff9fff",
+": c Gray70",
+"> c Gray75",
+", c Gray81",
+"< c #dfffdfffdfff",
+"1 c #efffefffefff",
+"2 c Gray100",
+/* pixels */
+">>>>>>>>>>>>>>>==:>>>>>>",
+">>>>>>>>>>>>>>&**$&>>>>>",
+">>>>>>>>>>>>>&-22,-o->>>",
+">>>>>>>>>=$O@$,,2222O>>>",
+">>>>>>>=#*>2*>2O222>$>>>",
+">>>>>>o&>222O2%,22,$:>>>",
+">>>:$O2222<#2*>222=+:>>>",
+">>&$>;;2;2*>2><22;**$&>>",
+">>o.;,,2,,*1%222;;,O;o>>",
+">>o2;O><2O2,%221#o%22o>>",
+">>o222***O2;22;**<222o>>",
+">>o2222<>.;2,O;,22222o>>",
+">>o2221>#2;O%;;,22222o>>",
+">>o222**<22222;*>2222o>>",
+">>o22%,222222221*,222o>>",
+">>o;O,22222222222%#<2o>>",
+">>o;22222222222222<**o>>",
+">>oOOOOOOOOOOOOOOOOX o>>",
+">>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>"
+};
index a75bc08..e2a9544 100644 (file)
@@ -39,6 +39,7 @@
 
 (defgroup mail-source nil
   "The mail-fetching library."
+  :version "21.1"
   :group 'gnus)
 
 ;; Define these at compile time to avoid dragging in imap always.
index 1012907..a386de5 100644 (file)
@@ -1,9 +1,9 @@
-;;; mailcap.el --- Functions for displaying MIME parts
+;;; mailcap.el --- MIME media types configuration
 ;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: William M. Perry <wmperry@aventail.com>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news, mail
+;; Keywords: news, mail, multimedia
 
 ;; This file is part of GNU Emacs.
 
 
 ;;; Commentary:
 
+;; Provides configuration of MIME media types from directly from Lisp
+;; and via the usual mailcap mechanism (RFC 1524).  Deals with
+;; mime.types similarly.
+
 ;;; Code:
 
 (eval-when-compile (require 'cl))
 (require 'mail-parse)
 (require 'mm-util)
 
+(defgroup mailcap nil
+  "Definition of viewers for MIME types."
+  :version "21.1"
+  :group 'mime)
+
 (defvar mailcap-parse-args-syntax-table
   (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table)))
     (modify-syntax-entry ?' "\"" table)
     table)
   "A syntax table for parsing sgml attributes.")
 
+;; Postpone using defcustom for this as it's so big and we essentially
+;; have to have two copies of the data around then.  Perhaps just
+;; customize the Lisp viewers and rely on the normal configuration
+;; files for the rest?  -- fx
 (defvar mailcap-mime-data
   '(("application"
      ("x-x509-ca-cert"
       (viewer . mailcap-save-binary-file)
       (non-viewer . t)
       (type . "application/octet-stream"))
-     ("dvi"
-      (viewer . "open %s")
-      (type   . "application/dvi")
-      (test   . (eq (mm-device-type) 'ns)))
+;;; XEmacs says `ns' device-type not implemented.
+;;      ("dvi"
+;;       (viewer . "open %s")
+;;       (type   . "application/dvi")
+;;       (test   . (eq (mm-device-type) 'ns)))
      ("dvi"
       (viewer . "xdvi %s")
       (test   . (eq (mm-device-type) 'x))
       (non-viewer . t)
       (type   . "application/zip")
       ("copiousoutput"))
+     ;; Prefer free viewers.
+     ("pdf"
+      (viewer . "gv %s")
+      (type . "application/pdf")
+      (test . window-system))
+     ("pdf"
+      (viewer . "xpdf %s")
+      (type . "application/pdf")
+      (test . (eq (mm-device-type) 'x)))
      ("pdf"
       (viewer . "acroread %s")
       (type   . "application/pdf"))
+;;; XEmacs says `ns' device-type not implemented.
+;;      ("postscript"
+;;       (viewer . "open %s")
+;;       (type   . "application/postscript")
+;;       (test   . (eq (mm-device-type) 'ns)))
      ("postscript"
-      (viewer . "open %s")
-      (type   . "application/postscript")
-      (test   . (eq (mm-device-type) 'ns)))
+      (viewer . "gv -safer %s")
+      (type . "application/postscript")
+      (test   . window-system)
+      ("needsx11"))
      ("postscript"
       (viewer . "ghostview -dSAFER %s")
       (type . "application/postscript")
       (type   . "message/rfc822"))
      ("rfc-*822"
       (viewer . view-mode)
-      (test   . (fboundp 'view-mode))
-      (type   . "message/rfc822"))
-     ("rfc-*822"
-      (viewer . fundamental-mode)
       (type   . "message/rfc822")))
     ("image"
      ("x-xwd"
       ("compose" . "xwd -frame > %s")
       (test   . (eq (mm-device-type) 'x))
       ("needsx11"))
-     (".*"
-      (viewer . "aopen %s")
-      (type   . "image/*")
-      (test   . (eq (mm-device-type) 'ns)))
+;;; XEmacs says `ns' device-type not implemented.
+;;      (".*"
+;;       (viewer . "aopen %s")
+;;       (type   . "image/*")
+;;       (test   . (eq (mm-device-type) 'ns)))
      (".*"
       (viewer . "display %s")
       (type . "image/*")
@@ -225,57 +251,38 @@ Which looks like:
    (\"plain\" . <info>)))
 
 Where <info> is another assoc list of the various information
-related to the mailcap RFC.  This is keyed on the lowercase
+related to the mailcap RFC 1524.  This is keyed on the lowercase
 attribute name (viewer, test, etc).  This looks like:
- ((viewer . viewerinfo)
-  (test   . testinfo)
-  (xxxx   . \"string\"))
+ ((viewer . VIEWERINFO)
+  (test   . TESTINFO)
+  (xxxx   . \"STRING\")
+  FLAG)
 
-Where viewerinfo specifies how the content-type is viewed.  Can be
+Where VIEWERINFO specifies how the content-type is viewed.  Can be
 a string, in which case it is run through a shell, with
 appropriate parameters, or a symbol, in which case the symbol is
-funcall'd, with the buffer as an argument.
-
-testinfo is a list of strings, or nil.  If nil, it means the
-viewer specified is always valid.  If it is a list of strings,
-these are used to determine whether a viewer passes the 'test' or
-not.")
-
-(defvar mailcap-download-directory nil
-  "*Where downloaded files should go by default.")
-
-(defvar mailcap-temporary-directory
-  (cond ((fboundp 'temp-directory) (temp-directory))
-       ((boundp 'temporary-file-directory) temporary-file-directory)
-       ("/tmp/"))
-  "*Where temporary files go.")
+`funcall'ed, with the buffer as an argument.
+
+TESTINFO is a test for the viewer's applicability, or nil.  If nil, it
+means the viewer is always valid.  If it is a Lisp function, it is
+called with a list of items from any extra fields from the
+Content-Type header as argument to return a boolean value for the
+validity.  Otherwise, if it is a non-function Lisp symbol or list
+whose car is a symbol, it is `eval'led to yield the validity.  If it
+is a string or list of strings, it represents a shell command to run
+to return a true or false shell value for the validity.")
+
+(defcustom mailcap-download-directory nil
+  "*Directory to which `mailcap-save-binary-file' downloads files by default.
+Nil means your home directory."
+  :type '(choice (const :tag "Home directory" nil)
+                directory)
+  :group 'mailcap)
 
 ;;;
 ;;; Utility functions
 ;;;
 
-(defun mailcap-generate-unique-filename (&optional fmt)
-  "Generate a unique filename in mailcap-temporary-directory."
-  (if (not fmt)
-      (let ((base (format "mailcap-tmp.%d" (user-real-uid)))
-           (fname "")
-           (x 0))
-       (setq fname (format "%s%d" base x))
-       (while (file-exists-p
-               (expand-file-name fname mailcap-temporary-directory))
-         (setq x (1+ x)
-               fname (concat base (int-to-string x))))
-       (expand-file-name fname mailcap-temporary-directory))
-    (let ((base (concat "mm" (int-to-string (user-real-uid))))
-         (fname "")
-         (x 0))
-      (setq fname (format fmt (concat base (int-to-string x))))
-      (while (file-exists-p
-             (expand-file-name fname mailcap-temporary-directory))
-       (setq x (1+ x)
-             fname (format fmt (concat base (int-to-string x)))))
-      (expand-file-name fname mailcap-temporary-directory))))
-
 (defun mailcap-save-binary-file ()
   (goto-char (point-min))
   (unwind-protect
@@ -289,7 +296,7 @@ not.")
 (defvar mailcap-maybe-eval-warning
   "*** WARNING ***
 
-This MIME part contains untrusted and possibly harmful content.  
+This MIME part contains untrusted and possibly harmful content.
 If you evaluate the Emacs Lisp code contained in it, a lot of nasty
 things can happen.  Please examine the code very carefully before you
 instruct Emacs to evaluate it.  You can browse the buffer containing
@@ -301,7 +308,7 @@ Make sure that this text consists only of few text lines.  Otherwise,
 Gnus might fail to display all of it.")
   
 (defun mailcap-maybe-eval ()
-  "Maybe evaluate a buffer of emacs lisp code."
+  "Maybe evaluate a buffer of Emacs Lisp code."
   (let ((lisp-buffer (current-buffer)))
     (goto-char (point-min))
     (when
@@ -311,7 +318,7 @@ Gnus might fail to display all of it.")
                                            "*Warning*"))))
            (unwind-protect
                (with-current-buffer buffer
-                 (insert (substitute-command-keys 
+                 (insert (substitute-command-keys
                           mailcap-maybe-eval-warning))
                  (goto-char (point-min))
                  (display-buffer buffer)
@@ -369,7 +376,7 @@ MAILCAPS if set; otherwise (on Unix) use the path from RFC 1524, plus
       (setq mailcap-parsed-p t)))
 
 (defun mailcap-parse-mailcap (fname)
-  ;; Parse out the mailcap file specified by FNAME
+  "Parse out the mailcap file specified by FNAME."
   (let (major                          ; The major mime type (image/audio/etc)
        minor                           ; The minor mime type (gif, basic, etc)
        save-pos                        ; Misc saved positions used in parsing
@@ -409,9 +416,9 @@ MAILCAPS if set; otherwise (on Unix) use the path from RFC 1524, plus
        (skip-chars-forward " \t")
        ;;; Got the major/minor chunks, now for the viewers/etc
        ;;; The first item _must_ be a viewer, according to the
-       ;;; RFC for mailcap files (#1343)
+       ;;; RFC for mailcap files (#1524)
        (setq viewer "")
-       (when (eq (char-after) ?\;) 
+       (when (eq (char-after) ?\;)
          (forward-char)
          (skip-chars-forward " \t")
          (setq save-pos (point))
@@ -432,7 +439,7 @@ MAILCAPS if set; otherwise (on Unix) use the path from RFC 1524, plus
            (setq viewer (buffer-substring save-pos (point)))))
        (setq save-pos (point))
        (end-of-line)
-       (unless (equal viewer "") 
+       (unless (equal viewer "")
          (setq info (nconc (list (cons 'viewer viewer)
                                  (cons 'type (concat major "/"
                                                      (if (string= minor ".*")
@@ -443,7 +450,7 @@ MAILCAPS if set; otherwise (on Unix) use the path from RFC 1524, plus
        (beginning-of-line)))))
 
 (defun mailcap-parse-mailcap-extras (st nd)
-  ;; Grab all the extra stuff from a mailcap entry
+  "Grab all the extra stuff from a mailcap entry."
   (let (
        name                            ; From name=
        value                           ; its value
@@ -488,11 +495,10 @@ MAILCAPS if set; otherwise (on Unix) use the path from RFC 1524, plus
       results)))
 
 (defun mailcap-mailcap-entry-passes-test (info)
-  ;; Return t iff a mailcap entry passes its test clause or no test
-  ;; clause is present.
-  (let (status                         ; Call-process-regions return value
-       (test (assq 'test info))        ; The test clause
-       )
+  "Return non-nil iff mailcap entry INFO passes its test clause.
+Also return non-nil if no test clause is present."
+  (let ((test (assq 'test info))       ; The test clause
+       status)
     (setq status (and test (split-string (cdr test) " ")))
     (if (and (or (assoc "needsterm" info)
                 (assoc "needsterminal" info)
@@ -519,7 +525,7 @@ MAILCAPS if set; otherwise (on Unix) use the path from RFC 1524, plus
 ;;;
 
 (defun mailcap-possible-viewers (major minor)
-  ;; Return a list of possible viewers from MAJOR for minor type MINOR
+  "Return a list of possible viewers from MAJOR for minor type MINOR."
   (let ((exact '())
        (wildcard '()))
     (while major
@@ -554,18 +560,18 @@ MAILCAPS if set; otherwise (on Unix) use the path from RFC 1524, plus
            (setq save-pos (point))
            (skip-chars-forward "%")
            (setq save-chr (char-after (point)))
+           ;; Escapes:
+           ;; %s: name of a file for the body data
+           ;; %t: content-type
+           ;; %{<parameter name}: value of parameter in mailcap entry
+           ;; %n: number of sub-parts for multipart content-type
+           ;; %F: a set of content-type/filename pairs for multiparts
            (cond
             ((null save-chr) nil)
             ((= save-chr ?t)
              (delete-region save-pos (progn (forward-char 1) (point)))
              (insert (or (cdr (assq 'type type-info)) "\"\"")))
-            ((= save-chr ?M)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert "\"\""))
-            ((= save-chr ?n)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert "\"\""))
-            ((= save-chr ?F)
+            ((memq save-chr '(?M ?n ?F))
              (delete-region save-pos (progn (forward-char 1) (point)))
              (insert "\"\""))
             ((= save-chr ?{)
@@ -577,13 +583,14 @@ MAILCAPS if set; otherwise (on Unix) use the path from RFC 1524, plus
              (insert (or (cdr (assoc subst type-info)) "\"\"")))
             (t nil))))
        (buffer-string)))
-     (t (error "Bad value to mailcap-unescape-mime-test. %s" test)))))
+     (t (error "Bad value to mailcap-unescape-mime-test: %s" test)))))
 
 (defvar mailcap-viewer-test-cache nil)
 
 (defun mailcap-viewer-passes-test (viewer-info type-info)
-  ;; Return non-nil iff the viewer specified by VIEWER-INFO passes its
-  ;; test clause (if any).
+  "Return non-nil iff viewer specified by VIEWER-INFO passes its test clause.
+Also retun non-nil if it has no test clause.  TYPE-INFO is an argument
+to supply to the test."
   (let* ((test-info (assq 'test viewer-info))
         (test (cdr test-info))
         (otest test)
@@ -598,8 +605,7 @@ MAILCAPS if set; otherwise (on Unix) use the path from RFC 1524, plus
        ((not test-info) t)             ; No test clause
        ((not test) nil)                ; Already failed test
        ((eq test t) t)                 ; Already passed test
-       ((and (symbolp test)            ; Lisp function as test
-             (fboundp test))
+       ((functionp test)               ; Lisp function as test
         (funcall test type-info))
        ((and (symbolp test)            ; Lisp variable as test
              (boundp test))
@@ -654,7 +660,7 @@ If TEST is not given, it defaults to t."
 ;;;
 
 (defun mailcap-viewer-lessp (x y)
-  ;; Return t iff viewer X is more desirable than viewer Y
+  "Return t iff viewer X is more desirable than viewer Y."
   (let ((x-wild (string-match "[*?]" (or (cdr-safe (assq 'type x)) "")))
        (y-wild (string-match "[*?]" (or (cdr-safe (assq 'type y)) "")))
        (x-lisp (not (stringp (or (cdr-safe (assq 'viewer x)) ""))))
@@ -735,104 +741,105 @@ this type is returned."
 ;;;
 
 (defvar mailcap-mime-extensions
-  '((""          . "text/plain")
-    (".abs"      . "audio/x-mpeg")
-    (".aif"      . "audio/aiff")
-    (".aifc"     . "audio/aiff")
-    (".aiff"     . "audio/aiff")
-    (".ano"      . "application/x-annotator")
-    (".au"       . "audio/ulaw")
-    (".avi"      . "video/x-msvideo")
-    (".bcpio"    . "application/x-bcpio")
-    (".bin"      . "application/octet-stream")
-    (".cdf"      . "application/x-netcdr")
-    (".cpio"     . "application/x-cpio")
-    (".csh"      . "application/x-csh")
-    (".css"      . "text/css")
-    (".dvi"      . "application/x-dvi")
-    (".diff"     . "text/x-patch")
-    (".el"       . "application/emacs-lisp")
-    (".eps"      . "application/postscript")
-    (".etx"      . "text/x-setext")
-    (".exe"      . "application/octet-stream")
-    (".fax"      . "image/x-fax")
-    (".gif"      . "image/gif")
-    (".hdf"      . "application/x-hdf")
-    (".hqx"      . "application/mac-binhex40")
-    (".htm"      . "text/html")
-    (".html"     . "text/html")
-    (".icon"     . "image/x-icon")
-    (".ief"      . "image/ief")
-    (".jpg"      . "image/jpeg")
-    (".macp"     . "image/x-macpaint")
-    (".man"      . "application/x-troff-man")
-    (".me"       . "application/x-troff-me")
-    (".mif"      . "application/mif")
-    (".mov"      . "video/quicktime")
-    (".movie"    . "video/x-sgi-movie")
-    (".mp2"      . "audio/x-mpeg")
-    (".mp3"      . "audio/x-mpeg")
-    (".mp2a"     . "audio/x-mpeg2")
-    (".mpa"      . "audio/x-mpeg")
-    (".mpa2"     . "audio/x-mpeg2")
-    (".mpe"      . "video/mpeg")
-    (".mpeg"     . "video/mpeg")
-    (".mpega"    . "audio/x-mpeg")
-    (".mpegv"    . "video/mpeg")
-    (".mpg"      . "video/mpeg")
-    (".mpv"      . "video/mpeg")
-    (".ms"       . "application/x-troff-ms")
-    (".nc"       . "application/x-netcdf")
-    (".nc"       . "application/x-netcdf")
-    (".oda"      . "application/oda")
-    (".patch"    . "text/x-patch")
-    (".pbm"      . "image/x-portable-bitmap")
-    (".pdf"      . "application/pdf")
-    (".pgm"      . "image/portable-graymap")
-    (".pict"     . "image/pict")
-    (".png"      . "image/png")
-    (".pnm"      . "image/x-portable-anymap")
-    (".ppm"      . "image/portable-pixmap")
-    (".ps"       . "application/postscript")
-    (".qt"       . "video/quicktime")
-    (".ras"      . "image/x-raster")
-    (".rgb"      . "image/x-rgb")
-    (".rtf"      . "application/rtf")
-    (".rtx"      . "text/richtext")
-    (".sh"       . "application/x-sh")
-    (".sit"      . "application/x-stuffit")
-    (".snd"      . "audio/basic")
-    (".src"      . "application/x-wais-source")
-    (".tar"      . "archive/tar")
-    (".tcl"      . "application/x-tcl")
-    (".tcl"      . "application/x-tcl")
-    (".tex"      . "application/x-tex")
-    (".texi"     . "application/texinfo")
-    (".tga"      . "image/x-targa")
-    (".tif"      . "image/tiff")
-    (".tiff"     . "image/tiff")
-    (".tr"       . "application/x-troff")
-    (".troff"    . "application/x-troff")
-    (".tsv"      . "text/tab-separated-values")
-    (".txt"      . "text/plain")
-    (".vbs"      . "video/mpeg")
-    (".vox"      . "audio/basic")
-    (".vrml"     . "x-world/x-vrml")
-    (".wav"      . "audio/x-wav")
-    (".wrl"      . "x-world/x-vrml")
-    (".xbm"      . "image/xbm")
-    (".xpm"      . "image/xpm")
-    (".xwd"      . "image/windowdump")
-    (".zip"      . "application/zip")
-    (".ai"       . "application/postscript")
-    (".jpe"      . "image/jpeg")
-    (".jpeg"     . "image/jpeg"))
-  "An assoc list of file extensions and corresponding MIME content-types.")
+  '((""        . "text/plain")
+    (".abs"   . "audio/x-mpeg")
+    (".aif"   . "audio/aiff")
+    (".aifc"  . "audio/aiff")
+    (".aiff"  . "audio/aiff")
+    (".ano"   . "application/x-annotator")
+    (".au"    . "audio/ulaw")
+    (".avi"   . "video/x-msvideo")
+    (".bcpio" . "application/x-bcpio")
+    (".bin"   . "application/octet-stream")
+    (".cdf"   . "application/x-netcdr")
+    (".cpio"  . "application/x-cpio")
+    (".csh"   . "application/x-csh")
+    (".css"   . "text/css")
+    (".dvi"   . "application/x-dvi")
+    (".diff"  . "text/x-patch")
+    (".el"    . "application/emacs-lisp")
+    (".eps"   . "application/postscript")
+    (".etx"   . "text/x-setext")
+    (".exe"   . "application/octet-stream")
+    (".fax"   . "image/x-fax")
+    (".gif"   . "image/gif")
+    (".hdf"   . "application/x-hdf")
+    (".hqx"   . "application/mac-binhex40")
+    (".htm"   . "text/html")
+    (".html"  . "text/html")
+    (".icon"  . "image/x-icon")
+    (".ief"   . "image/ief")
+    (".jpg"   . "image/jpeg")
+    (".macp"  . "image/x-macpaint")
+    (".man"   . "application/x-troff-man")
+    (".me"    . "application/x-troff-me")
+    (".mif"   . "application/mif")
+    (".mov"   . "video/quicktime")
+    (".movie" . "video/x-sgi-movie")
+    (".mp2"   . "audio/x-mpeg")
+    (".mp3"   . "audio/x-mpeg")
+    (".mp2a"  . "audio/x-mpeg2")
+    (".mpa"   . "audio/x-mpeg")
+    (".mpa2"  . "audio/x-mpeg2")
+    (".mpe"   . "video/mpeg")
+    (".mpeg"  . "video/mpeg")
+    (".mpega" . "audio/x-mpeg")
+    (".mpegv" . "video/mpeg")
+    (".mpg"   . "video/mpeg")
+    (".mpv"   . "video/mpeg")
+    (".ms"    . "application/x-troff-ms")
+    (".nc"    . "application/x-netcdf")
+    (".nc"    . "application/x-netcdf")
+    (".oda"   . "application/oda")
+    (".patch" . "text/x-patch")
+    (".pbm"   . "image/x-portable-bitmap")
+    (".pdf"   . "application/pdf")
+    (".pgm"   . "image/portable-graymap")
+    (".pict"  . "image/pict")
+    (".png"   . "image/png")
+    (".pnm"   . "image/x-portable-anymap")
+    (".ppm"   . "image/portable-pixmap")
+    (".ps"    . "application/postscript")
+    (".qt"    . "video/quicktime")
+    (".ras"   . "image/x-raster")
+    (".rgb"   . "image/x-rgb")
+    (".rtf"   . "application/rtf")
+    (".rtx"   . "text/richtext")
+    (".sh"    . "application/x-sh")
+    (".sit"   . "application/x-stuffit")
+    (".snd"   . "audio/basic")
+    (".src"   . "application/x-wais-source")
+    (".tar"   . "archive/tar")
+    (".tcl"   . "application/x-tcl")
+    (".tex"   . "application/x-tex")
+    (".texi"  . "application/texinfo")
+    (".tga"   . "image/x-targa")
+    (".tif"   . "image/tiff")
+    (".tiff"  . "image/tiff")
+    (".tr"    . "application/x-troff")
+    (".troff" . "application/x-troff")
+    (".tsv"   . "text/tab-separated-values")
+    (".txt"   . "text/plain")
+    (".vbs"   . "video/mpeg")
+    (".vox"   . "audio/basic")
+    (".vrml"  . "x-world/x-vrml")
+    (".wav"   . "audio/x-wav")
+    (".wrl"   . "x-world/x-vrml")
+    (".xbm"   . "image/xbm")
+    (".xpm"   . "image/xpm")
+    (".xwd"   . "image/windowdump")
+    (".zip"   . "application/zip")
+    (".ai"    . "application/postscript")
+    (".jpe"   . "image/jpeg")
+    (".jpeg"  . "image/jpeg"))
+  "An alist of file extensions and corresponding MIME content-types.
+This exists for you to customize the information in Lisp.  It is
+merged with values from mailcap files by `mailcap-parse-mimetypes'.")
 
 (defvar mailcap-mimetypes-parsed-p nil)
 
 (defun mailcap-parse-mimetypes (&optional path force)
-  "Parse out all the mimetypes specified in a unix-style path string PATH.
+  "Parse out all the mimetypes specified in a Unix-style path string PATH.
 Components of PATH are separated by the `path-separator' character
 appropriate for this system.  If PATH is omitted, use the value of
 environment variable MIMETYPES if set; otherwise use a default path.
@@ -871,7 +878,7 @@ If FORCE, re-parse even if already parsed."
     (setq mailcap-mimetypes-parsed-p t)))
 
 (defun mailcap-parse-mimetype-file (fname)
-  ;; Parse out a mime-types file
+  "Parse out a mime-types file FNAME."
   (let (type                           ; The MIME type for this line
        extns                           ; The extensions for this line
        save-pos                        ; Misc. saved buffer positions
@@ -913,26 +920,8 @@ If FORCE, re-parse even if already parsed."
       (setq extn (concat "." extn)))
   (cdr (assoc (downcase extn) mailcap-mime-extensions)))
 
-(defvar mailcap-binary-suffixes
-  (if (memq system-type '(ms-dos windows-nt))
-      '(".exe" ".com" ".bat" ".cmd" ".btm" "")
-    '("")))
-
-(defun mailcap-command-p (command)
-  "Say whether COMMAND is in the exec path.
-The path of COMMAND will be returned iff COMMAND is a command."
-  (let ((path (if (file-name-absolute-p command) '(nil) exec-path))
-       file dir)
-    (catch 'found
-      (while (setq dir (pop path))
-       (let ((suffixes mailcap-binary-suffixes))
-         (while suffixes
-           (when (and (file-executable-p
-                       (setq file (expand-file-name
-                                   (concat command (pop suffixes))
-                                   dir)))
-                      (not (file-directory-p file)))
-             (throw 'found file))))))))
+;; Unused?
+(defalias 'mailcap-command-p 'executable-find)
 
 (defun mailcap-mime-types ()
   "Return a list of MIME media types."
index 997b0c1..e6b2662 100644 (file)
@@ -1,4 +1,4 @@
-;;; message.el --- composing mail and news messages
+;;; message.el --- composing mail and news messages  -*- coding: iso-latin-1 -*-
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000
 ;;        Free Software Foundation, Inc.
 
@@ -33,7 +33,6 @@
 (eval-when-compile
   (require 'cl)
   (defvar gnus-list-identifiers))      ; gnus-sum is required where necessary
-
 (require 'mailheader)
 (require 'nnheader)
 ;; This is apparently necessary even though things are autoloaded:
@@ -260,7 +259,8 @@ should return the new buffer name."
   :group 'message-buffers
   :type 'boolean)
 
-(defvar gnus-local-organization)
+(eval-when-compile
+  (defvar gnus-local-organization))
 (defcustom message-user-organization
   (or (and (boundp 'gnus-local-organization)
           (stringp gnus-local-organization)
@@ -297,6 +297,7 @@ The provided functions are:
 
 (defcustom message-forward-as-mime t
   "*If non-nil, forward messages as an inline/rfc822 MIME section.  Otherwise, directly inline the old message in the forwarded message."
+  :version "21.1"
   :group 'message-forwarding
   :type 'boolean)
 
@@ -322,6 +323,7 @@ The provided functions are:
 
 (defcustom message-forward-ignored-headers "^Content-Transfer-Encoding:\\|^X-Gnus"
   "*All headers that match this regexp will be deleted when forwarding a message."
+  :version "21.1"
   :group 'message-forwarding
   :type '(choice (const :tag "None" nil)
                 regexp))
@@ -428,8 +430,9 @@ might set this variable to '(\"-f\" \"you@some.where\")."
 Folding `References' makes ancient versions of INN create incorrect
 NOV lines.")
 
-(defvar gnus-post-method)
-(defvar gnus-select-method)
+(eval-when-compile
+  (defvar gnus-post-method)
+  (defvar gnus-select-method))
 (defcustom message-post-method
   (cond ((and (boundp 'gnus-post-method)
              (listp gnus-post-method)
@@ -582,7 +585,7 @@ If stringp, use this; if non-nil, use no host name (user name only)."
 
 (define-widget 'message-header-lines 'text
   "All header lines must be LFD terminated."
-  :format "%t:%n%v"
+  :format "%{%t%}:%n%v"
   :valid-regexp "^\\'"
   :error "All header lines must be newline terminated")
 
@@ -654,13 +657,17 @@ a message of type TYPE; and FUNCTION is a function to be called if
 PREDICATE returns non-nil.  FUNCTION is called with one parameter --
 the prefix.")
 
-(defvar message-mail-alias-type 'abbrev
+(defcustom message-mail-alias-type 'abbrev
   "*What alias expansion type to use in Message buffers.
 The default is `abbrev', which uses mailabbrev.  nil switches
-mail aliases off.")
+mail aliases off."
+  :group 'message
+  :link '(custom-manual "(message)Mail Aliases")
+  :type '(choice (const :tag "Use Mailabbrev" abbrev)
+                (const :tag "No expansion" nil)))
 
 (defcustom message-auto-save-directory
-  (nnheader-concat message-directory "drafts/")
+  (file-name-as-directory (nnheader-concat message-directory "drafts"))
   "*Directory where Message auto-saves buffers if Gnus isn't running.
 If nil, Message won't auto-save."
   :group 'message-buffers
@@ -669,6 +676,7 @@ If nil, Message won't auto-save."
 (defcustom message-buffer-naming-style 'unique
   "*The way new message buffers are named.
 Valid valued are `unique' and `unsent'."
+  :version "21.1"
   :group 'message-buffers
   :type '(choice (const :tag "unique" unique)
                 (const :tag "unsent" unsent)))
@@ -677,6 +685,7 @@ Valid valued are `unique' and `unsent'."
   (and (not (mm-multibyte-p)) 'iso-8859-1)
   "Default charset used in non-MULE Emacsen.
 If nil, you might be asked to input the charset."
+  :version "21.1"
   :group 'message
   :type 'symbol)
 
@@ -684,6 +693,7 @@ If nil, you might be asked to input the charset."
   (and (boundp 'rmail-dont-reply-to-names) rmail-dont-reply-to-names)
   "*A regexp specifying names to prune when doing wide replies.
 A value of nil means exclude your own name only."
+  :version "21.1"
   :group 'message
   :type '(choice (const :tag "Yourself" nil)
                 regexp))
@@ -716,10 +726,6 @@ candidates:
 (defvar message-mode-abbrev-table text-mode-abbrev-table
   "Abbrev table used in Message mode buffers.
 Defaults to `text-mode-abbrev-table'.")
-(defgroup message-headers nil
-  "Message headers."
-  :link '(custom-manual "(message)Variables")
-  :group 'message)
 
 (defface message-header-to-face
   '((((class color)
@@ -917,6 +923,7 @@ The cdr of ech entry is a function for applying the face to a region.")
   "The limitation of messages sent as message/partial.
 The lower bound of message size in characters, beyond which the message 
 should be sent in several parts. If it is nil, the size is unlimited."
+  :version "21.1"
   :group 'message-buffers
   :type '(choice (const :tag "unlimited" nil)
                 (integer 1000000)))
@@ -939,8 +946,9 @@ The first matched address (not primary one) is used in the From field."
 (defvar message-posting-charset nil)
 
 ;; Byte-compiler warning
-(defvar gnus-active-hashtb)
-(defvar gnus-read-active-file)
+(eval-when-compile
+  (defvar gnus-active-hashtb)
+  (defvar gnus-read-active-file))
 
 ;;; Regexp matching the delimiter of messages in UNIX mail format
 ;;; (UNIX From lines), minus the initial ^.  It should be a copy
@@ -1415,12 +1423,17 @@ Point is left at the beginning of the narrowed-to region."
    ["Kill To Signature" message-kill-to-signature t]
    ["Newline and Reformat" message-newline-and-reformat t]
    ["Rename buffer" message-rename-buffer t]
-   ["Spellcheck" ispell-message t]
-   ["Attach file as MIME" mml-attach-file t]
+   ["Spellcheck" ispell-message
+    :help "Spellcheck this message"]
+   ["Attach file as MIME" mml-attach-file
+    :help "Attach a file at point"]
    "----"
-   ["Send Message" message-send-and-exit t]
-   ["Abort Message" message-dont-send t]
-   ["Kill Message" message-kill-buffer t]))
+   ["Send Message" message-send-and-exit
+    :help "Send this message"]
+   ["Abort Message" message-dont-send
+    :help "File this draft message and exit"]
+   ["Kill Message" message-kill-buffer
+    :help "Delete this message without sending"]))
 
 (easy-menu-define
  message-mode-field-menu message-mode-map ""
@@ -1440,15 +1453,17 @@ Point is left at the beginning of the narrowed-to region."
    ["Body" message-goto-body t]
    ["Signature" message-goto-signature t]))
 
-(defvar facemenu-add-face-function)
-(defvar facemenu-remove-face-function)
+(eval-when-compile
+  (defvar facemenu-add-face-function)
+  (defvar facemenu-remove-face-function)
+  (defvar message-tool-bar-map))
 
 ;;;###autoload
 (defun message-mode ()
   "Major mode for editing mail and news to be sent.
 Like Text Mode but with these additional commands:
 C-c C-s  message-send (send the message)    C-c C-c  message-send-and-exit
-C-c C-d  Pospone sending the message        C-c C-k  Kill the message
+C-c C-d  Postpone sending the message        C-c C-k  Kill the message
 C-c C-f  move to a header field (and create it if there isn't):
         C-c C-f C-t  move to To        C-c C-f C-s  move to Subject
         C-c C-f C-c  move to Cc        C-c C-f C-b  move to Bcc
@@ -1510,7 +1525,9 @@ M-RET    message-newline-and-reformat (break the line and reformat)."
   (if (featurep 'xemacs)
       (message-setup-toolbar)
     (set (make-local-variable 'font-lock-defaults)
-        '(message-font-lock-keywords t)))
+        '(message-font-lock-keywords t))
+    (if (boundp 'tool-bar-map)
+       (set (make-local-variable 'tool-bar-map) message-tool-bar-map)))
   (easy-menu-add message-mode-menu message-mode-map)
   (easy-menu-add message-mode-field-menu message-mode-map)
   ;; Allow mail alias things.
@@ -2060,7 +2077,7 @@ prefix, and don't delete any headers."
        (insert "\n"))
       (funcall message-citation-line-function))))
 
-(defvar mail-citation-hook)            ;Compiler directive
+(eval-when-compile (defvar mail-citation-hook))                ;Compiler directive
 (defun message-cite-original ()
   "Cite function in the standard Message manner."
   (if (and (boundp 'mail-citation-hook)
@@ -3699,6 +3716,9 @@ than 988 characters long, and if they are not, trim them until they are."
 (defun message-set-auto-save-file-name ()
   "Associate the message buffer with a file in the drafts directory."
   (when message-auto-save-directory
+    (unless (file-directory-p
+            (directory-file-name message-auto-save-directory))
+      (gnus-make-directory message-auto-save-directory))
     (if (gnus-alive-p)
        (setq message-draft-article
              (nndraft-request-associate-buffer "drafts"))
@@ -3845,6 +3865,7 @@ responses here are directed to other addresses.")))
            (push ccs follow-to)))))
     follow-to))
 
+
 ;;;###autoload
 (defun message-reply (&optional to-address wide)
   "Start editing a reply to the article in the current buffer."
@@ -4442,8 +4463,33 @@ which specify the range to operate on."
 (defalias 'message-exchange-point-and-mark 'exchange-point-and-mark)
 
 ;; Support for toolbar
-(when (featurep 'xemacs)
-  (require 'messagexmas))
+(eval-when-compile 
+  (defvar tool-bar-map)
+  (defvar tool-bar-mode))
+(if (featurep 'xemacs)
+    (require 'messagexmas)
+  (when (and (>= (string-to-int emacs-version) 21)
+            ;; I hate warnings --zsh.
+            (fboundp 'tool-bar-add-item-from-menu)
+            tool-bar-mode)
+    (defvar message-tool-bar-map
+      (let ((tool-bar-map (copy-keymap tool-bar-map)))
+       ;; Zap some items which aren't so relevant and take up space.
+       (dolist (key '(print-buffer kill-buffer save-buffer write-file
+                                   dired open-file))
+         (define-key tool-bar-map (vector key) nil))
+       
+       (tool-bar-add-item-from-menu
+        'message-send-and-exit "mail_send" message-mode-map)
+       (tool-bar-add-item-from-menu
+        'message-kill-buffer "close" message-mode-map)
+       (tool-bar-add-item-from-menu
+        'message-dont-send "cancel" message-mode-map)
+       (tool-bar-add-item-from-menu
+        'mml-attach-file "attach" message-mode-map)
+       (tool-bar-add-item-from-menu
+        'ispell-message "spell" message-mode-map)
+       tool-bar-map))))
 
 ;;; Group name completion.
 
@@ -4460,7 +4506,6 @@ Do a `tab-to-tab-stop' if not in those headers."
       (message-expand-group)
     (tab-to-tab-stop)))
 
-(defvar gnus-active-hashtb)
 (defun message-expand-group ()
   "Expand the group name under point."
   (let* ((b (save-excursion
index 9ffbd89..e3021ce 100644 (file)
@@ -1,5 +1,7 @@
 ;;; messcompat.el --- making message mode compatible with mail mode
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: mail, news
index d4c3677..f7440c7 100644 (file)
 
 (eval-and-compile
   (or (fboundp  'base64-decode-region)
-      (require 'base64))
-  (autoload 'binhex-decode-region "binhex"))
+      (require 'base64)))
+
+(eval-when-compile
+  (defvar mm-uu-decode-function)
+  (defvar mm-uu-binhex-decode-function))
 
 (require 'mm-util)
 (require 'rfc2047)
-(require 'qp)
-(require 'uudecode)
+(require 'mm-encode)
 
 ;; 8bit treatment gets any char except: 0x32 - 0x7f, CR, LF, TAB, BEL,
 ;; BS, vertical TAB, form feed, and ^_
@@ -97,20 +99,25 @@ If no encoding was done, nil is returned."
                  (when start
                    (save-restriction
                      (narrow-to-region start (point))
-                     (mm-encode-coding-region start (point) charset)
+                     (mm-encode-coding-region
+                      start (point) (mm-charset-to-coding-system charset))
                      (goto-char (point-max)))
                    (setq start nil))
                (unless start
                  (setq start (point))))
              (forward-char 1))
            (when start
-             (mm-encode-coding-region start (point) charset)
+             (mm-encode-coding-region start (point)
+                                      (mm-charset-to-coding-system charset))
              (setq start nil))
            charset)))))))
 
+(eval-when-compile (defvar message-posting-charset))
+
 (defun mm-body-encoding (charset &optional encoding)
   "Do Content-Transfer-Encoding and return the encoding of the current buffer."
   (let ((bits (mm-body-7-or-8)))
+    (require 'message)
     (cond
      ((and (not mm-use-ultra-safe-encoding) (eq bits '7bit))
       bits)
@@ -186,8 +193,10 @@ If no encoding was done, nil is returned."
            ;; Do nothing.
            )
           ((memq encoding '(x-uuencode x-uue))
+           (require 'mm-uu)
            (funcall mm-uu-decode-function (point-min) (point-max)))
           ((eq encoding 'x-binhex)
+           (require 'mm-uu)
            (funcall mm-uu-binhex-decode-function (point-min) (point-max)))
           ((functionp encoding)
            (funcall encoding (point-min) (point-max)))
@@ -217,21 +226,21 @@ The characters in CHARSET should then be decoded."
     (when encoding
       (mm-decode-content-transfer-encoding encoding type))
     (when (featurep 'mule)
-      (let ((mule-charset (mm-charset-to-coding-system charset)))
-       (if (and (not mule-charset)
+      (let ((coding-system (mm-charset-to-coding-system charset)))
+       (if (and (not coding-system)
                 (listp mail-parse-ignored-charsets)
                 (memq 'gnus-unknown mail-parse-ignored-charsets))
-           (setq mule-charset 
+           (setq coding-system 
                  (mm-charset-to-coding-system mail-parse-charset)))
-       (when (and charset mule-charset
+       (when (and charset coding-system
                   ;; buffer-file-coding-system
                   ;;Article buffer is nil coding system
                   ;;in XEmacs
                   (mm-multibyte-p)
-                  (or (not (eq mule-charset 'ascii))
-                      (setq mule-charset mail-parse-charset))
-                  (not (eq mule-charset 'gnus-decoded)))
-         (mm-decode-coding-region (point-min) (point-max) mule-charset))))))
+                  (or (not (eq coding-system 'ascii))
+                      (setq coding-system mail-parse-charset))
+                  (not (eq coding-system 'gnus-decoded)))
+         (mm-decode-coding-region (point-min) (point-max) coding-system))))))
 
 (defun mm-decode-string (string charset)
   "Decode STRING with CHARSET."
@@ -244,17 +253,17 @@ The characters in CHARSET should then be decoded."
     (setq charset mail-parse-charset))
   (or
    (when (featurep 'mule)
-     (let ((mule-charset (mm-charset-to-coding-system charset)))
-       (if (and (not mule-charset)
+     (let ((coding-system (mm-charset-to-coding-system charset)))
+       (if (and (not coding-system)
                (listp mail-parse-ignored-charsets)
                (memq 'gnus-unknown mail-parse-ignored-charsets))
-          (setq mule-charset 
+          (setq coding-system 
                 (mm-charset-to-coding-system mail-parse-charset)))
-       (when (and charset mule-charset
+       (when (and charset coding-system
                  (mm-multibyte-p)
-                 (or (not (eq mule-charset 'ascii))
-                     (setq mule-charset mail-parse-charset)))
-        (mm-decode-coding-string string mule-charset))))
+                 (or (not (eq coding-system 'ascii))
+                     (setq coding-system mail-parse-charset)))
+        (mm-decode-coding-string string coding-system))))
    string))
 
 (provide 'mm-bodies)
index c7f3bd4..c34e690 100644 (file)
 
 (eval-and-compile
   (autoload 'mm-inline-partial "mm-partial")
-  (autoload 'mm-inline-external-body "mm-extern"))
+  (autoload 'mm-inline-external-body "mm-extern")
+  (autoload 'mm-inline-external-body "mm-view"))
 
 (defgroup mime-display ()
   "Display of MIME in mail and news articles."
   :link '(custom-manual "(emacs-mime)Customization")
+  :version "21.1"
   :group 'mail
   :group 'news
   :group 'multimedia)
@@ -287,6 +289,15 @@ to:
 ;; 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)
+    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)
index a28183e..c2dee51 100644 (file)
@@ -27,6 +27,8 @@
 (eval-when-compile (require 'cl))
 (require 'mail-parse)
 (require 'mailcap)
+(eval-and-compile
+  (autoload 'mm-body-7-or-8 "mm-bodies"))
 
 (defvar mm-content-transfer-encoding-defaults
   '(("text/x-patch" 8bit)
index f739fee..585f3df 100644 (file)
   (or mm-coding-system-list
       (setq mm-coding-system-list (mm-coding-system-list))))
 
+(defun mm-coding-system-p (sym)
+  "Return non-nil if SYM is a coding system."
+  (or (and (fboundp 'coding-system-p) (coding-system-p sym))
+      (memq sym (mm-get-coding-system-list))))
+
 (defvar mm-charset-synonym-alist
-  '((big5 . cn-big5)
+  `((big5 . cn-big5)
     (gb2312 . cn-gb-2312)
     (cn-gb . cn-gb-2312)
+    ;; Windows-1252 is actually a superset of Latin-1.  See also
+    ;; `gnus-article-dumbquotes-map'.
+    ,(unless (mm-coding-system-p 'windows-1252) ; should be defined eventually
+       '(windows-1252 . iso-8859-1))
     (x-ctext . ctext))
   "A mapping from invalid charset names to the real charset names.")
 
-(defun mm-coding-system-p (sym)
-  "Return non-nil if SYM is a coding system."
-  (or (and (fboundp 'coding-system-p) (coding-system-p sym))
-      (memq sym (mm-get-coding-system-list))))
-
 (defvar mm-binary-coding-system
   (cond 
    ((mm-coding-system-p 'binary) 'binary)
 ;;; Functions:
 
 (defun mm-mule-charset-to-mime-charset (charset)
-  "Return the MIME charset corresponding to MULE CHARSET."
+  "Return the MIME charset corresponding to the given Mule CHARSET."
   (let ((alist mm-mime-mule-charset-alist)
        out)
     (while alist
@@ -208,7 +212,9 @@ used as the line break code type of the coding system."
    ;; ascii
    ((eq charset 'us-ascii)
     'ascii)
-   ;; Check to see whether we can handle this charset.
+   ;; Check to see whether we can handle this charset.  (This depends
+   ;; on there being some coding system matching each `mime-charset'
+   ;; coding sysytem property defined, as there should be.)
    ((memq charset (mm-get-coding-system-list))
     charset)
    ;; Nope.
@@ -219,14 +225,17 @@ used as the line break code type of the coding system."
   (mm-subst-char-in-string from to string))
 
 (defsubst mm-enable-multibyte ()
-  "Enable multibyte in the current buffer."
+  "Set the multibyte flag of the current buffer.
+Only do this if the default value of `enable-multibyte-characters' is
+non-nil.  This is a no-op in XEmacs."
   (when (and (fboundp 'set-buffer-multibyte)
              (boundp 'enable-multibyte-characters)
             (default-value 'enable-multibyte-characters))
     (set-buffer-multibyte t)))
 
 (defsubst mm-disable-multibyte ()
-  "Disable multibyte in the current buffer."
+  "Unset the multibyte flag of in the current buffer.
+This is a no-op in XEmacs."
   (when (fboundp 'set-buffer-multibyte)
     (set-buffer-multibyte nil)))
 
@@ -335,48 +344,26 @@ If the charset is `composition', return the actual one."
 
 (defmacro mm-with-unibyte-buffer (&rest forms)
   "Create a temporary buffer, and evaluate FORMS there like `progn'.
-See also `with-temp-file' and `with-output-to-string'."
-  (let ((temp-buffer (make-symbol "temp-buffer"))
-       (multibyte (make-symbol "multibyte")))
-    `(if (or (featurep 'xemacs)
-            (not (boundp 'enable-multibyte-characters)))
-        (with-temp-buffer ,@forms)
-       (let ((,multibyte (default-value 'enable-multibyte-characters))
-            ,temp-buffer)
-        (unwind-protect
-            (progn
-              (setq-default enable-multibyte-characters nil)
-              (setq ,temp-buffer
-                    (get-buffer-create (generate-new-buffer-name " *temp*")))
-              (unwind-protect
-                  (with-current-buffer ,temp-buffer
-                    (let ((buffer-file-coding-system mm-binary-coding-system)
-                          (coding-system-for-read mm-binary-coding-system)
-                          (coding-system-for-write mm-binary-coding-system))
-                      ,@forms))
-                (and (buffer-name ,temp-buffer)
-                     (kill-buffer ,temp-buffer))))
-          (setq-default enable-multibyte-characters ,multibyte))))))
+Use unibyte mode for this."
+  `(let (default-enable-multibyte-characters)
+     (with-temp-buffer ,@forms)))
 (put 'mm-with-unibyte-buffer 'lisp-indent-function 0)
 (put 'mm-with-unibyte-buffer 'edebug-form-spec '(body))
 
 (defmacro mm-with-unibyte-current-buffer (&rest forms)
-  "Evaluate FORMS there like `progn' in current buffer."
+  "Evaluate FORMS with current current buffer temporarily made unibyte.
+Also bind `default-enable-multibyte-characters' to nil.
+Equivalent to `progn' in XEmacs"
   (let ((multibyte (make-symbol "multibyte")))
-    `(if (or (featurep 'xemacs)
-            (not (fboundp 'set-buffer-multibyte)))
-        (progn
-          ,@forms)
-       (let ((,multibyte (default-value 'enable-multibyte-characters)))
-        (unwind-protect
-            (let ((buffer-file-coding-system mm-binary-coding-system)
-                  (coding-system-for-read mm-binary-coding-system)
-                  (coding-system-for-write mm-binary-coding-system))
-              (set-buffer-multibyte nil)
-              (setq-default enable-multibyte-characters nil)
-              ,@forms)
-          (setq-default enable-multibyte-characters ,multibyte)
-          (set-buffer-multibyte ,multibyte))))))
+    `(if (fboundp 'set-buffer-multibyte)
+        (let ((,multibyte enable-multibyte-characters))
+          (unwind-protect
+              (let (default-enable-multibyte-characters)
+                (set-buffer-multibyte nil)
+                ,@forms)
+            (set-buffer-multibyte ,multibyte)))
+       (progn
+        ,@forms))))
 (put 'mm-with-unibyte-current-buffer 'lisp-indent-function 0)
 (put 'mm-with-unibyte-current-buffer 'edebug-form-spec '(body))
 
@@ -404,22 +391,14 @@ Mule4 only."
 (put 'mm-with-unibyte-current-buffer-mule4 'edebug-form-spec '(body))
 
 (defmacro mm-with-unibyte (&rest forms)
-  "Set default `enable-multibyte-characters' to `nil', eval the FORMS."
-  (let ((multibyte (make-symbol "multibyte")))
-    `(if (or (featurep 'xemacs)
-            (not (boundp 'enable-multibyte-characters)))
-        (progn ,@forms)
-       (let ((,multibyte (default-value 'enable-multibyte-characters)))
-        (unwind-protect
-            (progn
-              (setq-default enable-multibyte-characters nil)
-              ,@forms)
-          (setq-default enable-multibyte-characters ,multibyte))))))
+  "Eval the FORMS with the default value of `enable-multibyte-characters' nil, ."
+  `(let (default-enable-multibyte-characters)
+     ,@forms))
 (put 'mm-with-unibyte 'lisp-indent-function 0)
 (put 'mm-with-unibyte 'edebug-form-spec '(body))
 
 (defun mm-find-charset-region (b e)
-  "Return a list of charsets in the region."
+  "Return a list of Emacs charsets in the region B to E."
   (cond
    ((and (mm-multibyte-p)
         (fboundp 'find-charset-region))
index 954879f..a8c7e35 100644 (file)
@@ -1,4 +1,4 @@
-;;; mm-uu.el -- Return uu stuffs as mm handles
+;;; mm-uu.el -- Return uu stuff as mm handles
 ;; Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
   (autoload 'uudecode-decode-region "uudecode")
   (autoload 'uudecode-decode-region-external "uudecode"))
 
+;; This is not the right place for this.  uudecode.el should decide
+;; whether or not to use a program with a single interface, but I
+;; guess it's too late now.  Also the default should depend on a test
+;; for the program.  -- fx
 (defcustom mm-uu-decode-function 'uudecode-decode-region
   "*Function to uudecode.
-Internal function is done in elisp by default, therefore decoding may
-appear to be horribly slow . You can make Gnus use the external Unix
+Internal function is done in Lisp by default, therefore decoding may
+appear to be horribly slow.  You can make Gnus use an external
 decoder, such as uudecode."
-  :type '(choice (item :tag "internal" uudecode-decode-region)
-                (item :tag "external" uudecode-decode-region-external))
-  :group 'gnus-article-mime) 
+  :type '(choice
+         (function-item :tag "Internal" uudecode-decode-region)
+         (function-item :tag "External" uudecode-decode-region-external))
+  :group 'gnus-article-mime)
 
 (defcustom mm-uu-binhex-decode-function 'binhex-decode-region
   "*Function to binhex decode.
@@ -152,7 +157,8 @@ To disable dissecting shar codes, for instance, add
   (nth 5 entry))
 
 (defun mm-uu-copy-to-buffer (&optional from to)
-  "Copy the contents of the current buffer to a fresh buffer."
+  "Copy the contents of the current buffer to a fresh buffer.
+Return that buffer."
   (save-excursion
     (let ((obuf (current-buffer)))
       (set-buffer (generate-new-buffer " *mm-uu*"))
index 1a1cbd7..6af6b1d 100644 (file)
@@ -523,8 +523,9 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
         (mail-header-encode-parameter
          (symbol-name type) value))))))
 
-(defvar ange-ftp-name-format)
-(defvar efs-path-regexp)
+(eval-when-compile
+  (defvar ange-ftp-name-format)
+  (defvar efs-path-regexp))
 (defun mml-parse-file-name (path)
   (if (if (boundp 'efs-path-regexp)
          (string-match efs-path-regexp path)
diff --git a/lisp/next-ur.pbm b/lisp/next-ur.pbm
new file mode 100644 (file)
index 0000000..678bbb0
Binary files /dev/null and b/lisp/next-ur.pbm differ
diff --git a/lisp/next-ur.xpm b/lisp/next-ur.xpm
new file mode 100644 (file)
index 0000000..8c823f2
--- /dev/null
@@ -0,0 +1,66 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 36 1",
+"  c Gray0",
+". c Gray6",
+"X c Gray9",
+"o c Gray12",
+"O c #23f323f323f3",
+"+ c Gray15",
+"@ c #2ff32ff32ff3",
+"# c #399939993999",
+"$ c #3fff3fff3fff",
+"% c #433243324332",
+"& c Gray28",
+"* c #4ccc4ccc4ccc",
+"= c #53ed53ed53ed",
+"- c #5ff05ff05ff0",
+"; c Gray40",
+": c #67e767e767e7",
+"> c #6ccc6ccc6ccc",
+", c #6fff6fff6fff",
+"< c Gray45",
+"1 c #77f277f277f2",
+"2 c #7bdb7bdb7bdb",
+"3 c #7ccc7ccc7ccc",
+"4 c Gray50",
+"5 c #866586658665",
+"6 c Gray56",
+"7 c Gray60",
+"8 c #9bd39bd39bd3",
+"9 c #9fff9fff9fff",
+"0 c Gray65",
+"q c #a7c7a7c7a7c7",
+"w c Gray70",
+"e c Gray75",
+"r c Gray81",
+"t c #dfffdfffdfff",
+"y c #efffefffefff",
+"u c Gray100",
+/* pixels */
+"wqewqewqewqewqewqewqewqe",
+"q6eq6eq6eq6eq6eq6eq6eq6e",
+"eeeeeeeeeeeeeeeeeeeeeeee",
+"wqewqewqewq82$.wqewqewqe",
+"q6eq6eq6e6@19u$-6eq6eq6e",
+"eeeeeeee==eyr$9@eeeeeeee",
+"wqewq82$ruuu or=qewqewqe",
+"q6e6@19uuuu94eue-eq6eq6e",
+"eeew&euuuuuruuuy18eeeeee",
+"wqew-8uuuuuuuuuu92wqewqe",
+"q6eq619uut44uuuuu$q6eq6e",
+"eeeeee29,-e@uuuuur=eeeee",
+"wqeee82$rye-$uuuuu=qewqe",
+"q6eq-19uu- e$uuuuue-eq6e",
+"ee==eyuuu -y99uuuuy18eee",
+"w&euuuuu,uuue4uuuuu92wqe",
+"q@euuuuuuuuut4tuuuueoq6e",
+"eq=u9$$$ruuuu4@$$r$;6eee",
+"wq=8,988%ruu8,98-+6qewqe",
+"q6e+wq888$et+wq888X6eq6e",
+"eee+88888.4-+88888@eeeee",
+"wqeO#6884,uu*5885<&qewqe",
+"q6eq@#**<uuut;**+&q6eq6e",
+"eeeeqOeeyuuuuteee=eeeeee"
+};
index 40fa4dd..8389e17 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nnbabyl.el --- rmail mbox access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1099, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
index a46ad74..f1a6635 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nndir.el --- single directory newsgroup access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
index 04b0229..a9c3bb6 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nneething.el --- arbitrary file access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
index 74c556c..65bd2cc 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nngateway.el --- posting news via mail gateways
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
index 1071e84..1ea1f32 100644 (file)
@@ -33,6 +33,9 @@
 
 (require 'mail-utils)
 (require 'mm-util)
+(eval-and-compile
+  (autoload 'gnus-intersection "gnus-range")
+  (autoload 'gnus-sorted-complement "gnus-range"))
 
 (defvar nnheader-max-head-length 4096
   "*Max length of the head of articles.")
@@ -805,8 +808,9 @@ If FILE, find the \".../etc/PACKAGE\" file instead."
        (setq path (cdr path))))
     result))
 
-(defvar ange-ftp-path-format)
-(defvar efs-path-regexp)
+(eval-when-compile
+  (defvar ange-ftp-path-format)
+  (defvar efs-path-regexp))
 (defun nnheader-re-read-dir (path)
   "Re-read directory PATH if PATH is on a remote system."
   (if (and (fboundp 'efs-re-read-dir) (boundp 'efs-path-regexp))
index d961f84..1ad6f8c 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nnkiboze.el --- select virtual news access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
index 79b08b8..666cd70 100644 (file)
@@ -1,5 +1,6 @@
 ;;; nnlistserv.el --- retrieving articles via web mailing list archives
-;; Copyright (C) 1997,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
 (eval-when-compile (require 'cl))
 
 (require 'nnoo)
-(require 'nnweb)
+(eval-when-compile
+  (ignore-errors
+   (require 'nnweb))                   ; requires W3
+  (autoload 'url-insert-file-contents "nnweb"))
 
 (nnoo-declare nnlistserv
   nnweb)
index 002fbf0..6ccc1ca 100644 (file)
@@ -175,6 +175,7 @@ messages end up in that group.  If it is a function, the function is
 called in a buffer narrowed to the message in question.  The function
 receives one argument, the name of the group the message comes from.
 The return value should be `delete' or a group name (a string)."
+  :version "21.1"
     :group 'nnmail-expire
     :type '(choice (const delete)
                   (function :format "%v" nnmail-)
@@ -201,6 +202,7 @@ This variable is obsolete; `mail-sources' should be used instead."
 (defcustom nnmail-scan-directory-mail-source-once nil
   "*If non-nil, scan all incoming procmail sorted mails once.
 It scans low-level sorted spools even when not required."
+  :version "21.1"
   :group 'nnmail-procmail
   :type 'boolean)
 
@@ -419,11 +421,13 @@ parameter.  It should return nil, `warn' or `delete'."
 
 (defcustom nnmail-extra-headers nil
   "*Extra headers to parse."
+  :version "21.1"
   :group 'nnmail
   :type '(repeat symbol))
 
 (defcustom nnmail-split-header-length-limit 512
   "Header lines longer than this limit are excluded from the split function."
+  :version "21.1"
   :group 'nnmail
   :type 'integer)
 
index 02e1a27..b087561 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nnmbox.el --- mail mbox access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
index 22555f8..9fe89c0 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nnmh.el --- mhspool access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
index 64ca0b2..1d078e8 100644 (file)
@@ -35,6 +35,8 @@
 (require 'nnmail)
 (require 'nnoo)
 (eval-when-compile (require 'cl))
+(eval-and-compile
+  (autoload 'gnus-sorted-intersection "gnus-range"))
 
 (nnoo-declare nnml)
 
@@ -749,7 +751,7 @@ all.  This may very well take some time.")
        (unless no-active
          (nnmail-save-active nnml-group-alist nnml-active-file))))))
 
-(defvar files)
+(eval-when-compile (defvar files))
 (defun nnml-generate-active-info (dir)
   ;; Update the active info for this group.
   (let ((group (nnheader-file-to-group
index fd07a5f..ec24a28 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nnoo.el --- OO Gnus Backends
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
index c6b1925..93451d1 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nnsoup.el --- SOUP access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
index 1ff3701..5815036 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nnspool.el --- spool access for GNU Emacs
-;; Copyright (C) 1988,89,90,93,94,95,96,97,98 Free Software Foundation, Inc.
+
+;; Copyright (C) 1988, 1989, 1990, 1993, 1994, 1995, 1996, 1997, 1998,
+;;     2000 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
index 9b1bde5..5232213 100644 (file)
@@ -181,7 +181,7 @@ server there that you can connect to.  See also
 (defvoo nntp-connection-timeout nil
   "*Number of seconds to wait before an nntp connection times out.
 If this variable is nil, which is the default, no timers are set.
-NOTE: This variable is never seen to work in FSF Emacs 20 and XEmacs 21.")
+NOTE: This variable is never seen to work in Emacs 20 and XEmacs 21.")
 
 ;;; Internal variables.
 
@@ -1083,7 +1083,7 @@ password contained in '~/.nntp-authinfo'."
     ;; Delete status line.
     (goto-char (point-min))
     (while (looking-at "[1-5][0-9][0-9] .*\n")
-      ;; For some unknown reason, there are more than one status lines.
+      ;; For some unknown reason, there is more than one status line.
       (delete-region (point) (progn (forward-line 1) (point))))
     ;; Remove "." -> ".." encoding.
     (while (search-forward "\n.." nil t)
index a326af6..baaf17c 100644 (file)
@@ -1,4 +1,4 @@
-;;; nnultimate.el --- interfacing with the Ultimate Bulletin Board system
+;;; nnultimate.el --- interfacing with the Ultimate Bulletin Board system -*- coding: iso-latin-1 -*-
 ;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
index e7aade1..716bc0f 100644 (file)
     (require 'w3)
     (require 'url)
     (require 'w3-forms)))
+
 ;; Report failure to find w3 at load time if appropriate.
-(eval '(progn
-        (require 'w3)
-        (require 'url)
-        (require 'w3-forms)))
+(unless noninteractive
+  (eval '(progn
+          (require 'w3)
+          (require 'url)
+          (require 'w3-forms))))
 
 (nnoo-declare nnweb)
 
index 06e35d3..d003251 100644 (file)
@@ -1,8 +1,8 @@
 ;;; parse-time.el --- Parsing time strings
 
-;; Copyright (C) 1996,2000 by Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2000 by Free Software Foundation, Inc.
 
-;; Author: Erik Naggum <erik@arcana.naggum.no>
+;; Author: Erik Naggum <erik@naggum.no>
 ;; Keywords: util
 
 ;; This file is part of GNU Emacs.
index 622bbca..aa040d2 100644 (file)
@@ -6,7 +6,6 @@
 ;; Author: Richard L. Pieri <ratinox@peorth.gweep.net>
 ;; Maintainer: FSF
 ;; Keywords: mail
-;; Version: 1.3s
 
 ;; This file is part of GNU Emacs.
 
@@ -38,8 +37,6 @@
 
 (require 'mail-utils)
 
-(defconst pop3-version "1.3s")
-
 (defvar pop3-maildrop (or (user-login-name) (getenv "LOGNAME") (getenv "USER") nil)
   "*POP3 maildrop.")
 (defvar pop3-mailhost (or (getenv "MAILHOST") nil)
@@ -192,9 +189,31 @@ Return the response string if optional second argument is non-nil."
       (forward-char)))
   (set-marker end nil))
 
+(eval-when-compile (defvar parse-time-months))
+
+;; Copied from message-make-date.
+(defun pop3-make-date (&optional now)
+  "Make a valid date header.
+If NOW, use that time instead."
+  (require 'parse-time)
+  (let* ((now (or now (current-time)))
+        (zone (nth 8 (decode-time now)))
+        (sign "+"))
+    (when (< zone 0)
+      (setq sign "-")
+      (setq zone (- zone)))
+    (concat
+     (format-time-string "%d" now)
+     ;; The month name of the %b spec is locale-specific.  Pfff.
+     (format " %s "
+            (capitalize (car (rassoc (nth 4 (decode-time now))
+                                     parse-time-months))))
+     (format-time-string "%Y %H:%M:%S " now)
+     ;; We do all of this because XEmacs doesn't have the %z spec.
+     (format "%s%02d%02d" sign (/ zone 3600) (/ (% zone 3600) 60)))))
+
 (defun pop3-munge-message-separator (start end)
   "Check to see if a message separator exists.  If not, generate one."
-  (if (not (fboundp 'message-make-date)) (autoload 'message-make-date "message"))
   (save-excursion
     (save-restriction
       (narrow-to-region start end)
@@ -205,7 +224,7 @@ Return the response string if optional second argument is non-nil."
                   ))
          (let ((from (mail-strip-quoted-names (mail-fetch-field "From")))
                (date (split-string (or (mail-fetch-field "Date")
-                                       (message-make-date))
+                                       (pop3-make-date))
                                    " "))
                (From_))
            ;; sample date formats I have seen
@@ -277,19 +296,21 @@ Return the response string if optional second argument is non-nil."
 
 ;; TRANSACTION STATE
 
-(defvar pop3-md5-program "md5"
-  "*Program to encode its input in MD5.")
-
-(defun pop3-md5 (string)
-  (with-temp-buffer
-    (insert string)
-    (call-process-region (point-min) (point-max)
-                        (or shell-file-name "/bin/sh")
-                        t (current-buffer) nil
-                        "-c" pop3-md5-program)
-    ;; The meaningful output is the first 32 characters.
-    ;; Don't return the newline that follows them!
-    (buffer-substring (point-min) (+ (point-min) 32))))
+(eval-and-compile
+  (if (fboundp 'md5)
+      (defalias 'pop3-md5 'md5)
+    (defvar pop3-md5-program "md5"
+      "*Program to encode its input in MD5.")
+
+    (defun pop3-md5 (string)
+      (with-temp-buffer
+       (insert string)
+       (call-process-region (point-min) (point-max)
+                            pop3-md5-program
+                            t (current-buffer) nil)
+       ;; The meaningful output is the first 32 characters.
+       ;; Don't return the newline that follows them!
+       (buffer-substring 1 33)))))
 
 (defun pop3-stat (process)
   "Return the number of messages in the maildrop and the maildrop's size."
diff --git a/lisp/post.pbm b/lisp/post.pbm
new file mode 100644 (file)
index 0000000..577d623
Binary files /dev/null and b/lisp/post.pbm differ
diff --git a/lisp/post.xpm b/lisp/post.xpm
new file mode 100644 (file)
index 0000000..008cdc7
--- /dev/null
@@ -0,0 +1,53 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 23 1",
+"  c Gray0",
+". c Gray6",
+"X c Gray12",
+"o c #2ff22ff22ff2",
+"O c #3fff3fff3fff",
+"+ c Gray28",
+"@ c #53ee53ee53ee",
+"# c #5fdf5fdf5fdf",
+"$ c #67e767e767e7",
+"% c #6fff6fff6fff",
+"& c #77f777f777f7",
+"* c #7bdb7bdb7bdb",
+"= c Gray50",
+"- c Gray56",
+"; c #9bd69bd69bd6",
+": c #9fff9fff9fff",
+"> c #a7c7a7c7a7c7",
+", c Gray70",
+"< c Gray75",
+"1 c Gray81",
+"2 c #dfffdfffdfff",
+"3 c #efffefffefff",
+"4 c Gray100",
+/* pixels */
+",><,><,><,><,><,><,><,><",
+">-<>-<>-<>-<>-<>-<>-<>-<",
+"<<<<<<<<<<<<<<<<<<<<<<<<",
+",><,><,><,>;*O.,><,><,><",
+">-<>-<>-<-o&:4O#-<>-<>-<",
+"<<<<<<<<@@<31O:o<<<<<<<<",
+",><,>;*O1444 X1@><,><,><",
+">-<-o&:4444:=<4<#<>-<>-<",
+"<<<,+<4444414443&;<<<<<<",
+",><,#;4444444444:*,><,><",
+">-<>-o44444444444O>-<>-<",
+"<<<<<;%44444444441@<<<<<",
+",><,><@24444444444@><,><",
+">-<>-<-=4444444444<#<>-<",
+"<<<<<<,$14444444443&;<<<",
+",><,><,#;4444444444:*,><",
+">-<>-<>-o4444444444<X>-<",
+"<<<<<<<<;%4444444%O$-<<<",
+",><,><,><@24444<&;,><,><",
+">-<>-<>-<-=42==#-<>-<>-<",
+"<<<<<<<<<,$Oo+-<<<<<<<<<",
+",><,><,><,><,><,><,><,><",
+">-<>-<>-<>-<>-<>-<>-<>-<",
+"<<<<<<<<<<<<<<<<<<<<<<<<"
+};
diff --git a/lisp/prev-ur.pbm b/lisp/prev-ur.pbm
new file mode 100644 (file)
index 0000000..4938919
Binary files /dev/null and b/lisp/prev-ur.pbm differ
diff --git a/lisp/prev-ur.xpm b/lisp/prev-ur.xpm
new file mode 100644 (file)
index 0000000..7c3db24
--- /dev/null
@@ -0,0 +1,65 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 35 1",
+"  c Gray0",
+". c Gray6",
+"X c Gray9",
+"o c Gray12",
+"O c #23f323f323f3",
+"+ c Gray15",
+"@ c #2ff22ff22ff2",
+"# c #399939993999",
+"$ c #3fff3fff3fff",
+"% c Gray28",
+"& c #53ed53ed53ed",
+"* c Gray35",
+"= c #5b1a5b1a5b1a",
+"- c Gray36",
+"; c #5fef5fef5fef",
+": c Gray40",
+"> c #67e767e767e7",
+", c #6ffa6ffa6ffa",
+"< c Gray45",
+"1 c #77ea77ea77ea",
+"2 c #799979997999",
+"3 c #7bdb7bdb7bdb",
+"4 c Gray50",
+"5 c Gray56",
+"6 c Gray60",
+"7 c #9bde9bde9bde",
+"8 c #9fff9fff9fff",
+"9 c #a7c7a7c7a7c7",
+"0 c #acccacccaccc",
+"q c Gray70",
+"w c Gray75",
+"e c Gray81",
+"r c #dfffdfffdfff",
+"t c #efffefffefff",
+"y c Gray100",
+/* pixels */
+"q9wq9wq9wq9wq9wq9wq9wq9w",
+"95w95w95w95w95w95w95w95w",
+"wwwwwwwwwwwwwwwwwwwwwwww",
+"q9wq9wq9wq973$.q9wq9wq9w",
+"95w95w95w5@18y$;5w95w95w",
+"wwwwwwww&&wte$8@wwwwwwww",
+"q9wq973$eyyy oe&9wq9wq9w",
+"95w5@18yyyy84wyw;w95w95w",
+"wwwq%wyyyyyeyyyt17wwwwww",
+"q9wq;7yyyyyyyyyy45q9wq9w",
+"95w9518yyr44yyyy4%%@995w",
+"wwwww&.3;;w@yyye=<<#Owww",
+"q9wq=;:$etw;$rt+w0777O9w",
+"95w5+<8yy; wo44+77777X5w",
+"ww&&wtyyy ;t@re+77777@ww",
+"q%wyyyyy,yyyw4ye=<<#Oq9w",
+"9@wyyyyyyyyyr4rywo;;995w",
+"w9&yyyyyyyyyy4we$3wwwwww",
+"q9&eyyyyyyyyyy,@wwq9wq9w",
+"95w$yyyyyyyyyyy@ww95w95w",
+"www38yyyyyyyyyy71wwwwwww",
+"q9w54yyyyyyyyyye:qq9wq9w",
+"95w9,ryyyyyyyyyy4595w95w",
+"wwww9&yyyyyyyyyyr&wwwwww"
+};
index 4dccdcf..8c0e218 100644 (file)
@@ -1,7 +1,10 @@
 ;;; qp.el --- Quoted-Printable functions
+
 ;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Keywords: mail, extensions
+
 ;; This file is part of GNU Emacs.
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 
 ;;; Commentary:
 
+;; Functions for encoding and decoding quoted-printable text as
+;; defined in RFC 2045.
+
 ;;; Code:
 
 (require 'mm-util)
+(eval-when-compile (defvar mm-use-ultra-safe-encoding))
 
-(defvar quoted-printable-encoding-characters
-  (mapcar 'identity "0123456789ABCDEFabcdef"))
-
-(defun quoted-printable-decode-region (from to &optional charset)
-  "Decode quoted-printable in the region between FROM and TO.
-If CHARSET is non-nil, decode the region with charset."
+(defun quoted-printable-decode-region (from to &optional coding-system)
+  "Decode quoted-printable in the region between FROM and TO, per RFC 2045.
+If CODING-SYSTEM is non-nil, decode bytes into characters with that
+coding-system."
   (interactive "r")
+  (unless (mm-coding-system-p coding-system) ; e.g. `ascii' from Gnus
+    (setq coding-system nil))
   (save-excursion
     (save-restriction
-      (let (start)
+      ;; RFC 2045:  ``An "=" followed by two hexadecimal digits, one
+      ;; or both of which are lowercase letters in "abcdef", is
+      ;; formally illegal. A robust implementation might choose to
+      ;; recognize them as the corresponding uppercase letters.''
+      (let ((case-fold-search t))
        (narrow-to-region from to)
-       (goto-char from)
-       (while (not (eobp))
-         (cond 
-          ((eq (char-after) ?=)
-           (delete-char 1)
-           (unless start
-             (setq start (point)))
-           (cond
-            ;; End of the line.
-            ((eq (char-after) ?\n)
-             (delete-char 1))
-            ;; Encoded character.
-            ((and
-              (memq (char-after) quoted-printable-encoding-characters)
-              (memq (char-after (1+ (point)))
-                    quoted-printable-encoding-characters))
-             (insert
-              (string-to-number
-               (buffer-substring (point) (+ 2 (point)))
-               16))
-             (delete-char 2))
-            ;; Quoted equal sign.
-            ((eq (char-after) ?=)
-             (forward-char 1))
-            ;; End of buffer.
-            ((eobp))
-            ;; Invalid.
-            (t
-             (message "Malformed MIME quoted-printable message"))))
-          ((and charset start (not (eq (mm-charset-after) 'ascii)))
-           (mm-decode-coding-region start (point) charset)
-           (setq start nil)
-           (forward-char 1))
-          (t
-           (forward-char 1))))
-       (if (and charset start)
-           (mm-decode-coding-region start (point) charset))))))
-
-(defun quoted-printable-decode-string (string &optional charset)
-  "Decode the quoted-printable-encoded STRING and return the results.
-If CHARSET is non-nil, decode the region with charset."
+       ;; Do this in case we're called from Gnus, say, in a buffer
+       ;; which already contains non-ASCII characters which would
+       ;; then get doubly-decoded below.
+       (if coding-system
+           (mm-encode-coding-region (point-min) (point-max) coding-system))
+       (goto-char (point-min))
+       (while (and (skip-chars-forward "^=" to)
+                   (not (eobp)))
+         (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)))
+                  (insert byte)
+                  (delete-char 3)
+                  (unless (eq byte ?=)
+                    (backward-char))))
+               (t
+                (error "Malformed quoted-printable text")
+                (forward-char)))))
+      (if coding-system
+         (mm-decode-coding-region (point-min) (point-max) coding-system)))))
+
+(defun quoted-printable-decode-string (string &optional coding-system)
+  "Decode the quoted-printable encoded STRING and return the result.
+If CODING-SYSTEM is non-nil, decode the region with coding-system."
   (with-temp-buffer
     (insert string)
-    (quoted-printable-decode-region (point-min) (point-max) charset)
+    (quoted-printable-decode-region (point-min) (point-max) coding-system)
     (buffer-string)))
 
 (defun quoted-printable-encode-region (from to &optional fold class)
-  "QP-encode the region between FROM and TO.
+  "Quoted-printable encode the region between FROM and TO per RFC 2045.
 
-If FOLD fold long lines.  If CLASS, translate the characters 
-matched by that regexp.
+If FOLD, fold long lines at 76 characters (as required by the RFC).
+If CLASS is non-nil, translate the characters matched by that class in
+the form expected by `skip-chars-forward'.
 
-If `mm-use-ultra-safe-encoding' is set, fold unconditionally and
+If `mm-use-ultra-safe-encoding' is set, fold lines unconditionally and
 encode lines starting with \"From\"."
   (interactive "r")
+  (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"))
+  (if (fboundp 'string-as-multibyte)
+      (setq class (string-as-multibyte class)))
   (save-excursion
     (save-restriction
       (narrow-to-region from to)
       (mm-with-unibyte-current-buffer-mule4
-       ;;      (mm-encode-body)
+       ;; Fixme: what should this do in XEmacs/Mule?
+       (if (fboundp 'find-charset-region)      ; else XEmacs, non-Mule
+           (if (delq 'unknown          ; Emacs 20 unibyte
+                     (delq 'eight-bit-graphic ; Emacs 21
+                           (delq 'eight-bit-control
+                                 (delq 'ascii 
+                                       (find-charset-region from to)))))
+               (error "Multibyte character in QP encoding region")))
        ;; Encode all the non-ascii and control characters.
        (goto-char (point-min))
-       (while (and (skip-chars-forward
-                    ;; Avoid using 8bit characters. = is \075.
-                    ;; Equivalent to "^\000-\007\013\015-\037\200-\377="
-                    (or class "\010-\012\014\040-\074\076-\177"))
+       (while (and (skip-chars-forward class)
                    (not (eobp)))
          (insert
           (prog1
-              (upcase (format "=%02x" (char-after)))
+              (format "=%02x" (upcase (char-after)))
             (delete-char 1))))
        ;; Encode white space at the end of lines.
        (goto-char (point-min))
@@ -114,38 +122,41 @@ encode lines starting with \"From\"."
          (while (not (eolp))
            (insert
             (prog1
-                (upcase (format "=%02x" (char-after)))
+                (format "=%02x" (upcase (char-after)))
               (delete-char 1)))))
-       (when (or fold mm-use-ultra-safe-encoding)
-         ;; Fold long lines.
-         (let ((tab-width 1));; HTAB is one character.
-           (goto-char (point-min))
-           (while (not (eobp))
-             ;; In ultra-safe mode, encode "From " at the beginning of a
-             ;; line.
-             (when mm-use-ultra-safe-encoding
-               (beginning-of-line)
-               (if (looking-at "From ")
-                   (replace-match "From=20" nil t)
-                 (if (looking-at "-")
-                     (replace-match "=2D" nil t))))
-             (end-of-line)
-             (while (> (current-column) 76);; tab-width must be 1.
+       (let ((mm-use-ultra-safe-encoding
+              (and (boundp 'mm-use-ultra-safe-encoding)
+                   mm-use-ultra-safe-encoding)))
+         (when (or fold mm-use-ultra-safe-encoding)
+           ;; Fold long lines.
+           (let ((tab-width 1))                ; HTAB is one character.
+             (goto-char (point-min))
+             (while (not (eobp))
+               ;; In ultra-safe mode, encode "From " at the beginning
+               ;; of a line.
+               (when mm-use-ultra-safe-encoding
+                 (beginning-of-line)
+                 (if (looking-at "From ")
+                     (replace-match "From=20" nil t)
+                   (if (looking-at "-")
+                       (replace-match "=2D" nil t))))
+               (end-of-line)
+             (while (> (current-column) 76) ; tab-width must be 1.
                (beginning-of-line)
-               (forward-char 75);; 75 chars plus an "="
+               (forward-char 75)       ; 75 chars plus an "="
                (search-backward "=" (- (point) 2) t)
                (insert "=\n")
                (end-of-line))
              (unless (eobp)
-               (forward-line)))))))))
-
+               (forward-line))))))))))
+  
 (defun quoted-printable-encode-string (string)
-  "QP-encode STRING and return the results."
-  (mm-with-unibyte-buffer
+  "Encode the STRING as quoted-printable and return the result."
+  (with-temp-buffer
     (insert string)
     (quoted-printable-encode-region (point-min) (point-max))
     (buffer-string)))
 
 (provide 'qp)
 
-;; qp.el ends here
+;;; qp.el ends here
diff --git a/lisp/reply-wo.pbm b/lisp/reply-wo.pbm
new file mode 100644 (file)
index 0000000..def54da
Binary files /dev/null and b/lisp/reply-wo.pbm differ
diff --git a/lisp/reply-wo.xpm b/lisp/reply-wo.xpm
new file mode 100644 (file)
index 0000000..fb45d4c
--- /dev/null
@@ -0,0 +1,65 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 35 1",
+"  c Gray0",
+". c Gray6",
+"X c Gray9",
+"o c Gray12",
+"O c #23f323f323f3",
+"+ c #2ffe2ffe2ffe",
+"@ c #399939993999",
+"# c #3fff3fff3fff",
+"$ c Gray25",
+"% c #499949994999",
+"& c #4ccc4ccc4ccc",
+"* c #519151915191",
+"= c #53f353f353f3",
+"- c Gray35",
+"; c #5feb5feb5feb",
+": c #67e767e767e7",
+"> c #6fff6fff6fff",
+", c Gray45",
+"< c #77ef77ef77ef",
+"1 c #7bdb7bdb7bdb",
+"2 c Gray50",
+"3 c Gray56",
+"4 c Gray60",
+"5 c #9bd39bd39bd3",
+"6 c #9fff9fff9fff",
+"7 c Gray64",
+"8 c #a7c7a7c7a7c7",
+"9 c Gray70",
+"0 c #b998b998b998",
+"q c #bcccbcccbccc",
+"w c Gray75",
+"e c Gray81",
+"r c #dfffdfffdfff",
+"t c #efffefffefff",
+"y c Gray100",
+/* pixels */
+"wwwwwwwwwwwwwwwwwwwwwwww",
+"wwwwwwwwwwwwwwwwwwwwwwww",
+"wwwwwwwwwwwwwwwwwwwwwwww",
+"wwwwwwwwwww5+o1wwwwwwwww",
+"wwwwwwwwww3<w26;3wwwwwww",
+"wwwwwwwww5<tw2yw<5wwwwww",
+"wwwwww93=#yy#yyyy>O8wwww",
+"wwwww<:226yy#yyyw2 ;wwww",
+"www5+5e66yyy#6##2w X5www",
+"w8=>ye#6yy2+#6yyr+9y>$8w",
+"w;;yw2yw22#wyyyr#@9yy@;w",
+"w;3#o+#2w3;tyyy+@3w##3;w",
+"w;wyy>wry66yyr+%0;>yyw;w",
+"w;wyyy222#yyr#;-2ryyyw;w",
+"7=wyyyyrw.6y+ +wryyyyw=7",
+"5&wyyyyye#o3.#6yyyyyyw&5",
+"5&wyyyyw2yw26y66yyyyyw&5",
+"5&wyyye2tyyyyyy66yyyyw&5",
+"5&wyr;>yyyyyyyyy6#eyyw&5",
+"5&wr2ryyyyyyyyyyyy2wyw&5",
+"5&+;ryyyyyyyyyyyyyt2#+&5",
+"5& wwwwwwwwwwwwwwwwww &5",
+"5,&&&&&&&&&&&&&&&&&&&&,5",
+"555555555555555555555555"
+};
diff --git a/lisp/reply.pbm b/lisp/reply.pbm
new file mode 100644 (file)
index 0000000..ee181e6
Binary files /dev/null and b/lisp/reply.pbm differ
diff --git a/lisp/reply.xpm b/lisp/reply.xpm
new file mode 100644 (file)
index 0000000..20dd102
--- /dev/null
@@ -0,0 +1,64 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 34 1",
+"  c Gray0",
+". c Gray6",
+"X c Gray9",
+"o c Gray12",
+"O c #2ffb2ffb2ffb",
+"+ c #399939993999",
+"@ c #3fff3fff3fff",
+"# c Gray25",
+"$ c #499949994999",
+"% c #4ccc4ccc4ccc",
+"& c #519151915191",
+"* c #53f353f353f3",
+"= c Gray35",
+"- c #5feb5feb5feb",
+"; c #67e767e767e7",
+": c #6fff6fff6fff",
+"> c Gray45",
+", c #77ef77ef77ef",
+"< c Gray50",
+"1 c Gray56",
+"2 c #933293329332",
+"3 c Gray60",
+"4 c #9bd29bd29bd2",
+"5 c #9fff9fff9fff",
+"6 c Gray64",
+"7 c #a7c7a7c7a7c7",
+"8 c Gray70",
+"9 c #b998b998b998",
+"0 c #bcccbcccbccc",
+"q c Gray75",
+"w c Gray81",
+"e c #dfffdfffdfff",
+"r c #efffefffefff",
+"t c Gray100",
+/* pixels */
+"qqqqqqqqqqqqqqqqqqqqqqqq",
+"qqqqqqqqqqqqqqqqqqqqqqqq",
+"qqqqqqqqqqqqqqqqqqqqqqqq",
+"qqqqqqqqqqqqqq4qqqqqqqqq",
+"qqqqqqqqqqqqq1,-1qqqqqqq",
+"qqqqqqqqq4OO4,rq,4qqqqqq",
+"qqqqqq81*:tw:tttt:*7qqqq",
+"qqqqq,;<etq<tttttt--qqqq",
+"qqq4O4wttt<qttttt: X4qqq",
+"q7*Oewrew55ttttteO6qO#7q",
+"q--<q5eq@5ttttte@+2<<+-q",
+"q-1@@wtt@ttttttO+1q@@1-q",
+"q-qtt:q<wtttteO$9-:ttq-q",
+"q-qttt<<<ttte@-=<etttq-q",
+"6*qtttteq:ttO Oqettttq*6",
+"4%qtttttw@o1.@5ttttttq%4",
+"4%qttttq<tq<5t55tttttq%4",
+"4%qtttw<rtttttt55ttttq%4",
+"4%qte-:ttttttttt5@wttq%4",
+"4%qe<etttttttttttt<qtq%4",
+"4%O-etttttttttttttr<@O%4",
+"4% qqqqqqqqqqqqqqqqqq %4",
+"4>%%%%%%%%%%%%%%%%%%%%>4",
+"444444444444444444444444"
+};
index 1a5950d..70c8c39 100644 (file)
@@ -1,5 +1,6 @@
 ;;; rfc2045.el --- Functions for decoding rfc2045 headers
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
@@ -18,6 +19,9 @@
 ;; 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.
+  
+;; RFC 2045 is: "Multipurpose Internet Mail Extensions (MIME) Part
+;; One:  Format of Internet Message Bodies".
 
 ;;; Commentary:
 
index 529e211..79bdba5 100644 (file)
 
 ;;; Commentary:
 
+;; RFC 2047 is "MIME (Multipurpose Internet Mail Extensions) Part
+;; Three:  Message Header Extensions for Non-ASCII Text".
+
 ;;; Code:
 
 (eval-when-compile (require 'cl))
-(eval-and-compile
-  (eval
-   '(unless (fboundp 'base64-decode-string)
-      (require 'base64))))
 
 (require 'qp)
 (require 'mm-util)
 (require 'ietf-drums)
 (require 'mail-prsvr)
+(require 'base64)
+;; Fixme: Avoid this (for gnus-point-at-...) mm dependence on gnus.
+(require 'gnus-util)
+(autoload 'mm-body-7-or-8 "mm-bodies")
 
 (defvar rfc2047-header-encoding-alist
   '(("Newsgroups" . nil)
@@ -43,7 +46,7 @@
     (t . mime))
   "*Header/encoding method alist.
 The list is traversed sequentially.  The keys can either be
-header regexps or `t'.
+header regexps or t.
 
 The values can be:
 
@@ -128,8 +131,8 @@ Should be called narrowed to the head of the message."
                        (car message-posting-charset)))
                       ;; 8 bit must be decoded.
                       ;; Is message-posting-charset a coding system?
-                      (mm-encode-coding-region 
-                       (point-min) (point-max) 
+                      (mm-encode-coding-region
+                       (point-min) (point-max)
                        (car message-posting-charset)))
            ;; We found something that may perhaps be encoded.
            (setq method nil
@@ -147,8 +150,10 @@ Should be called narrowed to the head of the message."
              (rfc2047-encode-region (point-min) (point-max)))
             ((eq method 'default)
              (if (and (featurep 'mule)
+                      (if (boundp 'default-enable-multibyte-characters)
+                          default-enable-multibyte-characters)
                       mail-parse-charset)
-                 (mm-encode-coding-region (point-min) (point-max) 
+                 (mm-encode-coding-region (point-min) (point-max)
                                           mail-parse-charset)))
             ((null method)
              (and (delq 'ascii 
@@ -163,14 +168,17 @@ Should be called narrowed to the head of the message."
                       (rfc2047-encode-region (point-min) (point-max))
                     (error "Cannot send unencoded text."))))
             ((mm-coding-system-p method)
-             (if (featurep 'mule)
+             (if (and (featurep 'mule)
+                      (if (boundp 'default-enable-multibyte-characters)
+                          default-enable-multibyte-characters))
                  (mm-encode-coding-region (point-min) (point-max) method)))
             ;; Hm.
             (t)))
          (goto-char (point-max)))))))
 
-(defun rfc2047-encodable-p (&optional header)
-  "Say whether the current (narrowed) buffer contains characters that need encoding in headers."
+(defun rfc2047-encodable-p ()
+  "Return non-nil if any characters in current buffer need encoding in headers.
+The buffer may be narrowed."
   (let ((charsets
         (mapcar
          'mm-mime-charset
@@ -198,7 +206,7 @@ Should be called narrowed to the head of the message."
        (setq point (point))
        (skip-chars-backward word-chars b)
        (unless (eq b (point))
-         (push (cons (buffer-substring b (point)) nil) words)) 
+         (push (cons (buffer-substring b (point)) nil) words))
        (setq b (point))
        (goto-char point)
        (setq current (mm-charset-after))
@@ -209,7 +217,7 @@ Should be called narrowed to the head of the message."
          (forward-char 1)
          (skip-chars-forward word-chars))
        (unless (eq b (point))
-         (push (cons (buffer-substring b (point)) current) words)) 
+         (push (cons (buffer-substring b (point)) current) words))
        (setq b (point))
        (skip-chars-forward "\000-\177"))
       (unless (eq b (point))
@@ -217,14 +225,14 @@ Should be called narrowed to the head of the message."
     ;; merge adjacent words
     (setq word (pop words))
     (while word
-      (if (and (cdr word) 
+      (if (and (cdr word)
               (caar words)
               (not (cdar words))
               (not (string-match "[^ \t]" (caar words))))
          (if (eq (cdr (nth 1 words)) (cdr word))
              (progn
-               (setq word (cons (concat 
-                                 (car (nth 1 words)) (caar words) 
+               (setq word (cons (concat
+                                 (car (nth 1 words)) (caar words)
                                  (car word))
                                 (cdr word)))
                (pop words)
@@ -238,7 +246,7 @@ Should be called narrowed to the head of the message."
     result))
 
 (defun rfc2047-encode-region (b e &optional word-chars)
-  "Encode all encodable words in REGION."
+  "Encode all encodable words in region."
   (let ((words (rfc2047-dissect-region b e word-chars)) word)
     (save-restriction
       (narrow-to-region b e)
@@ -253,8 +261,8 @@ Should be called narrowed to the head of the message."
                              (gnus-point-at-bol))) 76)
              (insert "\n "))
          ;; Insert blank between encoded words
-         (if (eq (char-before) ?=) (insert " ")) 
-         (rfc2047-encode (point) 
+         (if (eq (char-before) ?=) (insert " "))
+         (rfc2047-encode (point)
                          (progn (insert (car word)) (point))
                          (cdr word))))
       (rfc2047-fold-region (point-min) (point-max)))))
@@ -267,7 +275,7 @@ Should be called narrowed to the head of the message."
     (buffer-string)))
 
 (defun rfc2047-encode (b e charset)
-  "Encode the word in the region with CHARSET."
+  "Encode the word in the region B to E with CHARSET."
   (let* ((mime-charset (mm-mime-charset charset))
         (encoding (or (cdr (assq mime-charset
                                  rfc2047-charset-encoding-alist))
@@ -301,7 +309,7 @@ Should be called narrowed to the head of the message."
        (forward-line 1)))))
 
 (defun rfc2047-fold-region (b e)
-  "Fold the long lines in the region."
+  "Fold long lines in the region."
   (save-restriction
     (narrow-to-region b e)
     (goto-char (point-min))
@@ -354,7 +362,7 @@ Should be called narrowed to the head of the message."
        (forward-char 1)))))
 
 (defun rfc2047-unfold-region (b e)
-  "Fold the long lines in the region."
+  "Unfold lines in the region."
   (save-restriction
     (narrow-to-region b e)
     (goto-char (point-min))
@@ -370,7 +378,7 @@ Should be called narrowed to the head of the message."
        (if (< (- (gnus-point-at-eol) bol leading) 76)
            (progn
              (goto-char eol)
-             (delete-region eol (progn 
+             (delete-region eol (progn
                                   (skip-chars-forward "[ \t\n\r]+")
                                   (1- (point)))))
          (setq bol (gnus-point-at-bol)))
@@ -378,7 +386,7 @@ Should be called narrowed to the head of the message."
        (forward-line 1)))))
 
 (defun rfc2047-b-encode-region (b e)
-  "Encode the header contained in REGION with the B encoding."
+  "Base64-encode the header contained in region B to E."
   (save-restriction
     (narrow-to-region (goto-char b) e)
     (while (not (eobp))
@@ -388,7 +396,7 @@ Should be called narrowed to the head of the message."
       (forward-line))))
 
 (defun rfc2047-q-encode-region (b e)
-  "Encode the header contained in REGION with the Q encoding."
+  "Quoted-printable-encode the header in region B to E."
   (save-excursion
     (save-restriction
       (narrow-to-region (goto-char b) e)
@@ -495,18 +503,18 @@ Return WORD if not."
     (3 (concat string "="))))
 
 (defun rfc2047-decode (charset encoding string)
-  "Decode STRING that uses CHARSET with ENCODING.
+  "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, it returns nil."
+If your Emacs implementation can't decode CHARSET, return nil."
   (if (stringp charset)
       (setq charset (intern (downcase charset))))
-  (if (or (not 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 
+    (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)))
index 7c4983d..dd391b1 100644 (file)
@@ -1,5 +1,6 @@
 ;;; rfc2231.el --- Functions for decoding rfc2231 headers
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/rot13.pbm b/lisp/rot13.pbm
new file mode 100644 (file)
index 0000000..104246c
Binary files /dev/null and b/lisp/rot13.pbm differ
diff --git a/lisp/rot13.xpm b/lisp/rot13.xpm
new file mode 100644 (file)
index 0000000..ad20c8a
--- /dev/null
@@ -0,0 +1,50 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 20 1",
+"  c Gray0",
+". c Gray6",
+"X c Gray12",
+"o c #2ff52ff52ff5",
+"O c #3fff3fff3fff",
+"+ c Gray28",
+"@ c #53e353e353e3",
+"# c #5fe45fe45fe4",
+"$ c #67e767e767e7",
+"% c #6fff6fff6fff",
+"& c #77d777d777d7",
+"* c Gray50",
+"= c Gray56",
+"- c #9fff9fff9fff",
+"; c Gray70",
+": c Gray75",
+"> c Gray81",
+", c #dfffdfffdfff",
+"< c #efffefffefff",
+"1 c Gray100",
+/* pixels */
+"::::::::::::::::::::::::",
+"::::::::::::::::::::::::",
+"::::::::::::::::::::::::",
+"::::#oOOOOOOOOOo+;::::::",
+"::::#:,*,,**11-#O$::::::",
+"::::#:#:#:#:%--=*>@:::::",
+"::::#:o:o:*%>*:>OOo#::::",
+"::::#:X*X:O*-:**:1:#::::",
+"::::#:>1><::11>:,1:#::::",
+"::::#:>-111%111%11:#::::",
+"::::#:*:-1:*1:*-11:#::::",
+"::::#: *O>*:%*=--1:#::::",
+"::::#:O* :*1O*o%11:#::::",
+"::::#:O:X,**-*:111:#::::",
+"::::#:>1>1,:1,<111:#::::",
+"::::#:1,oo,1111111:#::::",
+"::::#:,O##O*****:1:#::::",
+"::::#:: ::      *1:#::::",
+"::::#:1-..-1:*O:*1:#::::",
+"::::#:11--11,:O,:1:#::::",
+"::::#:11111111>111:#::::",
+"::::&oooooooooooooo&::::",
+"::::::::::::::::::::::::",
+"::::::::::::::::::::::::"
+};
diff --git a/lisp/save-aif.pbm b/lisp/save-aif.pbm
new file mode 100644 (file)
index 0000000..15829c2
Binary files /dev/null and b/lisp/save-aif.pbm differ
diff --git a/lisp/save-aif.xpm b/lisp/save-aif.xpm
new file mode 100644 (file)
index 0000000..c8bceb6
--- /dev/null
@@ -0,0 +1,55 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 25 1",
+"  c Gray6",
+". c #133313331333",
+"X c #199919991999",
+"o c Gray15",
+"O c #2fef2fef2fef",
+"+ c Gray20",
+"@ c #398739873987",
+"# c #3fff3fff3fff",
+"$ c Gray28",
+"% c #4ccc4ccc4ccc",
+"& c #5fdf5fdf5fdf",
+"* c #626262626262",
+"= c Gray40",
+"- c #72f272f272f2",
+"; c Gray45",
+": c #77d777d777d7",
+"> c #7bdb7bdb7bdb",
+", c #7ccc7ccc7ccc",
+"< c Gray56",
+"1 c Gray60",
+"2 c #9fff9fff9fff",
+"3 c #a7c7a7c7a7c7",
+"4 c Gray75",
+"5 c Gray90",
+"6 c Gray100",
+/* pixels */
+"444444444444444444444444",
+"444444444444444444444444",
+"4444444:OOOOOOOOOOO:4444",
+"4444444&4666666666#2>444",
+"4444444&4666666666#62:44",
+"4444444&4666666666 ##O44",
+"4444444&4666666666666O44",
+"4444444&4666666666666O44",
+"4444444&4666666666666O44",
+"43<<<<<$<444444666666O44",
+"4&@@@-------.%.666666O44",
+"4&---5555555o1o666666O44",
+"4&---5555555o1o666666O44",
+"4&---5555555o1o666666O44",
+"4&---5555555o1o666666O44",
+"4&---5555555o1o666666O44",
+"4&--@-------o1o666666O44",
+"4&-<--------,1o666666O44",
+"4&-<--------,1o444444O44",
+"4&--X++++o@-o1o&&&&&&:44",
+"4&--+====%-5o1o444444444",
+"4:*-+====%-5o1o444444444",
+"44:@X++++o@-.%.444444444",
+"444<<<<<<<<<<<<444444444"
+};
diff --git a/lisp/save-art.pbm b/lisp/save-art.pbm
new file mode 100644 (file)
index 0000000..68fe0cb
Binary files /dev/null and b/lisp/save-art.pbm differ
diff --git a/lisp/save-art.xpm b/lisp/save-art.xpm
new file mode 100644 (file)
index 0000000..da4158c
--- /dev/null
@@ -0,0 +1,62 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 32 1",
+"  c Gray0",
+". c #133313331333",
+"X c #199919991999",
+"o c Gray12",
+"O c #23f323f323f3",
+"+ c Gray15",
+"@ c #2fef2fef2fef",
+"# c Gray20",
+"$ c #398739873987",
+"% c #3fff3fff3fff",
+"& c #4ccc4ccc4ccc",
+"* c #53e353e353e3",
+"= c #5fe65fe65fe6",
+"- c #626262626262",
+"; c Gray40",
+": c #6fff6fff6fff",
+"> c #72f272f272f2",
+", c Gray45",
+"< c #77d777d777d7",
+"1 c #7ccc7ccc7ccc",
+"2 c Gray50",
+"3 c Gray56",
+"4 c Gray60",
+"5 c #9bcb9bcb9bcb",
+"6 c #9fff9fff9fff",
+"7 c #a7c7a7c7a7c7",
+"8 c Gray75",
+"9 c Gray81",
+"0 c #dfffdfffdfff",
+"q c Gray90",
+"w c #efffefffefff",
+"e c Gray100",
+/* pixels */
+"888888888888888888888888",
+"888888888888888888888888",
+"88888*@@@@@@@@@@@@@@@@@4",
+"88888@%28eeeeeeeeee08%o3",
+"88888@e8228eeeeeee222e23",
+"88888@eee82%eeee6%80ee23",
+"88888@eeew8=%28%28eeee23",
+"88888@eee220e82e826eee23",
+"88888@ee:9eeeeeeee6%9e23",
+"87333O3 3888888eeeee:==3",
+"8=$$$>>>>>>>.&.eeeeee0%3",
+"8=>>>qqqqqqq+4+%%%%%%%o3",
+"8=>>>qqqqqqq+4+888888888",
+"8=>>>qqqqqqq+4+888888888",
+"8=>>>qqqqqqq+4+888888888",
+"8=>>>qqqqqqq+4+888888888",
+"8=>>$>>>>>>>+4+888888888",
+"8=>3>>>>>>>>24+888888888",
+"8=>3>>>>>>>>24+888888888",
+"8=>>X####+$>+4+888888888",
+"8=>>#;;;;&>q+4+888888888",
+"8<->#;;;;&>q+4+888888888",
+"88<$X####+$>.&.888888888",
+"888333333333333888888888"
+};
diff --git a/lisp/subscribe.pbm b/lisp/subscribe.pbm
new file mode 100644 (file)
index 0000000..fe6b392
Binary files /dev/null and b/lisp/subscribe.pbm differ
diff --git a/lisp/subscribe.xpm b/lisp/subscribe.xpm
new file mode 100644 (file)
index 0000000..62db2da
--- /dev/null
@@ -0,0 +1,49 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 19 1",
+"  c Gray6",
+". c Gray12",
+"X c #2ff42ff42ff4",
+"o c #3fff3fff3fff",
+"O c Gray28",
+"+ c #53e353e353e3",
+"@ c #5fe25fe25fe2",
+"# c #67e767e767e7",
+"$ c #6fff6fff6fff",
+"% c #77d777d777d7",
+"& c Gray50",
+"* c Gray56",
+"= c #9fff9fff9fff",
+"- c Gray70",
+"; c Gray75",
+": c Gray81",
+"> c #dfffdfffdfff",
+", c #efffefffefff",
+"< c Gray100",
+/* pixels */
+";;;;;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;;;;",
+";;;;@Xooooo oooXO-;;;;;;",
+";;;;@;>;=<<o<<<;o#;;;;;;",
+";;;;@;,&=<<o<<<;&:+;;;;;",
+";;;;@;:=$<<o<<<:ooX@;;;;",
+";;;;@@&&&&&.<<<<<<;@;;;;",
+";;;;@*;;;;;X<<<<<<;@;;;;",
+";;;;@;:&@<<o<<<<<<;@;;;;",
+";;;;@;>&&<<o<<<<<<;@;;;;",
+";;;;@;,>:<<o<<<<<<;@;;;;",
+";;;;@Xooooo <<<<<<;@;;;;",
+";;;;@;>;=<<o<<<<<<;@;;;;",
+";;;;@;,&=<<o<<<<<<;@;;;;",
+";;;;@;:=$<<o<<<<<<;@;;;;",
+";;;;@@&&&&&.<<<<<<;@;;;;",
+";;;;@*;;;;;X<<<<<<;@;;;;",
+";;;;@;<<<<<o<<<<<<;@;;;;",
+";;;;@;<<<<<o<<<<<<;@;;;;",
+";;;;@;<<<<<o<<<<<<;@;;;;",
+";;;;%XXXXXXXXXXXXXX%;;;;",
+";;;;;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;;;;"
+};
index ba7f81a..3bfb9a4 100644 (file)
 
 (require 'parse-time)
 
+(autoload 'timezone-make-date-arpa-standard "timezone")
+
 ;;;###autoload
 (defun date-to-time (date)
   "Convert DATE into time."
   (condition-case ()
-      (apply 'encode-time (parse-time-string date))
+      (apply 'encode-time
+            (parse-time-string
+             ;; `parse-time-string' isn't sufficiently general or
+             ;; robust.  It fails to grok some of the formats that
+             ;; timzeone does (e.g. dodgy post-2000 stuff from some
+             ;; Elms) and either fails or returns bogus values.  Lars
+             ;; reverted this change, but that loses non-trivially
+             ;; often for me.  -- fx
+             (timezone-make-date-arpa-standard date)))
     (error (error "Invalid date: %s" date))))
 
 (defun time-to-seconds (time)
diff --git a/lisp/unsubscribe.pbm b/lisp/unsubscribe.pbm
new file mode 100644 (file)
index 0000000..7d869fb
Binary files /dev/null and b/lisp/unsubscribe.pbm differ
diff --git a/lisp/unsubscribe.xpm b/lisp/unsubscribe.xpm
new file mode 100644 (file)
index 0000000..38eab85
--- /dev/null
@@ -0,0 +1,48 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 18 1",
+"  c Gray6",
+". c Gray12",
+"X c #2ff42ff42ff4",
+"o c #3fff3fff3fff",
+"O c Gray28",
+"+ c #53e353e353e3",
+"@ c #5fe55fe55fe5",
+"# c #67e767e767e7",
+"$ c #77d777d777d7",
+"% c Gray50",
+"& c Gray56",
+"* c #9fff9fff9fff",
+"= c Gray70",
+"- c Gray75",
+"; c Gray81",
+": c #dfffdfffdfff",
+"> c #efffefffefff",
+", c Gray100",
+/* pixels */
+"------------------------",
+"------------------------",
+"------------------------",
+"----@Xooooo oooXO=------",
+"----@-,,,:-o,,,-o#------",
+"----@-,,,@:o,,,-%;+-----",
+"----@-;%@,,o,,,;ooX@----",
+"----@@%o@%%.,,,,,,-@----",
+"----@&-----X,,,,,,-@----",
+"----@-,,,**o,,,,,,-@----",
+"----@-:-**,o,,,,,,-@----",
+"----@->%*,,o,,,,,,-@----",
+"----@Xooooo ,,,,,,-@----",
+"----@-,,,:-o,,,,,,-@----",
+"----@-,,,@:o,,,,,,-@----",
+"----@-;%@,,o,,,,,,-@----",
+"----@@%o@%%.,,,,,,-@----",
+"----@&-----X,,,,,,-@----",
+"----@-,,,,,o,,,,,,-@----",
+"----@-,,,,,o,,,,,,-@----",
+"----@-,,,,,o,,,,,,-@----",
+"----$XXXXXXXXXXXXXX$----",
+"------------------------",
+"------------------------"
+};
index 7d6af42..2a5e752 100644 (file)
@@ -44,6 +44,7 @@
 ;;; Code:
 
 (require 'base64)
+(eval-when-compile (require 'cl))
 
 (defvar utf7-direct-encoding-chars " -%'-*,-[]-}"
   "Character ranges which do not need escaping in UTF-7.")
diff --git a/lisp/uu-decode.pbm b/lisp/uu-decode.pbm
new file mode 100644 (file)
index 0000000..2b7fada
Binary files /dev/null and b/lisp/uu-decode.pbm differ
diff --git a/lisp/uu-decode.xpm b/lisp/uu-decode.xpm
new file mode 100644 (file)
index 0000000..cdadff6
--- /dev/null
@@ -0,0 +1,48 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 18 1",
+"  c #2fef2fef2fef",
+". c #3fff3fff3fff",
+"X c #4ccc4ccc4ccc",
+"o c #53e353e353e3",
+"O c #566656665666",
+"+ c #5fe35fe35fe3",
+"@ c Gray45",
+"# c #77d777d777d7",
+"$ c Gray50",
+"% c #866586658665",
+"& c Gray56",
+"* c Gray60",
+"= c #9fff9fff9fff",
+"- c Gray75",
+"; c Gray81",
+": c #dfffdfffdfff",
+"> c #efffefffefff",
+", c Gray100",
+/* pixels */
+"------------------------",
+"------------------------",
+"------------------------",
+"------------------------",
+"-----#+++++++++++++&----",
+"----- @@@@@@@@@@@@O+----",
+"----- *%@@@@@@@@@&@+----",
+"----- *X+$$$$$$$.@@+----",
+"----- *X-,,,,,,,$@@+----",
+"----- *X-,,;,,,,$@@+----",
+"----- *X-:$$$-=,$@@+----",
+"----- *X-+-+-$=,$@@+----",
+"----- *X->$;;,,,$@@+----",
+"----- *X--.$.,,,$@@+----",
+"----- *X->--==,,$@@+----",
+"----- *X-,,,,=;,$@@+----",
+"----- *X-,,,,,,,$@@+----",
+"----- *X-,,,,,,,$@@+----",
+"----- *X&-------+@@+----",
+"----- *@XXXXXXXXX%@+----",
+"----- ************@+----",
+"-----o             #----",
+"------------------------",
+"------------------------"
+};
diff --git a/lisp/uu-post.pbm b/lisp/uu-post.pbm
new file mode 100644 (file)
index 0000000..a5face7
Binary files /dev/null and b/lisp/uu-post.pbm differ
diff --git a/lisp/uu-post.xpm b/lisp/uu-post.xpm
new file mode 100644 (file)
index 0000000..b67fa8b
--- /dev/null
@@ -0,0 +1,57 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 27 1",
+"  c Gray0",
+". c #0bfb0bfb0bfb",
+"X c Gray9",
+"o c Gray12",
+"O c #2fef2fef2fef",
+"+ c #3fff3fff3fff",
+"@ c Gray28",
+"# c #4ccc4ccc4ccc",
+"$ c #53e353e353e3",
+"% c #566656665666",
+"& c #5fe25fe25fe2",
+"* c #6fff6fff6fff",
+"= c Gray45",
+"- c #77d777d777d7",
+"; c Gray50",
+": c #866586658665",
+"> c Gray56",
+", c Gray60",
+"< c #9bcb9bcb9bcb",
+"1 c #9fff9fff9fff",
+"2 c #a7c7a7c7a7c7",
+"3 c Gray70",
+"4 c Gray75",
+"5 c Gray81",
+"6 c #dfffdfffdfff",
+"7 c #efffefffefff",
+"8 c Gray100",
+/* pixels */
+"$44$44$44$44$44$44$44$44",
+"444444444444-44444444444",
+"4444444444-O-O,444444444",
+"$44$44$2>O-4$4$@>3$44$44",
+"444444&&&4444442&&-44444",
+"44444$ XOOOOOOOOO..-4444",
+"$44$4O,,,,,,,,,,,,=&4$44",
+"44444O,=#########:=&4444",
+"44444O,#>4444444&==&4444",
+"$44$4O,#48888888;==&4$44",
+"44444O,#48818888;==&4444",
+"44444O,#45+1+1*8;==&4444",
+"$44$4O,#4*6&8158;==&4$44",
+"44444O,#46;61888;==&4444",
+"44444O,#44o++888;==&4444",
+"$44$4O,#48885;78;==&4$44",
+"44444O,#48888468;==&4444",
+"44444O,#48888888;==&4444",
+"$44$4O,#48888888;==&4$44",
+"44444O,#&;;;;;;;+==&4444",
+"44444O,:=========>=&4444",
+"$44$4O============%&4$44",
+"44444-&&&&&&&&&&&&&>4444",
+"444444444444444444444444"
+};
index 49047a9..9f423eb 100644 (file)
@@ -1,5 +1,6 @@
 ;;; uudecode.el -- elisp native uudecode
-;; Copyright (c) 1998,99 Free Software Foundation, Inc.
+
+;; Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: uudecode news
 ;;     Lots of codes are stolen from mm-decode.el, gnus-uu.el and
 ;;     base64.el
 
+;; This looks as though it could be made rather more efficient for
+;; internal working.  Encoding could use a lookup table and decoding
+;; should presumably use a vector or list buffer for partial results
+;; rather than with-current-buffer.  -- fx
+
+;; Only `uudecode-decode-region' should be advertised, and whether or
+;; not that uses a program should be customizable, but I guess it's
+;; too late now.  -- fx
+
 ;;; Code:
 
 (eval-when-compile (require 'cl))
-(if (not (fboundp 'char-int))
-    (defalias 'char-int 'identity))
+
+(eval-and-compile
+  (defalias 'uudecode-char-int
+    (if (fboundp 'char-int)
+       'char-int
+      'identity))
+
+  (if (featurep 'xemacs)
+      (defalias 'uudecode-insert-char 'insert-char)
+    (defun uudecode-insert-char (char &optional count ignored buffer)
+      (if (or (null buffer) (eq buffer (current-buffer)))
+         (insert-char char count)
+       (with-current-buffer buffer
+         (insert-char char count))))))
 
 (defcustom uudecode-decoder-program "uudecode"
   "*Non-nil value should be a string that names a uu decoder.
@@ -62,11 +84,11 @@ input and write the converted data to its standard output."
 
 ;;;###autoload
 (defun uudecode-decode-region-external (start end &optional file-name)
-  "Uudecode region between START and END with external decoder.
-
-If FILE-NAME is non-nil, save the result to FILE-NAME."
+  "Uudecode region between START and END using external program.
+If FILE-NAME is non-nil, save the result to FILE-NAME.  The program
+used is specified by `uudecode-decoder-program'."
   (interactive "r\nP")
-  (let ((cbuf (current-buffer)) tempfile firstline work-buffer status)
+  (let ((cbuf (current-buffer)) tempfile firstline status)
     (save-excursion
       (goto-char start)
       (when (re-search-forward uudecode-begin-line nil t)
@@ -80,16 +102,13 @@ If FILE-NAME is non-nil, save the result to FILE-NAME."
                                               (match-string 1)))))
        (setq tempfile (if file-name
                           (expand-file-name file-name)
-                        (make-temp-name
-                         ;; /tmp/uu...
-                         (expand-file-name
-                          "uu" uudecode-temporary-file-directory))))
-       (let ((cdir default-directory) default-process-coding-system)
+                        (let ((temporary-file-directory
+                               uudecode-temporary-file-directory))
+                          (make-temp-file "uu"))))
+       (let ((cdir default-directory)
+             default-process-coding-system)
          (unwind-protect
-             (progn
-               (set-buffer (setq work-buffer
-                                 (generate-new-buffer " *uudecode-work*")))
-               (buffer-disable-undo work-buffer)
+             (with-temp-buffer
                (insert "begin 600 " (file-name-nondirectory tempfile) "\n")
                (insert-buffer-substring cbuf firstline end)
                (cd (file-name-directory tempfile))
@@ -109,21 +128,11 @@ If FILE-NAME is non-nil, save the result to FILE-NAME."
              (let (format-alist)
                (insert-file-contents-literally tempfile)))
          (message "Can not uudecode")))
-      (and work-buffer (kill-buffer work-buffer))
       (ignore-errors (or file-name (delete-file tempfile))))))
 
-(if (featurep 'xemacs)
-    (defalias 'uudecode-insert-char 'insert-char)
-  (defun uudecode-insert-char (char &optional count ignored buffer)
-    (if (or (null buffer) (eq buffer (current-buffer)))
-       (insert-char char count)
-      (with-current-buffer buffer
-       (insert-char char count)))))
-
 ;;;###autoload
-
 (defun uudecode-decode-region (start end &optional file-name)
-  "Uudecode region between START and END.
+  "Uudecode region between START and END without using an external program.
 If FILE-NAME is non-nil, save the result to FILE-NAME."
   (interactive "r\nP")
   (let ((work-buffer nil)
@@ -145,7 +154,6 @@ If FILE-NAME is non-nil, save the result to FILE-NAME."
                                                    nil nil nil
                                                    (match-string 1))))))
            (setq work-buffer (generate-new-buffer " *uudecode-work*"))
-           (buffer-disable-undo work-buffer)
            (forward-line 1)
            (skip-chars-forward non-data-chars end)
            (while (not done)
@@ -155,14 +163,16 @@ If FILE-NAME is non-nil, save the result to FILE-NAME."
               ((> (skip-chars-forward uudecode-alphabet end) 0)
                (setq lim (point))
                (setq remain
-                     (logand (- (char-int (char-after inputpos)) 32) 63))
+                     (logand (- (uudecode-char-int (char-after inputpos)) 32)
+                             63))
                (setq inputpos (1+ inputpos))
                (if (= remain 0) (setq done t))
                (while (and (< inputpos lim) (> remain 0))
                  (setq bits (+ bits
                                (logand
                                 (-
-                                 (char-int (char-after inputpos)) 32) 63)))
+                                 (uudecode-char-int (char-after inputpos)) 32)
+                                63)))
                  (if (/= counter 0) (setq remain (1- remain)))
                  (setq counter (1+ counter)
                        inputpos (1+ inputpos))