+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.
(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.
(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))
(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)))
"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)
--- /dev/null
+/* 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"
+};
--- /dev/null
+/* 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"
+};
--- /dev/null
+/* 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"
+};
;;; 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)
--- /dev/null
+/* 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"
+};
--- /dev/null
+/* 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@%*@%*@;;@;;",
+";;;;;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;;;;",
+"@;;@;;@;;@;;@;;@;;@;;@;;",
+";;;;;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;;;;"
+};
;;; 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:
--- /dev/null
+/* 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"
+};
--- /dev/null
+/* 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+<<<<<<"
+};
--- /dev/null
+/* 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"
+};
--- /dev/null
+/* 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"
+};
(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))
(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.
(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
(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."
"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)
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)
(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))
: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)
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)
: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
;;;
: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)
"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)
"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)
"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)
"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)
"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)
(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]
(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.
(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)
(if action-pair
(funcall (cdr action-pair)))))
-
(defun gnus-article-part-wrapper (n function)
(save-current-buffer
(set-buffer gnus-article-buffer)
(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
',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
',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
(defgroup gnus-audio nil
"Playing sound in Gnus."
+ :version "21.1"
:group 'gnus-visual
:group 'multimedia)
(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"
(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)
(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."
-;;; 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.
(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.
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.")
;;; Code:
-(eval-when-compile (require 'cl))
+(eval-when-compile
+ (require 'cl)
+ (require 'ring))
;;; Function aliases later to be redefined for XEmacs usage.
(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
(provide 'gnus-ems)
-;; Local Variables:
-;; byte-compile-warnings: '(redefine callargs)
-;; End:
-
;;; gnus-ems.el ends here
;;; 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
For example:
(((nntp \"news.com.cn\") . cn-gb-2312))
"
+ :version "21.1"
:group 'gnus-charset
:type '(repeat (cons (sexp :tag "Method") (symbol :tag "Charset"))))
["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 ...)
["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]
["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.
\\{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")
(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
(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"))
(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))
(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)))))
-;;; 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:
(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)
\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."
: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)))
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
;;; 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
;;; 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
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)
;; 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.
;;; 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
;;; 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>
-;;; 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.
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)
(cond
((featurep 'xemacs)
(gnus-xmas-splash))
- ((and (eq window-system 'x)
+ ((and window-system
(= (frame-height) (1+ (window-height))))
(gnus-x-splash))))
(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.
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)
(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)
(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)
(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)
"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)
(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)
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)
: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)
(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)
"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.
["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]
["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]
(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]
(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]
["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]
["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]
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]
["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]
(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)
\\{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))
(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))))
;; 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)))
(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
;;; 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
(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"))
;;; 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
-;;; 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.
(defgroup gnus-charset nil
"Group character set issues."
:link '(custom-manual "(gnus)Charsets")
+ :version "21.1"
:group 'gnus)
(defgroup gnus-cache nil
(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)
(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)
(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.")
(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)
(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"
(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)
--- /dev/null
+/* 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&::::",
+"::::::::::::::::::::::::",
+"::::::::::::::::::::::::"
+};
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
--- /dev/null
+/* 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>>",
+">>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>"
+};
(defgroup mail-source nil
"The mail-fetching library."
+ :version "21.1"
:group 'gnus)
;; Define these at compile time to avoid dragging in imap always.
-;;; 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/*")
(\"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
(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
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
"*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)
(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
(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))
(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 ".*")
(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
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)
;;;
(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
(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 ?{)
(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)
((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))
;;;
(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)) ""))))
;;;
(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.
(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
(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."
-;;; 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.
(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:
: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)
(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)
(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))
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)
(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")
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
(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)))
(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)
(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))
(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)
"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)))
(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
["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 ""
["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
(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.
(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)
(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"))
(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."
(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.
(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
;;; 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
(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 ^_
(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)
;; 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)))
(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."
(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)
(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)
;; 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)
(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)
(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
;; 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.
(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)))
(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))
(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))
-;;; 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.
(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*"))
(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)
--- /dev/null
+/* 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"
+};
;;; 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>
;;; 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
;;; 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>
;;; 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
(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.")
(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))
;;; 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
;;; 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)
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-)
(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)
(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)
;;; 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>
;;; 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>
(require 'nnmail)
(require 'nnoo)
(eval-when-compile (require 'cl))
+(eval-and-compile
+ (autoload 'gnus-sorted-intersection "gnus-range"))
(nnoo-declare nnml)
(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
;;; 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
;;; 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>
;;; 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>
(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.
;; 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)
-;;; 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>
(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)
;;; 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.
;; Author: Richard L. Pieri <ratinox@peorth.gweep.net>
;; Maintainer: FSF
;; Keywords: mail
-;; Version: 1.3s
;; This file is part of GNU Emacs.
(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)
(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)
))
(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
;; 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."
--- /dev/null
+/* 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+-<<<<<<<<<",
+",><,><,><,><,><,><,><,><",
+">-<>-<>-<>-<>-<>-<>-<>-<",
+"<<<<<<<<<<<<<<<<<<<<<<<<"
+};
--- /dev/null
+/* 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"
+};
;;; 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))
(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
--- /dev/null
+/* 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"
+};
--- /dev/null
+/* 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"
+};
;;; 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.
;; 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:
;;; 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)
(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:
(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
(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
(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
(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))
(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))
;; 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)
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)
(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)))))
(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))
(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))
(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))
(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)))
(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))
(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)
(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)))
;;; 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.
--- /dev/null
+/* 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&::::",
+"::::::::::::::::::::::::",
+"::::::::::::::::::::::::"
+};
--- /dev/null
+/* 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"
+};
--- /dev/null
+/* 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"
+};
--- /dev/null
+/* 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%;;;;",
+";;;;;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;;;;"
+};
(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)
--- /dev/null
+/* 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$----",
+"------------------------",
+"------------------------"
+};
;;; Code:
(require 'base64)
+(eval-when-compile (require 'cl))
(defvar utf7-direct-encoding-chars " -%'-*,-[]-}"
"Character ranges which do not need escaping in UTF-7.")
--- /dev/null
+/* 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 #----",
+"------------------------",
+"------------------------"
+};
--- /dev/null
+/* 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"
+};
;;; 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.
;;;###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)
(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))
(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)
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)
((> (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))