From: yamaoka Date: Mon, 24 Apr 2000 23:03:42 +0000 (+0000) Subject: T-gnus 6.14.3. X-Git-Tag: t-gnus-6_14_3-00 X-Git-Url: http://git.chise.org/gitweb/?a=commitdiff_plain;h=3c6a96d019e0fcdf0d35f9d4873f62c1962995ad;p=elisp%2Fgnus.git- T-gnus 6.14.3. Feedback from `t-gnus-6_14-quimby'. --- diff --git a/ChangeLog b/ChangeLog index a2bc0e9..bd4d75b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,31 @@ +2000-04-24 Katsumi Yamaoka + + * lisp/gnus-vers.el (T-gnus): Update to 6.14.3. + + * README.T-gnus: Update. + + * GNUS-NEWS: Sync up with Gnus v5.8.5. + * lisp/{webmail.el,utf7.el,time-date.el,smiley.el,rfc2047.el, + rfc1843.el,qp.el,pop3.el,parse-time.el,nnweb.el,nnwarchive.el, + nnvirtual.el,nnultimate.el,nntp.el,nnspool.el,nnslashdot.el, + nnml.el,nnmail.el,nnimap.el,nnheader.el,nnfolder.el,nndraft.el, + nndoc.el,nnagent.el,mml.el,mm-view.el,mm-uu.el,mm-util.el, + mm-encode.el,mm-decode.el,mm-bodies.el,message.el,mail-source.el, + mail-prsvr.el,mail-parse.el,lpath.el,imap.el,ietf-drums.el,gnus.el, + gnus-xmas.el,gnus-win.el,gnus-uu.el,gnus-util.el,gnus-topic.el, + gnus-sum.el,gnus-start.el,gnus-srvr.el,gnus-spec.el,gnus-score.el, + gnus-msg.el,gnus-move.el,gnus-mlspl.el,gnus-mh.el,gnus-mailcap.el, + gnus-logic.el,gnus-kill.el,gnus-int.el,gnus-group.el,gnus-ems.el, + gnus-eform.el,gnus-dup.el,gnus-draft.el,gnus-cite.el,gnus-cache.el, + gnus-bcklg.el,gnus-async.el,gnus-art.el,gnus-agent.el, + format-spec.el,flow-fill.el,fill-flowed.el,dgnushack.el,ChangeLog}: + Sync up with Gnus v5.8.5. + * texi/{refcard.tex,gnusref.tex,gnus.texi,gnus-ja.texi, + gnus-faq-ja.texi,Makefile.in,ChangeLog}: Sync up with Gnus v5.8.5. + + * README: Requires XEmacs 21.1.1 and later. + * texi/{gnus.texi, gnus-faq-ja.texi}: Ditto. + 2000-04-20 Katsumi Yamaoka * lisp/gnus-vers.el (T-gnus): Update to 6.14.2. diff --git a/GNUS-NEWS b/GNUS-NEWS index c9f6a07..057a7f6 100644 --- a/GNUS-NEWS +++ b/GNUS-NEWS @@ -47,3 +47,8 @@ ever-changing layouts. *** Gnus can now read IMAP mail via nnimap. + +Local variables: +mode: outline +paragraph-separate: "[ ]*$" +end: diff --git a/README b/README index e487c43..8d248d3 100644 --- a/README +++ b/README @@ -30,7 +30,7 @@ in your Emacs, you should probably exit that Emacs and start a new one to fire up Gnus. Gnus does absolutely not work with anything older than Emacs 20.3 or -XEmacs 20.0. So you definitely need a new Emacs. +XEmacs 21.1.1. So you definitely need a new Emacs. Then you do a `M-x gnus', and everything should... uhm... it should work, but it might not. Set `debug-on-error' to t, and mail me the diff --git a/README.T-gnus b/README.T-gnus index 1bf2683..bb0f24d 100644 --- a/README.T-gnus +++ b/README.T-gnus @@ -33,6 +33,6 @@ NEWS: * T-gnus 6.14 - this is based on Pterodactyl Gnus. - The latest T-gnus is T-gnus 6.14.2 (Based on Gnus 5.8.4). It requires + The latest T-gnus is T-gnus 6.14.3 (Based on Gnus 5.8.5). It requires SEMI/WEMI (1.13.5 or later), FLIM (1.13.1 or later), and APEL (10.0 or later). diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 74238c9..dcd5c94 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,311 @@ +Mon Apr 24 21:12:06 2000 Lars Magne Ingebrigtsen + + * gnus.el: Gnus v5.8.5 is released. + +2000-04-24 16:29:07 Lars Magne Ingebrigtsen + + * rfc2047.el (rfc2047-header-encoding-alist): Doc fix. + + * gnus-util.el (gnus-netrc-machine): Default to nntp. + + * mml.el (mml-generate-mime-1): Force 8bit on message/rfc822. + +2000-04-23 23:27:25 Shenghuo ZHU + + * mm-view.el (mm-inline-message): Disable prepare-hook. + +2000-04-23 00:32:32 Lars Magne Ingebrigtsen + + * gnus.el: Fix copyright statements. + + * gnus-sum.el (gnus-alter-articles-to-read-function): New + variable. + (gnus-articles-to-read): Use it. + + * message.el (message-get-reply-headers): Bind free variable. + +2000-04-23 01:14:28 Shenghuo ZHU + + * message.el (message-get-reply-headers): Fix to-address. + +2000-04-22 22:51:46 Shenghuo ZHU + + * webmail.el: Hotmail fix. Add a debug function. + +2000-04-23 00:32:32 Lars Magne Ingebrigtsen + + * gnus-sum.el (t): M-down and M-up. + +2000-04-22 20:22:03 Kai Großjohann + + * gnus-sum.el: Doc fix. + +2000-04-22 10:25:56 Shenghuo ZHU + + * nnwarchive.el (nnwarchive-egroups-article): Remove < and >. + +2000-04-22 14:25:05 Lars Magne Ingebrigtsen + + * nnweb.el (nnweb-dejanews-create-mapping): Remove the context + string. + (nnweb-request-group): Don't scan twice. + (nnweb-request-scan): Don't nix out the hashtb. + + * message.el (message-get-reply-headers): Return a value. + +2000-04-22 14:12:41 David Aspinwall + + * gnus-art.el (gnus-button-url-regexp): New value to match naked + urls. + +2000-04-22 01:23:59 Lars Magne Ingebrigtsen + + * gnus-cache.el (gnus-summary-insert-cached-articles): Reverse the + order messages are inserted. + + * mml.el (mml-generate-mime-1): rfc2047-encode the heads of + message/rfc822 parts. + + * gnus-art.el (gnus-article-read-summary-keys): Check for + numerical values. + + * message.el (message-get-headers): Made into own function. + (message-reply): Use it. + (message-get-reply-headers): Renamed. + (message-widen-reply): New command. + +2000-04-21 20:52:09 Shenghuo ZHU + + * nntp.el (nntp-retrieve-data): Report the error and return nil. + +2000-04-21 19:38:43 Shenghuo ZHU + + * mm-bodies.el (mm-decode-content-transfer-encoding): Don't remove + non-base64 text at the end if not found. + +2000-03-01 Simon Josefsson + + * gnus-sum.el (gnus-read-move-group-name): + (gnus-summary-move-article): Use `gnus-group-method' to find out + what method the manually entered group belong to. + `gnus-group-name-to-method' doesn't return any method parameters + and `gnus-find-method-for-group' uses `gnus-group-name-to-method' + for new groups so they wouldn't work. + +2000-04-21 22:27:15 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-configure-posting-styles): Allow nil values to + override. + +2000-04-21 21:58:20 Kai Großjohann + + * nnmail.el (nnmail-cache-insert): Does some stuff that is + probably good to do, or something. I dunno. I just write these + ChangeLog entries, and my name is Lars. + +1999-12-06 Hrvoje Niksic + + * message.el (message-caesar-region): Use translate-region. + +2000-04-21 21:20:32 Mike Fabian + + * gnus-group.el (gnus-group-catchup-current): Doc fix. + +2000-04-21 20:36:21 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-article-setup-buffer): Don't kill local + variables, because that makes Emacs flash. + + * gnus-group.el (gnus-group-insert-group-line): Don't call + gnus-group-add-icon unconditionally. + + * gnus-xmas.el (gnus-group-add-icon): Moved here. + + * gnus-group.el (gnus-group-glyph-directory): Don't depend on + xmas. + (gnus-group-glyph-directory): Removed. + +2000-04-21 20:26:23 Jaap-Henk Hoepman + + * gnus-msg.el (gnus-inews-insert-archive-gcc): Don't do stuff if + gnus-newsgroup-name is "". + +2000-04-21 Florian Weimer + + * mm-util.el (mm-mime-mule-charset-alist): Add support for UTF-8 + in conjunction with MULE-UCS. + +1999-12-13 Per Abrahamsen + + * rfc2047.el (rfc2047-fold-region): Don't use the same break twice. + +1999-12-14 04:14:44 Katsumi Yamaoka + + * dgnushack.el (last, mapcon, member-if, union): New compiler + macros for emulating cl functions. + +1999-12-21 Jan Vroonhof + + * message.el (message-shorten-references): Only cater to broken + INN for news. This caters for broken smtpd. + +2000-04-21 18:20:10 Lars Magne Ingebrigtsen + + * mailcap.el (mailcap-mime-info): Use the first match; not the + last. + + * gnus-agent.el (gnus-category-kill): Save the category list. + +2000-04-21 16:41:50 Chris Brierley + + * gnus-sum.el (gnus-summary-move-article): Do something or other. + +2000-04-21 16:07:07 Lars Magne Ingebrigtsen + + * gnus-group.el (gnus-group-add-icon): Fixed indentation. + +2000-04-21 16:07:07 Lars Magne Ingebrigtsen + + * gnus-group.el (gnus-group-add-icon): Fixed indentation. + +2000-04-21 10:43:16 Shenghuo ZHU + + * gnus-group.el (gnus-group-prepare-flat-predicate): New function. + (gnus-group-list-cached): Use it. + +2000-04-21 16:07:07 Lars Magne Ingebrigtsen + + * gnus.el: Update all the copyright notices. + +2000-04-21 15:38:06 Vladimir Volovich + + * mm-bodies.el (mm-decode-content-transfer-encoding): Remove + non-base64 text at the end. + +2000-04-21 15:21:30 Katsumi Yamaoka + + * mm-bodies.el (mm-body-charset-encoding-alist): defcustomized. + +2000-04-21 15:15:41 Lars Magne Ingebrigtsen + + * nnheader.el: Don't autoload cancel-function-timers. + + * message.el (message-fetch-field): Fold case. + +2000-04-21 15:11:09 + + * message.el (message-forward-before-signature): New variable. + +2000-04-21 15:10:31 Alexandre Oliva + + * gnus-mlspl.el: Fix stuff. + +2000-04-21 14:41:09 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-update-article-line): Don't hide + subjects when unthreaded. + +2000-04-21 14:11:39 David S. Goldberg + + * gnus-art.el (gnus-boring-article-headers): Work on long CCs as + well. + +2000-04-21 14:06:43 Rui Zhu + + * gnus-art.el (gnus-article-mode): Fix variable name. + +2000-04-21 13:54:51 Lars Magne Ingebrigtsen + + * mm-view.el: Fix autoload. + + * flow-fill.el (flow-fill): Fix provide. + + * gnus-draft.el (gnus-draft-send): Bind message-setup-hook to + nil. + +2000-04-20 22:24:04 Shenghuo ZHU + + * gnus-win.el (gnus-configure-windows): Revert to switch-to-buffer. + +2000-04-21 05:22:18 Katsumi Yamaoka + + * gnus-util.el (gnus-netrc-machine): Didn't work. + +2000-04-20 21:22:10 Shenghuo ZHU + + * gnus-draft.el (gnus-draft-setup): Restore to mml. + +2000-04-21 01:24:41 Lars Magne Ingebrigtsen + + * flow-fill.el: Renamed from fill-flowed. + + * message.el (message-forward-ignored-headers): Default to + removing CTE. + +2000-04-21 00:48:48 + + * message.el (message-mode): Don't fill headers. + +2000-04-20 23:12:43 Lars Magne Ingebrigtsen + + * message.el (message-pipe-buffer-body): Use shell + +2000-02-21 Yoshiki Hayashi + + * nnvirtual.el (nnvirtual-request-article): + Bind gnus-override-method to nil. + (nnvirtual-request-update-mark): Don't update mark when + article is not there. + +2000-04-20 16:35:41 Shenghuo ZHU + + * mm-uu.el (mm-uu-dissect): Check forwarded message. + +2000-04-20 21:17:48 Lars Magne Ingebrigtsen + + * gnus-util.el (gnus-parse-netrc): Allow "port". + (gnus-netrc-machine): Take a port param. + (gnus-netrc-machine): + + * gnus-art.el (gnus-request-article-this-buffer): Allow + re-selecting referenced articles. + + * message.el (message-cancel-news): Allow editing. + (message-cancel-message): Add newline. + +2000-04-20 21:03:54 William M. Perry + + * mm-view.el (mm-inline-image-emacs): New function. + +2000-04-20 20:44:55 Lars Magne Ingebrigtsen + + * mail-source.el (mail-source-delete-incoming): Change default in + cvs. + +2000-04-20 20:43:34 Kim-Minh Kaplan + + * gnus-art.el (gnus-mime-view-part-as-type-internal): New + function. + +2000-04-20 14:45:20 Lars Magne Ingebrigtsen + + * nnml.el (nnml-request-expire-articles): Use it. + + * nnmail.el (nnmail-expiry-target): New variable. + (nnmail-expiry-target-group): New function. + +2000-04-20 02:36:31 Emerick Rogul + + * message.el (message-forward): Add non-MIME separators. + +2000-04-20 02:25:39 Lars Magne Ingebrigtsen + + * message.el (message-generate-headers): Respect the syntax check + spec. + + * gnus-sum.el (gnus-remove-thread-1): Show thread. + (gnus-remove-thread): Don't show all threads. + Thu Apr 20 01:39:25 2000 Lars Magne Ingebrigtsen * gnus.el: Pterodactyl Gnus v5.8.4 is released. @@ -286,6 +594,21 @@ Thu Apr 20 01:39:25 2000 Lars Magne Ingebrigtsen * base64.el: Require cl when compiling. +2000-01-05 BrYan P. Johnson + + * gnus-group.el (gnus-group-line-format-alist): Added %E for + eyecandy. + (gnus-group-insert-group-line): Now groks %E and inserts icon in + group line using gnus-group-add-icon. + (gnus-group-icons): Added customize group. + (gnus-group-icon-list): Added variable. + (gnus-group-glyph-directory): Added variable. + (gnus-group-icon-cache): Added variable. + (gnus-group-running-xemacs): Added variable. + (gnus-group-add-icon): Added function. Add an icon to the current + line according to gnus-group-icon-list. + (gnus-group-icon-create-glyph): Added function. + 2000-01-05 17:31:52 Lars Magne Ingebrigtsen * gnus-sum.el (gnus-summary-select-article): Return whether we @@ -856,6 +1179,11 @@ Wed Jan 5 17:06:41 2000 Lars Magne Ingebrigtsen (mm-7bit-chars): New variable. (mm-body-7-or-8): Use it in both cases. +1999-12-04 Michael Welsh Duggan + + * gnus-start.el (gnus-site-init-file): Don't use cl macros in + defcustom definitions. + 1999-12-04 Simon Josefsson * mm-decode.el (mm-display-part): Let mm-display-external return diff --git a/lisp/dgnushack.el b/lisp/dgnushack.el index 94ef291..496935d 100644 --- a/lisp/dgnushack.el +++ b/lisp/dgnushack.el @@ -1,5 +1,6 @@ ;;; dgnushack.el --- a hack to set the load path for byte-compiling -;; 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: Lars Magne Ingebrigtsen ;; Katsumi Yamaoka @@ -50,6 +51,83 @@ (require 'cl) +(push "/usr/share/emacs/site-lisp" load-path) + +(unless (featurep 'xemacs) + (define-compiler-macro last (&whole form x &optional n) + (if (and (fboundp 'last) + (subrp (symbol-function 'last))) + form + (if n + `(let* ((x ,x) + (n ,n) + (m 0) + (p x)) + (while (consp p) + (incf m) + (pop p)) + (if (<= n 0) + p + (if (< n m) + (nthcdr (- m n) x) + x))) + `(let ((x ,x)) + (while (consp (cdr x)) + (pop x)) + x)))) + + (define-compiler-macro mapcon (&whole form fn seq &rest rest) + (if (and (fboundp 'mapcon) + (subrp (symbol-function 'mapcon))) + form + (if rest + `(let (res + (args (list ,seq ,@rest)) + p) + (while (not (memq nil args)) + (push (apply ,fn args) res) + (setq p args) + (while p + (setcar p (cdr (pop p))) + )) + (apply (function nconc) (nreverse res))) + `(let (res + (arg ,seq)) + (while arg + (push (funcall ,fn arg) res) + (setq arg (cdr arg))) + (apply (function nconc) (nreverse res)))))) + + (define-compiler-macro member-if (&whole form pred list) + (if (and (fboundp 'member-if) + (subrp (symbol-function 'member-if))) + form + `(let ((fn ,pred) + (seq ,list)) + (while (and seq + (not (funcall fn (car seq)))) + (pop seq)) + seq))) + + (define-compiler-macro union (&whole form list1 list2) + (if (and (fboundp 'union) + (subrp (symbol-function 'union))) + form + `(let ((a ,list1) + (b ,list2)) + (cond ((null a) b) + ((null b) a) + ((equal a b) a) + (t + (or (>= (length a) (length b)) + (setq a (prog1 b (setq b a)))) + (while b + (or (memq (car b) a) + (push (car b) a)) + (pop b)) + a))))) + ) + ;; If we are building w3 in a different directory than the source ;; directory, we must read *.el from source directory and write *.elc ;; into the building directory. For that, we define this function diff --git a/lisp/fill-flowed.el b/lisp/fill-flowed.el deleted file mode 100644 index b0883de..0000000 --- a/lisp/fill-flowed.el +++ /dev/null @@ -1,94 +0,0 @@ -;;; fill-flowed.el --- interprete RFC2646 "flowed" text -;; Copyright (C) 2000 Free Software Foundation, Inc. - -;; Author: Simon Josefsson -;; Keywords: mail - -;; This program 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, -;; 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 - -;;; Commentary: - -;; This implement decoding of RFC2646 formatted text, including the -;; quoted-depth wins rules. - -;; Theory of operation: search for lines ending with SPC, save quote -;; length of line, remove SPC and concatenate line with the following -;; line if quote length of following line matches current line. - -;; When no further concatenations are possible, we've found a -;; paragraph and we let `fill-region' fill the long line into several -;; lines with the quote prefix as `fill-prefix'. - -;; Todo: encoding - -;; History: - -;; 2000-02-17 posted on ding mailing list -;; 2000-02-19 use `point-at-{b,e}ol' in XEmacs -;; 2000-03-11 no compile warnings for point-at-bol stuff -;; 2000-03-26 commited to gnus cvs - -;;; Code: - -(eval-and-compile - (fset 'fill-flowed-point-at-bol - (if (fboundp 'point-at-bol) - 'point-at-bol - 'line-beginning-position)) - - (fset 'fill-flowed-point-at-eol - (if (fboundp 'point-at-eol) - 'point-at-eol - 'line-end-position))) - -(defun fill-flowed (&optional buffer) - (save-excursion - (set-buffer (or (current-buffer) buffer)) - (goto-char (point-min)) - (while (re-search-forward " $" nil t) - (when (save-excursion - (beginning-of-line) - (looking-at "^\\(>*\\)\\( ?\\)")) - (let ((quote (match-string 1))) - (if (string= quote "") - (setq quote nil)) - (when (and quote (string= (match-string 2) "")) - (save-excursion - ;; insert SP after quote for pleasant reading of quoted lines - (beginning-of-line) - (when (> (skip-chars-forward ">") 0) - (insert " ")))) - (while (and (save-excursion - (backward-char 3) - (looking-at "[^-][^-] ")) - (save-excursion - (unless (eobp) - (forward-char 1) - (if quote - (looking-at (format "^\\(%s\\)\\([^>]\\)" quote)) - (looking-at "^ ?"))))) - (save-excursion - (replace-match (if (string= (match-string 2) " ") - "" "\\2"))) - (backward-delete-char -1) - (end-of-line)) - (let ((fill-prefix (when quote (concat quote " ")))) - (fill-region (fill-flowed-point-at-bol) - (fill-flowed-point-at-eol) - 'left 'nosqueeze))))))) - -(provide 'fill-flowed) - -;;; fill-flowed.el ends here diff --git a/lisp/flow-fill.el b/lisp/flow-fill.el new file mode 100644 index 0000000..9aae7c4 --- /dev/null +++ b/lisp/flow-fill.el @@ -0,0 +1,94 @@ +;;; flow-fill.el --- interprete RFC2646 "flowed" text +;; Copyright (C) 2000 Free Software Foundation, Inc. + +;; Author: Simon Josefsson +;; Keywords: mail + +;; This program 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, +;; 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 + +;;; Commentary: + +;; This implement decoding of RFC2646 formatted text, including the +;; quoted-depth wins rules. + +;; Theory of operation: search for lines ending with SPC, save quote +;; length of line, remove SPC and concatenate line with the following +;; line if quote length of following line matches current line. + +;; When no further concatenations are possible, we've found a +;; paragraph and we let `fill-region' fill the long line into several +;; lines with the quote prefix as `fill-prefix'. + +;; Todo: encoding + +;; History: + +;; 2000-02-17 posted on ding mailing list +;; 2000-02-19 use `point-at-{b,e}ol' in XEmacs +;; 2000-03-11 no compile warnings for point-at-bol stuff +;; 2000-03-26 commited to gnus cvs + +;;; Code: + +(eval-and-compile + (fset 'fill-flowed-point-at-bol + (if (fboundp 'point-at-bol) + 'point-at-bol + 'line-beginning-position)) + + (fset 'fill-flowed-point-at-eol + (if (fboundp 'point-at-eol) + 'point-at-eol + 'line-end-position))) + +(defun fill-flowed (&optional buffer) + (save-excursion + (set-buffer (or (current-buffer) buffer)) + (goto-char (point-min)) + (while (re-search-forward " $" nil t) + (when (save-excursion + (beginning-of-line) + (looking-at "^\\(>*\\)\\( ?\\)")) + (let ((quote (match-string 1))) + (if (string= quote "") + (setq quote nil)) + (when (and quote (string= (match-string 2) "")) + (save-excursion + ;; insert SP after quote for pleasant reading of quoted lines + (beginning-of-line) + (when (> (skip-chars-forward ">") 0) + (insert " ")))) + (while (and (save-excursion + (backward-char 3) + (looking-at "[^-][^-] ")) + (save-excursion + (unless (eobp) + (forward-char 1) + (if quote + (looking-at (format "^\\(%s\\)\\([^>]\\)" quote)) + (looking-at "^ ?"))))) + (save-excursion + (replace-match (if (string= (match-string 2) " ") + "" "\\2"))) + (backward-delete-char -1) + (end-of-line)) + (let ((fill-prefix (when quote (concat quote " ")))) + (fill-region (fill-flowed-point-at-bol) + (fill-flowed-point-at-eol) + 'left 'nosqueeze))))))) + +(provide 'flow-fill) + +;;; flow-fill.el ends here diff --git a/lisp/format-spec.el b/lisp/format-spec.el index 8986dc0..6cd39ed 100644 --- a/lisp/format-spec.el +++ b/lisp/format-spec.el @@ -1,5 +1,5 @@ ;;; format-spec.el --- functions for formatting arbitrary formatting strings -;; Copyright (C) 1999 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: tools diff --git a/lisp/gnus-agent.el b/lisp/gnus-agent.el index 6e8e8ce..d9104f4 100644 --- a/lisp/gnus-agent.el +++ b/lisp/gnus-agent.el @@ -1,5 +1,5 @@ ;;; gnus-agent.el --- unplugged support for Semi-gnus -;; Copyright (C) 1997,98,99 Free Software Foundation, Inc. +;; Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Tatsuya Ichikawa @@ -880,12 +880,12 @@ the actual number of articles toggled is returned." (< 0 gnus-agent-large-newsgroup)) (and (< 0 (setq i (- len gnus-agent-large-newsgroup))) (setq articles (nthcdr i articles)))) - ;; add article with marks to list of article headers we want to fetch + ;; add article with marks to list of article headers we want to fetch. (dolist (arts (gnus-info-marks (gnus-get-info group))) (setq articles (union (gnus-uncompress-sequence (cdr arts)) articles))) (setq articles (sort articles '<)) - ;; remove known articles + ;; Remove known articles. (when (gnus-agent-load-alist group) (setq articles (gnus-sorted-intersection articles @@ -1321,8 +1321,8 @@ The following commands are available: (let ((info (assq category gnus-category-alist)) (buffer-read-only nil)) (gnus-delete-line) - (gnus-category-write) - (setq gnus-category-alist (delq info gnus-category-alist)))) + (setq gnus-category-alist (delq info gnus-category-alist)) + (gnus-category-write))) (defun gnus-category-copy (category to) "Copy the current category." diff --git a/lisp/gnus-art.el b/lisp/gnus-art.el index b8f61d2..442a1fc 100644 --- a/lisp/gnus-art.el +++ b/lisp/gnus-art.el @@ -1,5 +1,5 @@ ;;; gnus-art.el --- article mode commands for Semi-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 ;; MORIOKA Tomohiko @@ -181,8 +181,8 @@ Possible values in this list are `empty', `newsgroups', `followup-to', (const :tag "Followup-to identical to newsgroups." followup-to) (const :tag "Reply-to identical to from." reply-to) (const :tag "Date less than four days old." date) - (const :tag "Very long To header." long-to) - (const :tag "Multiple To headers." many-to)) + (const :tag "Very long To and/or Cc header." long-to) + (const :tag "Multiple To and/or Cc headers." many-to)) :group 'gnus-article-hiding) (defcustom gnus-signature-separator '("^-- $" "^-- *$") @@ -1233,11 +1233,15 @@ always hide." 4)) (gnus-article-hide-header "date")))) ((eq elem 'long-to) - (let ((to (message-fetch-field "to"))) + (let ((to (message-fetch-field "to")) + (cc (message-fetch-field "cc"))) (when (> (length to) 1024) - (gnus-article-hide-header "to")))) + (gnus-article-hide-header "to")) + (when (> (length cc) 1024) + (gnus-article-hide-header "cc")))) ((eq elem 'many-to) - (let ((to-count 0)) + (let ((to-count 0) + (cc-count 0)) (goto-char (point-min)) (while (re-search-forward "^to:" nil t) (setq to-count (1+ to-count))) @@ -1249,7 +1253,19 @@ always hide." (forward-line -1) (narrow-to-region (point) (point-max)) (gnus-article-hide-header "to")) - (setq to-count (1- to-count))))))))))))) + (setq to-count (1- to-count)))) + (goto-char (point-min)) + (while (re-search-forward "^cc:" nil t) + (setq cc-count (1+ cc-count))) + (when (> cc-count 1) + (while (> cc-count 0) + (goto-char (point-min)) + (save-restriction + (re-search-forward "^cc:" nil nil cc-count) + (forward-line -1) + (narrow-to-region (point) (point-max)) + (gnus-article-hide-header "cc")) + (setq cc-count (1- cc-count))))))))))))) (defun gnus-article-hide-header (header) (save-excursion @@ -2761,7 +2777,7 @@ commands: (make-local-variable 'gnus-article-mime-handles) (make-local-variable 'gnus-article-decoded-p) (make-local-variable 'gnus-article-mime-handle-alist) - (make-local-variable 'gnus-article-washed-types) + (make-local-variable 'gnus-article-wash-types) (gnus-set-default-directory) (buffer-disable-undo) (setq buffer-read-only t) @@ -2795,7 +2811,6 @@ commands: (if (get-buffer name) (save-excursion (set-buffer name) - (kill-all-local-variables) (buffer-disable-undo) (setq buffer-read-only t) (unless (eq major-mode 'gnus-article-mode) @@ -2927,8 +2942,7 @@ If ALL-HEADERS is non-nil, no headers are hidden." (message "Message marked for downloading")) (gnus-summary-mark-article article gnus-canceled-mark) (unless (memq article gnus-newsgroup-sparse) - (gnus-error 1 - "No such article (may have expired or been canceled)"))))) + (gnus-error 1 "No such article (may have expired or been canceled)"))))) (if (or (eq result 'pseudo) (eq result 'nneething)) (progn @@ -3218,14 +3232,33 @@ value of the variable `gnus-show-mime' is non-nil." (let ((data (get-text-property (point) 'gnus-data))) (mm-interactively-view-part data))) -(defun gnus-mime-view-part-as-type () +(defun gnus-mime-view-part-as-type-internal () + (gnus-article-check-buffer) + (let* ((name (mail-content-type-get + (mm-handle-type (get-text-property (point) 'gnus-data)) + 'name)) + (def-type (and name (mm-default-file-encoding name)))) + (and def-type (cons def-type 0)))) + +(defun gnus-mime-view-part-as-type (mime-type) "Choose a MIME media type, and view the part as such." (interactive - (list (completing-read "View as MIME type: " - (mapcar 'list (mailcap-mime-types))))) + (list (completing-read + "View as MIME type: " + (mapcar (lambda (i) (list i i)) (mailcap-mime-types)) + nil nil + (gnus-mime-view-part-as-type-internal)))) (gnus-article-check-buffer) (let ((handle (get-text-property (point) 'gnus-data))) - (gnus-mm-display-part handle))) + (gnus-mm-display-part + (mm-make-handle (mm-handle-buffer handle) + (cons mime-type (cdr (mm-handle-type handle))) + (mm-handle-encoding handle) + (mm-handle-undisplayer handle) + (mm-handle-disposition handle) + (mm-handle-description handle) + (mm-handle-cache handle) + (mm-handle-id handle))))) (defun gnus-mime-copy-part (&optional handle) "Put the the MIME part under point into a new buffer." @@ -3969,7 +4002,8 @@ Argument LINES specifies lines to be scrolled down." ;; We disable the pick minor mode commands. (let (gnus-pick-mode) (setq func (lookup-key (current-local-map) keys)))) - (if (not func) + (if (or (not func) + (numberp func)) (ding) (unless (member keys nosave-in-article) (set-buffer gnus-article-current-summary)) @@ -4118,7 +4152,8 @@ If given a prefix, show the hidden text instead." (gnus-cache-request-article article group)) 'article) ;; Get the article and put into the article buffer. - ((or (stringp article) (numberp article)) + ((or (stringp article) + (numberp article)) (let ((gnus-override-method gnus-override-method) (methods (and (stringp article) gnus-refer-article-method)) @@ -4126,11 +4161,14 @@ If given a prefix, show the hidden text instead." (buffer-read-only nil)) (setq methods (if (listp methods) - (delq 'current methods) + methods (list methods))) - (if (and (null gnus-override-method) methods) - (setq gnus-override-method (pop methods))) + (when (and (null gnus-override-method) + methods) + (setq gnus-override-method (pop methods))) (while (not result) + (when (eq gnus-override-method 'current) + (setq gnus-override-method gnus-current-select-method)) (erase-buffer) (gnus-kill-all-overlays) (let ((gnus-newsgroup-name group)) @@ -4435,7 +4473,7 @@ after replacing with the original article." ;;; Internal Variables: -(defcustom gnus-button-url-regexp "\\b\\(s?https?\\|ftp\\|file\\|gopher\\|news\\|telnet\\|wais\\|mailto\\):\\(//[-a-zA-Z0-9_.]+:[0-9]*\\)?\\([-a-zA-Z0-9_=!?#$@~`%&*+|\\/:;.,]\\|\\w\\)+\\([-a-zA-Z0-9_=#$@~`%&*+|\\/]\\|\\w\\)" +(defcustom gnus-button-url-regexp "\\b\\(\\(s?https?\\|ftp\\|file\\|gopher\\|news\\|telnet\\|wais\\|mailto\\):\\(//[-a-zA-Z0-9_.]+:[0-9]*\\)?\\([-a-zA-Z0-9_=!?#$@~`%&*+|\\/:;.,]\\|\\w\\)+\\([-a-zA-Z0-9_=#$@~`%&*+|\\/]\\|\\w\\)\\)\\|[-a-zA-Z0-9_]+\\.[-a-zA-Z0-9_]+\\(\\.[-a-zA-Z0-9_]+[-a-zA-Z0-9_/]+\\)+" "Regular expression that matches URLs." :group 'gnus-article-buttons :type 'regexp) @@ -5085,7 +5123,8 @@ For example: (gnus-run-hooks 'gnus-part-display-hook) (unless gnus-inhibit-treatment (while (setq elem (pop alist)) - (setq val (symbol-value (car elem))) + (with-current-buffer gnus-summary-buffer + (setq val (symbol-value (car elem)))) (when (and (or (consp val) treated-type) (gnus-treat-predicate val) diff --git a/lisp/gnus-async.el b/lisp/gnus-async.el index 79063ed..1cd7d7b 100644 --- a/lisp/gnus-async.el +++ b/lisp/gnus-async.el @@ -1,5 +1,5 @@ ;;; gnus-async.el --- asynchronous support 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 ;; Keywords: news diff --git a/lisp/gnus-bcklg.el b/lisp/gnus-bcklg.el index 701cf38..5a9cbf6 100644 --- a/lisp/gnus-bcklg.el +++ b/lisp/gnus-bcklg.el @@ -1,5 +1,5 @@ ;;; gnus-bcklg.el --- backlog 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 ;; Keywords: news diff --git a/lisp/gnus-cache.el b/lisp/gnus-cache.el index 7f9cadd..ef82715 100644 --- a/lisp/gnus-cache.el +++ b/lisp/gnus-cache.el @@ -1,5 +1,6 @@ ;;; gnus-cache.el --- cache interface 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 ;; Tatsuya Ichikawa @@ -430,7 +431,7 @@ Returns the list of articles removed." (defun gnus-summary-insert-cached-articles () "Insert all the articles cached for this group into the current buffer." (interactive) - (let ((cached (sort (copy-sequence gnus-newsgroup-cached) '<)) + (let ((cached (sort (copy-sequence gnus-newsgroup-cached) '>)) (gnus-verbose (max 6 gnus-verbose))) (unless cached (gnus-message 3 "No cached articles for this group")) diff --git a/lisp/gnus-cite.el b/lisp/gnus-cite.el index 93cb0c3..a2dbe97 100644 --- a/lisp/gnus-cite.el +++ b/lisp/gnus-cite.el @@ -1,5 +1,6 @@ ;;; gnus-cite.el --- parse citations in articles 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 Abhiddenware; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by diff --git a/lisp/gnus-draft.el b/lisp/gnus-draft.el index 3e6def0..7a12263 100644 --- a/lisp/gnus-draft.el +++ b/lisp/gnus-draft.el @@ -1,5 +1,6 @@ ;;; gnus-draft.el --- draft message support for Semi-gnus -;; Copyright (C) 1997,98,99 Free Software Foundation, Inc. +;; Copyright (C) 1997, 1998, 1999, 2000 +;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; MORIOKA Tomohiko @@ -129,6 +130,7 @@ message-inhibit-body-encoding)) (message-send-hook (and group (not (equal group "nndraft:queue")) message-send-hook)) + (message-setup-hook nil) type method) ;; We read the meta-information that says how and where ;; this message is to be sent. diff --git a/lisp/gnus-dup.el b/lisp/gnus-dup.el index 691381f..96609cb 100644 --- a/lisp/gnus-dup.el +++ b/lisp/gnus-dup.el @@ -1,5 +1,6 @@ ;;; gnus-dup.el --- suppression of duplicate articles 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 ;; Keywords: news diff --git a/lisp/gnus-eform.el b/lisp/gnus-eform.el index 09f2bb5..9fe7242 100644 --- a/lisp/gnus-eform.el +++ b/lisp/gnus-eform.el @@ -1,5 +1,6 @@ ;;; gnus-eform.el --- a mode for editing forms 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 ;; Keywords: news diff --git a/lisp/gnus-ems.el b/lisp/gnus-ems.el index dbce926..59d382d 100644 --- a/lisp/gnus-ems.el +++ b/lisp/gnus-ems.el @@ -1,5 +1,6 @@ ;;; gnus-ems.el --- functions for making Semi-gnus work under different Emacsen -;; 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 ;; Tatsuya Ichikawa diff --git a/lisp/gnus-group.el b/lisp/gnus-group.el index 95f77ea..a28fc11 100644 --- a/lisp/gnus-group.el +++ b/lisp/gnus-group.el @@ -1,5 +1,6 @@ ;;; gnus-group.el --- group mode commands 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 ;; Keywords: news @@ -162,6 +163,7 @@ with some simple extensions. %n Select from where (string) %z A string that look like `<%s:%n>' if a foreign select method is used %d The date the group was last entered. +%E Icon as defined by `gnus-group-icon-list'. %u User defined specifier. The next character in the format string should be a letter. Gnus will call the function gnus-user-format-function-X, where X is the letter following %u. The function will be passed the @@ -361,6 +363,38 @@ ticked: The number of ticked articles." :group 'gnus-group-visual :type 'character) +(defgroup gnus-group-icons nil + "Add Icons to your group buffer. " + :group 'gnus-group-visual) + +(defcustom gnus-group-icon-list + nil + "*Controls the insertion of icons into group buffer lines. + +Below is a list of `Form'/`File' pairs. When deciding how a +particular group line should be displayed, each form is evaluated. +The icon from the file field after the first true form is used. You +can change how those group lines are displayed by editing the file +field. The File will either be found in the +`gnus-group-glyph-directory' or by designating absolute path to the +file. + +It is also possible to change and add form fields, but currently that +requires an understanding of Lisp expressions. Hopefully this will +change in a future release. For now, you can use the following +variables in the Lisp expression: + +group: The name of the group. +unread: The number of unread articles in the group. +method: The select method used. +mailp: Whether it's a mail group or not. +newsp: Whether it's a news group or not +level: The level of the group. +score: The score of the group. +ticked: The number of ticked articles." + :group 'gnus-group-icons + :type '(repeat (cons (sexp :tag "Form") file))) + ;;; Internal variables (defvar gnus-group-sort-alist-function 'gnus-group-sort-flat @@ -405,6 +439,7 @@ ticked: The number of ticked articles." (?s gnus-tmp-news-server ?s) (?n gnus-tmp-news-method ?s) (?P gnus-group-indentation ?s) + (?E gnus-tmp-group-icon ?s) (?l gnus-tmp-grouplens ?s) (?z gnus-tmp-news-method-string ?s) (?m (gnus-group-new-mail gnus-tmp-group) ?c) @@ -434,6 +469,10 @@ ticked: The number of ticked articles." (defvar gnus-group-list-mode nil) + +(defvar gnus-group-icon-cache nil) +(defvar gnus-group-running-xemacs (string-match "XEmacs" emacs-version)) + ;;; ;;; Gnus group mode ;;; @@ -573,7 +612,8 @@ ticked: The number of ticked articles." "d" gnus-group-description-apropos "m" gnus-group-list-matching "M" gnus-group-list-all-matching - "l" gnus-group-list-level) + "l" gnus-group-list-level + "c" gnus-group-list-cached) (gnus-define-keys (gnus-group-score-map "W" gnus-group-mode-map) "f" gnus-score-flush-cache) @@ -649,7 +689,8 @@ ticked: The number of ticked articles." ["Group and description apropos..." gnus-group-description-apropos t] ["List groups matching..." gnus-group-list-matching t] ["List all groups matching..." gnus-group-list-all-matching t] - ["List active file" gnus-group-list-active t]) + ["List active file" gnus-group-list-active t] + ["List groups with cached" gnus-group-list-cached t]) ("Sort" ["Default sort" gnus-group-sort-groups t] ["Sort by method" gnus-group-sort-groups-by-method t] @@ -1073,6 +1114,7 @@ If REGEXP, only list groups matching REGEXP." ?m ? )) (gnus-tmp-moderated-string (if (eq gnus-tmp-moderated ?m) "(m)" "")) + (gnus-tmp-group-icon "==&&==") (gnus-tmp-method (gnus-server-get-method gnus-tmp-group gnus-tmp-method)) ; (gnus-tmp-news-server (or (cadr gnus-tmp-method) "")) @@ -1108,8 +1150,8 @@ If REGEXP, only list groups matching REGEXP." gnus-marked ,gnus-tmp-marked-mark gnus-indentation ,gnus-group-indentation gnus-level ,gnus-tmp-level)) + (forward-line -1) (when (inline (gnus-visual-p 'group-highlight 'highlight)) - (forward-line -1) (gnus-run-hooks 'gnus-group-update-hook) (forward-line)) ;; Allow XEmacs to remove front-sticky text properties. @@ -2556,7 +2598,7 @@ sort in reverse order." ;; Group catching up. (defun gnus-group-catchup-current (&optional n all) - "Mark all articles not marked as unread in current newsgroup as read. + "Mark all unread articles in the current newsgroup as read. If prefix argument N is numeric, the next N newsgroups will be caught up. If ALL is non-nil, marked articles will also be marked as read. Cross references (Xref: header) of articles are ignored. @@ -2654,7 +2696,10 @@ or nil if no action could be taken." (expirable (if (gnus-group-total-expirable-p group) (cons nil (gnus-list-of-read-articles group)) (assq 'expire (gnus-info-marks info)))) - (expiry-wait (gnus-group-find-parameter group 'expiry-wait))) + (expiry-wait (gnus-group-find-parameter group 'expiry-wait)) + (nnmail-expiry-target + (or (gnus-group-find-parameter group 'expiry-target) + nnmail-expiry-target))) (when expirable (setcdr expirable @@ -3533,6 +3578,54 @@ or `gnus-group-catchup-group-hook'." "" (gnus-time-iso8601 time)))) +(defun gnus-group-prepare-flat-predicate (level predicate &optional lowest) + "List all newsgroups with unread articles of level LEVEL or lower. +If LOWEST is non-nil, list all newsgroups of level LOWEST or higher. +If PREDICATE, only list groups which PREDICATE returns non-nil." + (set-buffer gnus-group-buffer) + (let ((buffer-read-only nil) + (newsrc (cdr gnus-newsrc-alist)) + (lowest (or lowest 1)) + info clevel unread group params) + (erase-buffer) + ;; List living groups. + (while newsrc + (setq info (car newsrc) + group (gnus-info-group info) + params (gnus-info-params info) + newsrc (cdr newsrc) + unread (car (gnus-gethash group gnus-newsrc-hashtb))) + (and unread ; This group might be unchecked + (funcall predicate info) + (<= (setq clevel (gnus-info-level info)) level) + (>= clevel lowest) + (gnus-group-insert-group-line + group (gnus-info-level info) + (gnus-info-marks info) unread (gnus-info-method info)))) + + (gnus-group-set-mode-line) + (setq gnus-group-list-mode (cons level t)) + (gnus-run-hooks 'gnus-group-prepare-hook) + t)) + +(defun gnus-group-list-cached (level &optional lowest) + "List all groups with cached articles. +If the prefix LEVEL is non-nil, it should be a number that says which +level to cut off listing groups. +If LOWEST, don't list groups with level lower than LOWEST. + +This command may read the active file." + (interactive "P") + (when level + (setq level (prefix-numeric-value level))) + (gnus-group-prepare-flat-predicate (or level gnus-level-killed) + #'(lambda (info) + (let ((marks (gnus-info-marks info))) + (assq 'cache marks))) + lowest) + (goto-char (point-min)) + (gnus-group-position-point)) + (provide 'gnus-group) ;;; gnus-group.el ends here diff --git a/lisp/gnus-int.el b/lisp/gnus-int.el index 97061da..c7b8c8b 100644 --- a/lisp/gnus-int.el +++ b/lisp/gnus-int.el @@ -1,5 +1,6 @@ ;;; gnus-int.el --- backend interface 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 ;; MORIOKA Tomohiko diff --git a/lisp/gnus-kill.el b/lisp/gnus-kill.el index c5dbd2f..a5d17c0 100644 --- a/lisp/gnus-kill.el +++ b/lisp/gnus-kill.el @@ -1,5 +1,6 @@ ;;; gnus-kill.el --- kill commands 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: Masanobu UMEDA ;; Lars Magne Ingebrigtsen diff --git a/lisp/gnus-logic.el b/lisp/gnus-logic.el index 0b14ce0..56964ff 100644 --- a/lisp/gnus-logic.el +++ b/lisp/gnus-logic.el @@ -1,5 +1,6 @@ ;;; gnus-logic.el --- advanced scoring code 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 ;; Keywords: news diff --git a/lisp/gnus-mailcap.el b/lisp/gnus-mailcap.el index f4c6be8..2542c58 100644 --- a/lisp/gnus-mailcap.el +++ b/lisp/gnus-mailcap.el @@ -1,5 +1,5 @@ ;;; mailcap.el --- Functions for displaying MIME parts -;; Copyright (C) 1998,99 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ;; Author: William M. Perry ;; Lars Magne Ingebrigtsen @@ -672,6 +672,7 @@ this type is returned." (setq viewers (cdr viewers))) (setq passed (sort (nreverse passed) 'mailcap-viewer-lessp)) (setq viewer (car passed)))) + (setq passed (nreverse passed)) (when (and (stringp (cdr (assq 'viewer viewer))) passed) (setq viewer (car passed))) @@ -713,6 +714,7 @@ this type is returned." (".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") diff --git a/lisp/gnus-mh.el b/lisp/gnus-mh.el index 665e361..f737712 100644 --- a/lisp/gnus-mh.el +++ b/lisp/gnus-mh.el @@ -1,5 +1,6 @@ ;;; gnus-mh.el --- mh-e 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: Masanobu UMEDA ;; Lars Magne Ingebrigtsen diff --git a/lisp/gnus-mlspl.el b/lisp/gnus-mlspl.el index 2394384..5ddff92 100644 --- a/lisp/gnus-mlspl.el +++ b/lisp/gnus-mlspl.el @@ -1,7 +1,8 @@ ;;; gnus-mlspl.el --- a group params-based mail splitting mechanism -;; Copyright (C) 1998,1999 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000 +;; Free Software Foundation, Inc. -;; Author: Alexandre Oliva +;; Author: Alexandre Oliva ;; Keywords: news, mail ;; This program is free software; you can redistribute it and/or modify @@ -137,7 +138,7 @@ Calling (gnus-group-split-fancy nil nil \"mail.misc\") returns: (memq group groups)) (and (stringp groups) (string-match groups group))) - (let ((split-spec (cdr (assoc 'split-spec params))) group-clean) + (let ((split-spec (assoc 'split-spec params)) group-clean) ;; Remove backend from group name (setq group-clean (string-match ":" group)) (setq group-clean @@ -145,12 +146,13 @@ Calling (gnus-group-split-fancy nil nil \"mail.misc\") returns: (substring group (1+ group-clean)) group)) (if split-spec - (if (eq split-spec 'catch-all) - ;; Emit catch-all only when requested - (when catch-all - (setq catch-all group-clean)) - ;; Append split-spec to the main split - (push split-spec split)) + (when (setq split-spec (cdr split-spec)) + (if (eq split-spec 'catch-all) + ;; Emit catch-all only when requested + (when catch-all + (setq catch-all group-clean)) + ;; Append split-spec to the main split + (push split-spec split))) ;; Let's deduce split-spec from other params (let ((to-address (cdr (assoc 'to-address params))) (to-list (cdr (assoc 'to-list params))) diff --git a/lisp/gnus-move.el b/lisp/gnus-move.el index 38de4d5..8c0cc75 100644 --- a/lisp/gnus-move.el +++ b/lisp/gnus-move.el @@ -1,5 +1,6 @@ ;;; gnus-move.el --- commands for moving Gnus from one server to another -;; 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 ;; Keywords: news diff --git a/lisp/gnus-msg.el b/lisp/gnus-msg.el index 4abb7dc..2b86993 100644 --- a/lisp/gnus-msg.el +++ b/lisp/gnus-msg.el @@ -1,5 +1,6 @@ ;;; gnus-msg.el --- mail and post interface for Semi-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: Masanobu UMEDA ;; Lars Magne Ingebrigtsen @@ -1174,6 +1175,7 @@ this is a reply." (group (or group gnus-newsgroup-name "")) (gcc-self-val (and gnus-newsgroup-name + (not (equal gnus-newsgroup-name "")) (gnus-group-find-parameter gnus-newsgroup-name 'gcc-self))) result @@ -1326,36 +1328,35 @@ this is a reply." (setq results (delq name (delq address results))) (make-local-variable 'message-setup-hook) (dolist (result results) - (when (cdr result) - (add-hook 'message-setup-hook - (cond - ((eq 'eval (car result)) - 'ignore) - ((eq 'body (car result)) + (add-hook 'message-setup-hook + (cond + ((eq 'eval (car result)) + 'ignore) + ((eq 'body (car result)) + `(lambda () + (save-excursion + (message-goto-body) + (insert ,(cdr result))))) + ((eq 'signature (car result)) + (set (make-local-variable 'message-signature) nil) + (set (make-local-variable 'message-signature-file) nil) + (if (not (cdr result)) + 'ignore + `(lambda () + (save-excursion + (let ((message-signature ,(cdr result))) + (when message-signature + (message-insert-signature))))))) + (t + (let ((header + (if (symbolp (car result)) + (capitalize (symbol-name (car result))) + (car result)))) `(lambda () (save-excursion - (message-goto-body) - (insert ,(cdr result))))) - ((eq 'signature (car result)) - (set (make-local-variable 'message-signature) nil) - (set (make-local-variable 'message-signature-file) nil) - (if (not (cdr result)) - 'ignore - `(lambda () - (save-excursion - (let ((message-signature ,(cdr result))) - (when message-signature - (message-insert-signature))))))) - (t - (let ((header - (if (symbolp (car result)) - (capitalize (symbol-name (car result))) - (car result)))) - `(lambda () - (save-excursion - (message-remove-header ,header) - (message-goto-eoh) - (insert ,header ": " ,(cdr result) "\n"))))))))) + (message-remove-header ,header) + (message-goto-eoh) + (insert ,header ": " ,(cdr result) "\n")))))))) (when (or name address) (add-hook 'message-setup-hook `(lambda () diff --git a/lisp/gnus-score.el b/lisp/gnus-score.el index 3fc01fb..3c60ca6 100644 --- a/lisp/gnus-score.el +++ b/lisp/gnus-score.el @@ -1,5 +1,6 @@ ;;; gnus-score.el --- scoring code 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 ;; Lars Magne Ingebrigtsen @@ -2854,10 +2855,10 @@ If ADAPT, return the home adaptive file instead." ;; Function. ((gnus-functionp elem) (funcall elem group)) - ;; Regexp-file cons + ;; Regexp-file cons. ((consp elem) (when (string-match (gnus-globalify-regexp (car elem)) group) - (replace-match (cadr elem) t nil group )))))) + (replace-match (cadr elem) t nil group)))))) (when found (if (file-name-absolute-p found) found diff --git a/lisp/gnus-spec.el b/lisp/gnus-spec.el index e57e027..552d981 100644 --- a/lisp/gnus-spec.el +++ b/lisp/gnus-spec.el @@ -1,5 +1,6 @@ ;;; gnus-spec.el --- format spec 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 ;; Katsumi Yamaoka diff --git a/lisp/gnus-srvr.el b/lisp/gnus-srvr.el index ae85dac..c7ae7b7 100644 --- a/lisp/gnus-srvr.el +++ b/lisp/gnus-srvr.el @@ -1,5 +1,6 @@ ;;; gnus-srvr.el --- virtual server 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: Lars Magne Ingebrigtsen ;; Keywords: news diff --git a/lisp/gnus-start.el b/lisp/gnus-start.el index 0053a54..c797b3d 100644 --- a/lisp/gnus-start.el +++ b/lisp/gnus-start.el @@ -1,5 +1,6 @@ ;;; gnus-start.el --- startup 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 ;; Keywords: news diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index 75058c6..c143e86 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -1,5 +1,6 @@ ;;; gnus-sum.el --- summary mode commands for Semi-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 ;; MORIOKA Tomohiko @@ -185,9 +186,11 @@ This variable will only be used if the value of This applies to marking commands as well as other commands that \"naturally\" select the next article, like, for instance, `SPC' at the end of an article. -If nil, only the marking commands will go to the next (un)read article. -If `never', commands that usually go to the next unread article, will -go to the next article, whether it is read or not." + +If nil, the marking commands do NOT go to the next unread article +(they go to the next article instead). If `never', commands that +usually go to the next unread article, will go to the next article, +whether it is read or not." :group 'gnus-summary-marks :link '(custom-manual "(gnus)Setting Marks") :type '(choice (const :tag "off" nil) @@ -922,6 +925,11 @@ For example: ((1 . cn-gb-2312) (2 . big5))." :type 'boolean :group 'gnus-summary-marks) +(defcustom gnus-alter-articles-to-read-function nil + "Function to be called to alter the list of articles to be selected." + :type 'function + :group 'gnus-summary) + ;;; Internal variables (defvar gnus-scores-exclude-files nil) @@ -1342,6 +1350,8 @@ increase the score of each group you read." "\M-\C-h" gnus-summary-hide-thread "\M-\C-f" gnus-summary-next-thread "\M-\C-b" gnus-summary-prev-thread + [(meta down)] gnus-summary-next-thread + [(meta up)] gnus-summary-prev-thread "\M-\C-u" gnus-summary-up-thread "\M-\C-d" gnus-summary-down-thread "&" gnus-summary-execute-command @@ -3398,17 +3408,19 @@ Returns HEADER if it was entered in the DEPENDENCIES. Returns nil otherwise." (memq article gnus-newsgroup-expirable) ;; Only insert the Subject string when it's different ;; from the previous Subject string. - (if (gnus-subject-equal - (condition-case () - (mail-header-subject - (gnus-data-header - (cadr - (gnus-data-find-list - article - (gnus-data-list t))))) - ;; Error on the side of excessive subjects. - (error "")) - (mail-header-subject header)) + (if (and + gnus-show-threads + (gnus-subject-equal + (condition-case () + (mail-header-subject + (gnus-data-header + (cadr + (gnus-data-find-list + article + (gnus-data-list t))))) + ;; Error on the side of excessive subjects. + (error "")) + (mail-header-subject header))) "" (mail-header-subject header)) nil (cdr (assq article gnus-newsgroup-scored)) @@ -3622,7 +3634,6 @@ If LINE, insert the rebuilt thread starting on line LINE." (while thread (gnus-remove-thread-1 (car thread)) (setq thread (cdr thread)))) - (gnus-summary-show-all-threads) (gnus-remove-thread-1 thread)))))))) (defun gnus-remove-thread-1 (thread) @@ -3634,6 +3645,7 @@ If LINE, insert the rebuilt thread starting on line LINE." (gnus-remove-thread-1 (pop thread))) (when (setq d (gnus-data-find number)) (goto-char (gnus-data-pos d)) + (gnus-summary-show-thread) (gnus-data-remove number (- (gnus-point-at-bol) @@ -4300,6 +4312,12 @@ If SELECT-ARTICLES, only select those articles from GROUP." (gnus-sorted-intersection gnus-newsgroup-unreads (gnus-sorted-complement gnus-newsgroup-unreads articles))) + (when gnus-alter-articles-to-read-function + (setq gnus-newsgroup-unreads + (sort + (funcall gnus-alter-articles-to-read-function + gnus-newsgroup-name gnus-newsgroup-unreads) + '<))) articles))) (defun gnus-killed-articles (killed articles) @@ -5138,7 +5156,8 @@ articles with that subject. If BACKWARD, search backward instead." "Center point in window and redisplay frame. Also do horizontal recentering." (interactive "P") - (when (and gnus-auto-center-summary + (when (and nil + gnus-auto-center-summary (not (eq gnus-auto-center-summary 'vertical))) (gnus-horizontal-recenter)) (recenter n)) @@ -5149,6 +5168,7 @@ If `gnus-auto-center-summary' is nil, or the article buffer isn't displayed, no centering will be performed." ;; Suggested by earle@mahendo.JPL.NASA.GOV (Greg Earle). ;; Recenter only when requested. Suggested by popovich@park.cs.columbia.edu. + (interactive) (let* ((top (cond ((< (window-height) 4) 0) ((< (window-height) 7) 1) (t (if (numberp gnus-auto-center-summary) @@ -7499,7 +7519,8 @@ ACTION can be either `move' (the default), `crosspost' or `copy'." articles prefix)) (set (intern (format "gnus-current-%s-group" action)) to-newsgroup)) (setq to-method (or select-method - (gnus-group-name-to-method to-newsgroup))) + (gnus-server-to-method + (gnus-group-method to-newsgroup)))) ;; Check the method we are to move this article to... (unless (gnus-check-backend-function 'request-accept-article (car to-method)) @@ -9203,7 +9224,8 @@ save those articles instead." (mapcar (lambda (el) (list el)) (nreverse split-name)) nil nil nil - 'gnus-group-history))))) + 'gnus-group-history)))) + (to-method (gnus-server-to-method (gnus-group-method to-newsgroup)))) (when to-newsgroup (if (or (string= to-newsgroup "") (string= to-newsgroup prefix)) @@ -9211,14 +9233,12 @@ save those articles instead." (unless to-newsgroup (error "No group name entered")) (or (gnus-active to-newsgroup) - (gnus-activate-group to-newsgroup) + (gnus-activate-group to-newsgroup nil nil to-method) (if (gnus-y-or-n-p (format "No such group: %s. Create it? " to-newsgroup)) - (or (and (gnus-request-create-group - to-newsgroup (gnus-group-name-to-method to-newsgroup)) + (or (and (gnus-request-create-group to-newsgroup to-method) (gnus-activate-group - to-newsgroup nil nil - (gnus-group-name-to-method to-newsgroup)) + to-newsgroup nil nil to-method) (gnus-subscribe-group to-newsgroup)) (error "Couldn't create group %s" to-newsgroup))) (error "No such group: %s" to-newsgroup))) diff --git a/lisp/gnus-topic.el b/lisp/gnus-topic.el index 6006fbe..528fb5a 100644 --- a/lisp/gnus-topic.el +++ b/lisp/gnus-topic.el @@ -1,5 +1,6 @@ ;;; gnus-topic.el --- a folding minor mode for Gnus group buffers -;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc. +;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 +;; Free Software Foundation, Inc. ;; Author: Ilja Weis ;; Lars Magne Ingebrigtsen diff --git a/lisp/gnus-util.el b/lisp/gnus-util.el index 9c665a9..d3d4309 100644 --- a/lisp/gnus-util.el +++ b/lisp/gnus-util.el @@ -1,5 +1,6 @@ ;;; gnus-util.el --- utility functions for Semi-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 ;; Tatsuya Ichikawa @@ -852,7 +853,8 @@ ARG is passed to the first function." (when (file-exists-p file) (with-temp-buffer (let ((tokens '("machine" "default" "login" - "password" "account" "macdef" "force")) + "password" "account" "macdef" "force" + "port")) alist elem result pair) (insert-file-contents file) (goto-char (point-min)) @@ -900,16 +902,27 @@ ARG is passed to the first function." (forward-line 1)) (nreverse result))))) -(defun gnus-netrc-machine (list machine) +(defun gnus-netrc-machine (list machine &optional port) "Return the netrc values from LIST for MACHINE or for the default entry." - (let ((rest list)) - (while (and list - (not (equal (cdr (assoc "machine" (car list))) machine))) + (let ((rest list) + result) + (while list + (when (equal (cdr (assoc "machine" (car list))) machine) + (push (car list) result)) (pop list)) - (car (or list - (progn (while (and rest (not (assoc "default" (car rest)))) - (pop rest)) - rest))))) + (unless result + ;; No machine name matches, so we look for default entries. + (while rest + (when (assoc "default" (car rest)) + (push (car rest) result)) + (pop rest))) + (when result + (setq result (nreverse result)) + (while (and result + (not (equal (or port "nntp") + (gnus-netrc-get (car result) "port")))) + (pop result)) + (car result)))) (defun gnus-netrc-get (alist type) "Return the value of token TYPE from ALIST." diff --git a/lisp/gnus-uu.el b/lisp/gnus-uu.el index b588861..c9ad08b 100644 --- a/lisp/gnus-uu.el +++ b/lisp/gnus-uu.el @@ -1,5 +1,6 @@ ;;; gnus-uu.el --- extract (uu)encoded files in Gnus -;; Copyright (C) 198,995,86,87,93,94,95,96,97,98 Free Software Foundation, Inc. +;; Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, 1998, 2000 +;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Created: 2 Oct 1993 diff --git a/lisp/gnus-vers.el b/lisp/gnus-vers.el index 709c672..8a743aa 100644 --- a/lisp/gnus-vers.el +++ b/lisp/gnus-vers.el @@ -37,10 +37,10 @@ ;; Product information of this gnus. (product-provide 'gnus-vers (product-define "T-gnus" nil - (list 6 14 2 + (list 6 14 3 (string-to-number gnus-revision-number)))) -(defconst gnus-original-version-number "5.8.4" +(defconst gnus-original-version-number "5.8.5" "Version number for this version of Gnus.") (provide 'running-pterodactyl-gnus-0_73-or-later) diff --git a/lisp/gnus-win.el b/lisp/gnus-win.el index 1da662d..6a9ce29 100644 --- a/lisp/gnus-win.el +++ b/lisp/gnus-win.el @@ -1,5 +1,6 @@ ;;; gnus-win.el --- window configuration 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 ;; Keywords: news @@ -446,11 +447,11 @@ See the Gnus manual for an explanation of the syntax used.") (gnus-delete-windows-in-gnusey-frames)) ;; Just remove some windows. (gnus-remove-some-windows) - (set-buffer nntp-server-buffer)) + (switch-to-buffer nntp-server-buffer)) (select-frame frame))) (let (gnus-window-frame-focus) - (set-buffer nntp-server-buffer) + (switch-to-buffer nntp-server-buffer) (gnus-configure-frame split) (when gnus-window-frame-focus (select-frame (window-frame gnus-window-frame-focus)))))))) diff --git a/lisp/gnus-xmas.el b/lisp/gnus-xmas.el index 334a586..0e79431 100644 --- a/lisp/gnus-xmas.el +++ b/lisp/gnus-xmas.el @@ -893,6 +893,76 @@ XEmacs compatibility workaround." (goto-char (event-point event)) (funcall (event-function response) (event-object response)))) +(defun gnus-group-add-icon () + "Add an icon to the current line according to `gnus-group-icon-list'." + (let* ((p (point)) + (end (progn (end-of-line) (point))) + ;; now find out where the line starts and leave point there. + (beg (progn (beginning-of-line) (point)))) + (save-restriction + (narrow-to-region beg end) + (goto-char beg) + (when (search-forward "==&&==" nil t) + (let* ((group (gnus-group-group-name)) + (entry (gnus-group-entry group)) + (unread (if (numberp (car entry)) (car entry) 0)) + (active (gnus-active group)) + (total (if active (1+ (- (cdr active) (car active))) 0)) + (info (nth 2 entry)) + (method (gnus-server-get-method group (gnus-info-method info))) + (marked (gnus-info-marks info)) + (mailp (memq 'mail (assoc (symbol-name + (car (or method gnus-select-method))) + gnus-valid-select-methods))) + (level (or (gnus-info-level info) gnus-level-killed)) + (score (or (gnus-info-score info) 0)) + (ticked (gnus-range-length (cdr (assq 'tick marked)))) + (group-age (gnus-group-timestamp-delta group)) + (inhibit-read-only t) + (list gnus-group-icon-list) + (mystart (match-beginning 0)) + (myend (match-end 0))) + (goto-char (point-min)) + (while (and list + (not (eval (caar list)))) + (setq list (cdr list))) + (if list + (let* ((file (cdar list)) + (glyph (gnus-group-icon-create-glyph + (buffer-substring mystart myend) + file))) + (if glyph + (progn + (mapcar 'delete-annotation (annotations-at myend)) + (let ((ext (make-extent mystart myend)) + (ant (make-annotation glyph myend 'text))) + ;; set text extent params + (set-extent-property ext 'end-open t) + (set-extent-property ext 'start-open t) + (set-extent-property ext 'invisible t))) + (delete-region mystart myend))) + (delete-region mystart myend)))) + (widen)) + (goto-char p))) + +(defun gnus-group-icon-create-glyph (substring pixmap) + "Create a glyph for insertion into a group line." + (and + gnus-group-running-xemacs + (or + (cdr-safe (assoc pixmap gnus-group-icon-cache)) + (let* ((glyph (make-glyph + (list + (cons 'x + (expand-file-name pixmap gnus-xmas-glyph-directory)) + (cons 'mswindows + (expand-file-name pixmap gnus-xmas-glyph-directory)) + (cons 'tty substring))))) + (setq gnus-group-icon-cache + (cons (cons pixmap glyph) gnus-group-icon-cache)) + (set-glyph-face glyph 'default) + glyph)))) + (provide 'gnus-xmas) ;;; gnus-xmas.el ends here diff --git a/lisp/gnus.el b/lisp/gnus.el index a4df64f..33111fd 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -1,6 +1,7 @@ ;;; gnus.el --- a newsreader for GNU Emacs -;; Copyright (C) 1987, 88, 89, 90, 93, 94, 95, 96, 97, 98, 99 -;; Free Software Foundation, Inc. +;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996, +;; 1997, 1998, 2000 +;; Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Lars Magne Ingebrigtsen @@ -1710,7 +1711,8 @@ use the article treating faculties instead. Is is described in Info node gnus-cache-possibly-remove-articles gnus-cache-request-article gnus-cache-retrieve-headers gnus-cache-possibly-alter-active gnus-cache-enter-remove-article gnus-cached-article-p - gnus-cache-open gnus-cache-close gnus-cache-update-article) + gnus-cache-open gnus-cache-close gnus-cache-update-article + gnus-cache-articles-in-group) ("gnus-cache" :interactive t gnus-jog-cache gnus-cache-enter-article gnus-cache-remove-article gnus-summary-insert-cached-articles) ("gnus-score" :interactive t diff --git a/lisp/ietf-drums.el b/lisp/ietf-drums.el index 6df0b0f..853c208 100644 --- a/lisp/ietf-drums.el +++ b/lisp/ietf-drums.el @@ -1,5 +1,6 @@ ;;; ietf-drums.el --- Functions for parsing RFC822bis headers -;; Copyright (C) 1998,99 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000 +;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; This file is part of GNU Emacs. diff --git a/lisp/imap.el b/lisp/imap.el index 97ea769..e07f8fb 100644 --- a/lisp/imap.el +++ b/lisp/imap.el @@ -1,5 +1,6 @@ ;;; imap.el --- imap library -;; Copyright (C) 1998,1999 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000 +;; Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Keywords: mail diff --git a/lisp/lpath.el b/lisp/lpath.el index c7e3c57..cf6c777 100644 --- a/lisp/lpath.el +++ b/lisp/lpath.el @@ -47,7 +47,8 @@ rmail-update-summary url-retrieve temp-directory babel-fetch babel-wash find-coding-systems-for-charsets sc-cite-regexp - vcard-pretty-print make-symbolic-link)) + vcard-pretty-print image-type-available-p + make-overlay overlay-put make-symbolic-link)) (maybe-bind '(global-face-data mark-active transient-mark-mode mouse-selection-click-count mouse-selection-click-count-buffer buffer-display-table @@ -99,7 +100,7 @@ rmail-summary-exists rmail-select-summary rmail-update-summary url-generic-parse-url valid-image-instantiator-format-p babel-fetch babel-wash sc-cite-regexp - vcard-pretty-print + vcard-pretty-print image-type-available-p coding-system-get find-coding-system find-coding-systems-for-charsets find-coding-systems-region font-lock-set-defaults function-max-args get-charset-property diff --git a/lisp/mail-parse.el b/lisp/mail-parse.el index 078907e..d0ce7da 100644 --- a/lisp/mail-parse.el +++ b/lisp/mail-parse.el @@ -1,5 +1,6 @@ ;;; mail-parse.el --- Interface functions for parsing mail -;; Copyright (C) 1998,99 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000 +;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; This file is part of GNU Emacs. diff --git a/lisp/mail-prsvr.el b/lisp/mail-prsvr.el index de43787..2566abc 100644 --- a/lisp/mail-prsvr.el +++ b/lisp/mail-prsvr.el @@ -1,5 +1,5 @@ ;;; mail-prsvr.el --- Interface variables for parsing mail -;; Copyright (C) 1999 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; This file is part of GNU Emacs. diff --git a/lisp/mail-source.el b/lisp/mail-source.el index 2017b4e..022caa6 100644 --- a/lisp/mail-source.el +++ b/lisp/mail-source.el @@ -1,5 +1,5 @@ ;;; mail-source.el --- functions for fetching mail -;; Copyright (C) 1999 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news, mail @@ -62,7 +62,7 @@ If non-nil, this maildrop will be checked periodically for new mail." :group 'mail-source :type 'integer) -(defcustom mail-source-delete-incoming t +(defcustom mail-source-delete-incoming nil "*If non-nil, delete incoming files after handling." :group 'mail-source :type 'boolean) diff --git a/lisp/message.el b/lisp/message.el index b69238c..10f6e80 100644 --- a/lisp/message.el +++ b/lisp/message.el @@ -1,5 +1,6 @@ ;;; message.el --- composing mail and news messages -;; 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 ;; MORIOKA Tomohiko @@ -378,11 +379,6 @@ If t, use `message-user-organization-file'." :group 'message-forwarding :type 'string) -(defcustom message-signature-before-forwarded-message t - "*If non-nil, put the signature before any included forwarded message." - :group 'message-forwarding - :type 'boolean) - (defcustom message-included-forward-headers "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^\\(Mail-\\)?Followup-To:\\|^\\(Mail-\\)?Reply-To:\\|^Mail-Copies-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^Cc:\\|^Posted-To:\\|^Apparently-To:\\|^Gnus-Warning:\\|^Resent-\\|^Message-ID:\\|^References:\\|^Content-\\|^MIME-Version:" "*Regexp matching headers to be included in forwarded messages." @@ -410,6 +406,11 @@ The provided functions are: :group 'message-forwarding :type 'boolean) +(defcustom message-forward-before-signature t + "*If non-nil, put forwarded message before signature, else after." + :group 'message-forwarding + :type 'boolean) + (defcustom message-wash-forwarded-subjects nil "*If non-nil, try to remove as much old cruft as possible from the subject of messages before generating the new subject of a forward." :group 'message-forwarding @@ -420,7 +421,7 @@ The provided functions are: :group 'message-interface :type 'regexp) -(defcustom message-forward-ignored-headers nil +(defcustom message-forward-ignored-headers "Content-Transfer-Encoding" "*All headers that match this regexp will be deleted when forwarding a message." :group 'message-forwarding :type '(choice (const :tag "None" nil) @@ -431,7 +432,7 @@ The provided functions are: :group 'message-insertion :type 'regexp) -(defcustom message-cancel-message "I am canceling my own article." +(defcustom message-cancel-message "I am canceling my own article.\n" "Message to be inserted in the cancel message." :group 'message-interface :type 'string) @@ -1432,6 +1433,7 @@ The cdr of ech entry is a function for applying the face to a region.") (defun message-fetch-field (header &optional not-all) "The same as `mail-fetch-field', only remove all newlines." (let* ((inhibit-point-motion-hooks t) + (case-fold-search t) (value (mail-fetch-field header nil (not not-all)))) (when value (while (string-match "\n[\t ]+" value) @@ -1851,6 +1853,8 @@ M-RET message-newline-and-reformat (break the line and reformat)." (setq adaptive-fill-first-line-regexp (concat "[ \t]*[-a-z0-9A-Z]*\\(>[ \t]*\\)+[ \t]*\\|" adaptive-fill-first-line-regexp)) + (make-local-variable 'auto-fill-inhibit-regexp) + (setq auto-fill-inhibit-regexp "^[A-Z][^: \n\t]+:") (make-local-variable 'indent-tabs-mode) ;Turn off tabs for indentation. (setq indent-tabs-mode nil) (run-hooks 'text-mode-hook 'message-mode-hook)) @@ -1994,6 +1998,24 @@ With the prefix argument FORCE, insert the header anyway." (insert (or (message-fetch-reply-field "reply-to") (message-fetch-reply-field "from") ""))) +(defun message-widen-reply () + "Widen the reply to include maximum recipients." + (interactive) + (let ((follow-to + (and message-reply-buffer + (buffer-name message-reply-buffer) + (save-excursion + (set-buffer message-reply-buffer) + (message-get-reply-headers t))))) + (save-excursion + (save-restriction + (message-narrow-to-headers) + (dolist (elem follow-to) + (message-remove-header (symbol-name (car elem))) + (goto-char (point-min)) + (insert (symbol-name (car elem)) ": " + (cdr elem) "\n")))))) + (defun message-insert-newsgroups () "Insert the Newsgroups header from the article being replied to." (interactive) @@ -2121,14 +2143,7 @@ text was killed." (/= (aref message-caesar-translation-table ?a) (+ ?a n))) (setq message-caesar-translation-table (message-make-caesar-translation-table n))) - ;; Then we translate the region. Do it this way to retain - ;; text properties. - (while (< b e) - (when (< (char-after b) 255) - (subst-char-in-region - b (1+ b) (char-after b) - (aref message-caesar-translation-table (char-after b)))) - (incf b)))) + (translate-region b e message-caesar-translation-table))) (defun message-make-caesar-translation-table (n) "Create a rot table with offset N." @@ -2165,11 +2180,8 @@ Mail and USENET news headers are not rotated." (save-restriction (when (message-goto-body) (narrow-to-region (point) (point-max))) - (let ((body (buffer-substring (point-min) (point-max)))) - (unless (equal 0 (call-process-region - (point-min) (point-max) program t t)) - (insert body) - (message "%s failed" program)))))) + (shell-command-on-region + (point-min) (point-max) program nil t)))) (defun message-rename-buffer (&optional enter-string) "Rename the *message* buffer to \"*message* RECIPIENT\". @@ -2377,6 +2389,8 @@ be added to \"References\" field. (if (listp message-indent-citation-function) message-indent-citation-function (list message-indent-citation-function))))) + ;; Allow undoing. + (undo-boundary) (goto-char end) (when (re-search-backward message-signature-separator start t) ;; Also peel off any blank lines before the signature. @@ -3838,7 +3852,7 @@ Headers already prepared in the buffer are not modified." ;; The element is a symbol. We insert the value ;; of this symbol, if any. (symbol-value header)) - (t + ((not (message-check-element header)) ;; We couldn't generate a value for this header, ;; so we just ask the user. (read-from-minibuffer @@ -4004,7 +4018,10 @@ than 988 characters long, and if they are not, trim them until they are." ;; If folding is disallowed, make sure the total length (including ;; the spaces between) will be less than MAXSIZE characters. - (when message-cater-to-broken-inn + ;; + ;; Only disallow folding for News messages. At this point the headers + ;; have not been generated, thus we use message-this-is-news directly. + (when (and message-this-is-news message-cater-to-broken-inn) (let ((maxsize 988) (totalsize (+ (apply #'+ (mapcar #'length refs)) (1- count))) @@ -4022,7 +4039,7 @@ than 988 characters long, and if they are not, trim them until they are." ;; Finally, collect the references back into a string and insert ;; it into the buffer. (let ((refstring (mapconcat #'identity refs " "))) - (if message-cater-to-broken-inn + (if (and message-this-is-news message-cater-to-broken-inn) (insert (capitalize (symbol-name header)) ": " refstring "\n") (message-fill-header header refstring))))) @@ -4262,56 +4279,21 @@ OTHER-HEADERS is an alist of header/value pairs." (message-setup `((Newsgroups . ,(or newsgroups "")) (Subject . ,(or subject "")))))) -;;;###autoload -(defun message-reply (&optional to-address wide) - "Start editing a reply to the article in the current buffer." - (interactive) - (let ((cur (current-buffer)) - from subject date to cc - references message-id follow-to - (inhibit-point-motion-hooks t) - (message-this-is-mail t) - mct never-mct mft mrt gnus-warning in-reply-to) - (save-restriction - (message-narrow-to-head) - ;; Allow customizations to have their say. - (if (not wide) - ;; This is a regular reply. - (if (message-functionp message-reply-to-function) - (setq follow-to (funcall message-reply-to-function))) - ;; This is a followup. - (if (message-functionp message-wide-reply-to-function) - (save-excursion - (setq follow-to - (funcall message-wide-reply-to-function))))) - ;; Find all relevant headers we need. - (setq from (message-fetch-field "from") - date (message-fetch-field "date" t) - subject (or (message-fetch-field "subject") "none") - references (message-fetch-field "references") - message-id (message-fetch-field "message-id" t) - to (message-fetch-field "to") - cc (message-fetch-field "cc") - mct (when (and wide message-use-mail-copies-to) - (message-fetch-field "mail-copies-to")) - mft (when (and wide message-use-mail-followup-to) - (message-fetch-field "mail-followup-to")) - mrt (when message-use-mail-reply-to - (or (message-fetch-field "mail-reply-to") - (message-fetch-field "reply-to"))) - gnus-warning (message-fetch-field "gnus-warning")) - (when (and gnus-warning (string-match "<[^>]+>" gnus-warning)) - (setq message-id (match-string 0 gnus-warning))) - ;; Get the references from "In-Reply-To" field if there were - ;; no references and "In-Reply-To" field looks promising. - (unless references - (when (and (setq in-reply-to (message-fetch-field "in-reply-to")) - (string-match "<[^>]+>" in-reply-to)) - (setq references (match-string 0 in-reply-to)))) - ;; Remove any (buggy) Re:'s that are present and make a - ;; proper one. - (setq subject (message-make-followup-subject subject)) - (widen)) +(defun message-get-reply-headers (wide &optional to-address) + (let (follow-to mct never-mct from to cc reply-to mft) + ;; Find all relevant headers we need. + (setq from (message-fetch-field "from") + to (message-fetch-field "to") + cc (message-fetch-field "cc") + mct (when message-use-mail-copies-to + (message-fetch-field "mail-copies-to")) + reply-to (when message-use-mail-reply-to + (or (message-fetch-field "mail-reply-to") + (message-fetch-field "reply-to"))) + mft (when (and (not to-address) + (not reply-to) + message-use-mail-followup-to) + (message-fetch-field "mail-followup-to"))) ;; Handle special values of Mail-Copies-To. (when mct @@ -4336,7 +4318,7 @@ You should normally obey the Mail-Copies-To: header. `Mail-Copies-To: always' sends a copy of your response to the author."))) - (setq mct (or mrt from))) + (setq mct (or reply-to from))) ((and (eq message-use-mail-copies-to 'ask) (not (message-y-or-n-p @@ -4347,18 +4329,13 @@ You should normally obey the Mail-Copies-To: header. sends a copy of your response to " (if (string-match "," mct) "the specified addresses" "that address") "."))) - (setq mct nil)) - )) + (setq mct nil)))) - (unless follow-to - (cond - (to-address (setq follow-to (list (cons 'To to-address)))) - ((not wide) (setq follow-to (list (cons 'To (or mrt from))))) - ;; Handle Mail-Followup-To. - ((and mft - (or (not (eq message-use-mail-followup-to 'ask)) - (message-y-or-n-p - (concat "Obey Mail-Followup-To: " mft "? ") t "\ + ;; Handle Mail-Followup-To. + (when (and mft + (eq message-use-mail-followup-to 'ask) + (not (message-y-or-n-p + (concat "Obey Mail-Followup-To: " mft "? ") t "\ You should normally obey the Mail-Followup-To: header. `Mail-Followup-To: " mft "' @@ -4371,48 +4348,102 @@ that further discussion should take place only in " (if (string-match "," mft) "the specified mailing lists" "that mailing list") "."))) - (setq follow-to (list (cons 'To mft))) - (when mct - (push (cons 'Cc mct) follow-to))) - (t - (let (ccalist) - (save-excursion - (message-set-work-buffer) - (unless never-mct - (insert (or mrt from ""))) - (insert (if to (concat (if (bolp) "" ", ") to "") "")) - (insert (if mct (concat (if (bolp) "" ", ") mct) "")) - (insert (if cc (concat (if (bolp) "" ", ") cc) "")) - (goto-char (point-min)) - (while (re-search-forward "[ \t]+" nil t) - (replace-match " " t t)) - ;; Remove addresses that match `rmail-dont-reply-to-names'. - (let ((rmail-dont-reply-to-names message-dont-reply-to-names)) - (insert (prog1 (rmail-dont-reply-to (buffer-string)) - (erase-buffer)))) - (goto-char (point-min)) - ;; Perhaps Mail-Copies-To: never removed the only address? - (when (eobp) - (insert (or mrt from ""))) - (setq ccalist - (mapcar - (lambda (addr) - (cons (mail-strip-quoted-names addr) addr)) - (message-tokenize-header (buffer-string)))) - (let ((s ccalist)) - (while s - (setq ccalist (delq (assoc (car (pop s)) s) ccalist))))) - (setq follow-to (list (cons 'To (cdr (pop ccalist))))) - (when ccalist - (let ((ccs (cons 'Cc (mapconcat - (lambda (addr) (cdr addr)) ccalist ", ")))) - (when (string-match "^ +" (cdr ccs)) - (setcdr ccs (substring (cdr ccs) (match-end 0)))) - (push ccs follow-to))))))) - - (message-pop-to-buffer (message-buffer-name - (if wide "wide reply" "reply") from - (if wide to-address nil))) + (setq mft nil)) + + (if (or (not wide) + to-address) + (progn + (setq follow-to (list (cons 'To (or to-address reply-to mft from)))) + (when (and wide mct) + (push (cons 'Cc mct) follow-to))) + (let (ccalist) + (save-excursion + (message-set-work-buffer) + (unless never-mct + (insert (or reply-to from ""))) + (insert (if mft (concat (if (bolp) "" ", ") mft "") "")) + (insert (if to (concat (if (bolp) "" ", ") to "") "")) + (insert (if mct (concat (if (bolp) "" ", ") mct) "")) + (insert (if cc (concat (if (bolp) "" ", ") cc) "")) + (goto-char (point-min)) + (while (re-search-forward "[ \t]+" nil t) + (replace-match " " t t)) + ;; Remove addresses that match `rmail-dont-reply-to-names'. + (let ((rmail-dont-reply-to-names message-dont-reply-to-names)) + (insert (prog1 (rmail-dont-reply-to (buffer-string)) + (erase-buffer)))) + (goto-char (point-min)) + ;; Perhaps "Mail-Copies-To: never" removed the only address? + (when (eobp) + (insert (or reply-to from ""))) + (setq ccalist + (mapcar + (lambda (addr) + (cons (mail-strip-quoted-names addr) addr)) + (message-tokenize-header (buffer-string)))) + (let ((s ccalist)) + (while s + (setq ccalist (delq (assoc (car (pop s)) s) ccalist))))) + (setq follow-to (list (cons 'To (cdr (pop ccalist))))) + (when ccalist + (let ((ccs (cons 'Cc (mapconcat + (lambda (addr) (cdr addr)) ccalist ", ")))) + (when (string-match "^ +" (cdr ccs)) + (setcdr ccs (substring (cdr ccs) (match-end 0)))) + (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." + (interactive) + (let ((cur (current-buffer)) + from subject date + references message-id follow-to + (inhibit-point-motion-hooks t) + (message-this-is-mail t) + gnus-warning in-reply-to) + (save-restriction + (message-narrow-to-head) + ;; Allow customizations to have their say. + (if (not wide) + ;; This is a regular reply. + (if (message-functionp message-reply-to-function) + (setq follow-to (funcall message-reply-to-function))) + ;; This is a followup. + (if (message-functionp message-wide-reply-to-function) + (save-excursion + (setq follow-to + (funcall message-wide-reply-to-function))))) + (setq message-id (message-fetch-field "message-id" t) + references (message-fetch-field "references") + date (message-fetch-field "date") + from (message-fetch-field "from") + subject (or (message-fetch-field "subject") "none")) + ;; Remove any (buggy) Re:'s that are present and make a + ;; proper one. + (when (string-match message-subject-re-regexp subject) + (setq subject (substring subject (match-end 0)))) + (setq subject (message-make-followup-subject subject)) + + (when (and (setq gnus-warning (message-fetch-field "gnus-warning")) + (string-match "<[^>]+>" gnus-warning)) + (setq message-id (match-string 0 gnus-warning))) + + (unless follow-to + (setq follow-to (message-get-reply-headers wide to-address))) + + ;; Get the references from "In-Reply-To" field if there were + ;; no references and "In-Reply-To" field looks promising. + (unless references + (when (and (setq in-reply-to (message-fetch-field "in-reply-to")) + (string-match "<[^>]+>" in-reply-to)) + (setq references (match-string 0 in-reply-to))))) + + (message-pop-to-buffer + (message-buffer-name + (if wide "wide reply" "reply") from + (if wide to-address nil))) (setq message-reply-headers (make-full-mail-header-from-decoded-header @@ -4423,7 +4454,8 @@ that further discussion should take place only in " ,@follow-to ,@(if (or references message-id) `((References . ,(concat (or references "") (and references " ") - (or message-id "")))))) + (or message-id "")))) + nil)) cur))) ;;;###autoload @@ -4596,9 +4628,10 @@ that further discussion should take place only in " cur))) ;;;###autoload -(defun message-cancel-news () - "Cancel an article you posted." - (interactive) +(defun message-cancel-news (&optional arg) + "Cancel an article you posted. +If ARG, allow editing of the cancellation message." + (interactive "P") (unless (message-news-p) (error "This is not a news article; canceling is impossible")) (when (yes-or-no-p "Do you really want to cancel this article? ") @@ -4624,7 +4657,9 @@ that further discussion should take place only in " (message-make-from)))))) (error "This article is not yours")) ;; Make control message. - (setq buf (set-buffer (get-buffer-create " *message cancel*"))) + (if arg + (message-news) + (setq buf (set-buffer (get-buffer-create " *message cancel*")))) (erase-buffer) (insert "Newsgroups: " newsgroups "\n" "From: " (message-make-from) "\n" @@ -4637,13 +4672,14 @@ that further discussion should take place only in " message-cancel-message) (run-hooks 'message-cancel-hook) (message "Canceling your article...") - (if (let ((message-syntax-checks - 'dont-check-for-anything-just-trust-me) - (message-encoding-buffer (current-buffer)) - (message-edit-buffer (current-buffer))) - (message-send-news)) - (message "Canceling your article...done")) - (kill-buffer buf))))) + (unless arg + (if (let ((message-syntax-checks + 'dont-check-for-anything-just-trust-me) + (message-encoding-buffer (current-buffer)) + (message-edit-buffer (current-buffer))) + (message-send-news)) + (message "Canceling your article...done")) + (kill-buffer buf)))))) (defun message-supersede-setup-for-mime-edit () (set (make-local-variable 'message-setup-hook) nil) @@ -4799,9 +4835,9 @@ Optional NEWS will use news to forward instead of mail." (message-mail nil subject)) ;; Put point where we want it before inserting the forwarded ;; message. - (if message-signature-before-forwarded-message - (goto-char (point-max)) - (message-goto-body)) + (if message-forward-before-signature + (message-goto-body) + (goto-char (point-max))) ;; Make sure we're at the start of the line. (unless (eolp) (insert "\n")) diff --git a/lisp/mm-bodies.el b/lisp/mm-bodies.el index 2ee6bf2..3a545d3 100644 --- a/lisp/mm-bodies.el +++ b/lisp/mm-bodies.el @@ -1,5 +1,5 @@ ;;; mm-bodies.el --- Functions for decoding MIME things -;; Copyright (C) 1998,99 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; MORIOKA Tomohiko @@ -38,9 +38,18 @@ ;; BS, vertical TAB, form feed, and ^_ (defvar mm-7bit-chars "\x20-\x7f\r\n\t\x7\x8\xb\xc\x1f") -(defvar mm-body-charset-encoding-alist nil +(defcustom mm-body-charset-encoding-alist + '((iso-2022-jp . 7bit) + (iso-2022-jp-2 . 7bit)) "Alist of MIME charsets to encodings. -Valid encodings are `7bit', `8bit', `quoted-printable' and `base64'.") +Valid encodings are `7bit', `8bit', `quoted-printable' and `base64'." + :type '(repeat (cons (symbol :tag "charset") + (choice :tag "encoding" + (const 7bit) + (const 8bit) + (const quoted-printable) + (const base64)))) + :group 'mime) (defun mm-encode-body () "Encode a body. @@ -155,8 +164,13 @@ If no encoding was done, nil is returned." ;; Some mailers insert whitespace ;; junk at the end which ;; base64-decode-region dislikes. + ;; Also remove possible junk which could + ;; have been added by mailing list software. (save-excursion - (goto-char (point-max)) + (goto-char (point-min)) + (if (re-search-forward "^[\t ]*$" nil t) + (delete-region (point) (point-max)) + (goto-char (point-max))) (skip-chars-backward "\n\t ") (delete-region (point) (point-max)) (point)))) diff --git a/lisp/mm-decode.el b/lisp/mm-decode.el index c34921f..e4acf89 100644 --- a/lisp/mm-decode.el +++ b/lisp/mm-decode.el @@ -1,5 +1,5 @@ ;;; mm-decode.el --- Functions for decoding MIME things -;; Copyright (C) 1998,99 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; MORIOKA Tomohiko @@ -28,6 +28,8 @@ (require 'gnus-mailcap) (require 'mm-bodies) +(defvar mm-xemacs-p (string-match "XEmacs" (emacs-version))) + (defgroup mime-display () "Display of MIME in mail and news articles." :link '(custom-manual "(emacs-mime)Customization") @@ -732,7 +734,37 @@ external if displayed external." "Return the handle(s) referred to by ID." (cdr (assoc id mm-content-id-alist))) -(defun mm-get-image (handle) +(defun mm-get-image-emacs (handle) + "Return an image instance based on HANDLE." + (let ((type (mm-handle-media-subtype handle)) + spec) + ;; Allow some common translations. + (setq type + (cond + ((equal type "x-pixmap") + "xpm") + ((equal type "x-xbitmap") + "xbm") + (t type))) + (or (mm-handle-cache handle) + (mm-with-unibyte-buffer + (mm-insert-part handle) + (prog1 + (setq spec + (ignore-errors + (cond + ((equal type "xbm") + ;; xbm images require special handling, since + ;; the only way to create glyphs from these + ;; (without a ton of work) is to write them + ;; out to a file, and then create a file + ;; specifier. + (error "Don't know what to do for XBMs right now.")) + (t + (list 'image :type (intern type) :data (buffer-string)))))) + (mm-handle-set-cache handle spec)))))) + +(defun mm-get-image-xemacs (handle) "Return an image instance based on HANDLE." (let ((type (mm-handle-media-subtype handle)) spec) @@ -771,17 +803,37 @@ external if displayed external." (vector (intern type) :data (buffer-string))))))) (mm-handle-set-cache handle spec)))))) +(defun mm-get-image (handle) + (if mm-xemacs-p + (mm-get-image-xemacs handle) + (mm-get-image-emacs handle))) + (defun mm-image-fit-p (handle) "Say whether the image in HANDLE will fit the current window." (let ((image (mm-get-image handle))) - (or mm-inline-large-images - (and (< (glyph-width image) (window-pixel-width)) - (< (glyph-height image) (window-pixel-height)))))) + (if (fboundp 'glyph-width) + ;; XEmacs' glyphs can actually tell us about their width, so + ;; lets be nice and smart about them. + (or mm-inline-large-images + (and (< (glyph-width image) (window-pixel-width)) + (< (glyph-height image) (window-pixel-height)))) + ;; Let's just inline everything under Emacs 21, since the image + ;; specification there doesn't actually get the width/height + ;; until you render the image. + t))) (defun mm-valid-image-format-p (format) "Say whether FORMAT can be displayed natively by Emacs." - (and (fboundp 'valid-image-instantiator-format-p) - (valid-image-instantiator-format-p format))) + (cond + ;; Handle XEmacs + ((fboundp 'valid-image-instantiator-format-p) + (valid-image-instantiator-format-p format)) + ;; Handle Emacs 21 + ((fboundp 'image-type-available-p) + (image-type-available-p format)) + ;; Nobody else can do images yet. + (t + nil))) (defun mm-valid-and-fit-image-p (format handle) "Say whether FORMAT can be displayed natively and HANDLE fits the window." diff --git a/lisp/mm-encode.el b/lisp/mm-encode.el index 5a87160..669df35 100644 --- a/lisp/mm-encode.el +++ b/lisp/mm-encode.el @@ -1,5 +1,5 @@ ;;; mm-encode.el --- Functions for encoding MIME things -;; Copyright (C) 1998,99 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; MORIOKA Tomohiko diff --git a/lisp/mm-util.el b/lisp/mm-util.el index f23c873..e945a2f 100644 --- a/lisp/mm-util.el +++ b/lisp/mm-util.el @@ -1,5 +1,5 @@ ;;; mm-util.el --- Utility functions for MIME things -;; Copyright (C) 1998,99 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; MORIOKA Tomohiko @@ -64,7 +64,8 @@ chinese-cns11643-1 chinese-cns11643-2 chinese-cns11643-3 chinese-cns11643-4 chinese-cns11643-5 chinese-cns11643-6 - chinese-cns11643-7)) + chinese-cns11643-7) + (utf-8 unicode-a unicode-b unicode-c unicode-d unicode-e)) "Alist of MIME-charset/MULE-charsets.") (eval-and-compile diff --git a/lisp/mm-uu.el b/lisp/mm-uu.el index d5bbaac..892d293 100644 --- a/lisp/mm-uu.el +++ b/lisp/mm-uu.el @@ -1,5 +1,5 @@ ;;; mm-uu.el -- Return uu stuffs as mm handles -;; Copyright (c) 1998,99 Free Software Foundation, Inc. +;; Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: postscript uudecode binhex shar forward news @@ -165,10 +165,16 @@ To disable dissecting shar codes, for instance, add (setq end-char-1 (match-beginning 0)) (forward-line) (setq end-char (point)) - (when (or (not (eq type 'binhex)) - (setq file-name - (ignore-errors - (binhex-decode-region start-char end-char t)))) + (when (cond + ((eq type 'binhex) + (setq file-name + (ignore-errors + (binhex-decode-region start-char end-char t)))) + ((eq type 'forward) + (save-excursion + (goto-char start-char-1) + (looking-at "[\r\n]*[a-zA-Z][a-zA-Z0-9-]*:"))) + (t t)) (if (> start-char text-start) (push (mm-make-handle (mm-uu-copy-to-buffer text-start start-char) diff --git a/lisp/mm-view.el b/lisp/mm-view.el index fed099b..b6ebfd0 100644 --- a/lisp/mm-view.el +++ b/lisp/mm-view.el @@ -1,5 +1,5 @@ ;;; mm-view.el --- Functions for viewing MIME objects -;; Copyright (C) 1998,99 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; This file is part of GNU Emacs. @@ -33,7 +33,7 @@ (autoload 'gnus-article-prepare-display "gnus-art") (autoload 'vcard-parse-string "vcard") (autoload 'vcard-format-string "vcard") - (autoload 'fill-flowed "fill-flowed") + (autoload 'fill-flowed "flow-fill") (autoload 'diff-mode "diff-mode")) ;; Avoid byte compile warning. @@ -42,8 +42,26 @@ ;;; ;;; Functions for displaying various formats inline ;;; +(defun mm-inline-image-emacs (handle) + (let ((b (point)) + (overlay nil) + (string (copy-sequence "[MM-INLINED-IMAGE]")) + buffer-read-only) + (insert "\n") + (buffer-name) + (setq overlay (make-overlay (point) (point) (current-buffer))) + (put-text-property 0 (length string) 'display (mm-get-image handle) string) + (overlay-put overlay 'before-string string) -(defun mm-inline-image (handle) + (mm-handle-set-undisplayer + handle + `(lambda () + (let (buffer-read-only) + (delete-overlay ,overlay) + (delete-region ,(set-marker (make-marker) b) + ,(set-marker (make-marker) (point)))))))) + +(defun mm-inline-image-xemacs (handle) (let ((b (point)) (annot (make-annotation (mm-get-image handle) nil 'text)) buffer-read-only) @@ -58,6 +76,11 @@ (set-extent-property annot 'mm t) (set-extent-property annot 'duplicable t))) +(defun mm-inline-image (handle) + (if mm-xemacs-p + (mm-inline-image-xemacs handle) + (mm-inline-image-emacs handle))) + (defvar mm-w3-setup nil) (defun mm-setup-w3 () (unless mm-w3-setup @@ -213,6 +236,8 @@ (narrow-to-region b b) (mm-insert-part handle) (let (gnus-article-mime-handles + ;; disable prepare hook + gnus-article-prepare-hook (gnus-newsgroup-charset (or charset gnus-newsgroup-charset))) (run-hooks 'gnus-article-decode-hook) diff --git a/lisp/mml.el b/lisp/mml.el index 320f6aa..334cb8d 100644 --- a/lisp/mml.el +++ b/lisp/mml.el @@ -1,5 +1,5 @@ ;;; mml.el --- A package for parsing and validating MML documents -;; Copyright (C) 1998,99 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; This file is part of GNU Emacs. @@ -31,14 +31,12 @@ (eval-and-compile (autoload 'message-make-message-id "message")) -(defvar mml-generate-multipart-alist - nil +(defvar mml-generate-multipart-alist nil "*Alist of multipart generation functions. - Each entry has the form (NAME . FUNCTION), where -NAME: is a string containing the name of the part (without the +NAME is a string containing the name of the part (without the leading \"/multipart/\"), -FUNCTION: is a Lisp function which is called to generate the part. +FUNCTION is a Lisp function which is called to generate the part. The Lisp function has to supply the appropriate MIME headers and the contents of this part.") @@ -260,9 +258,19 @@ one charsets.") "<#!+/?\\(part\\|multipart\\|external\\)" nil t) (delete-region (+ (match-beginning 0) 2) (+ (match-beginning 0) 3)))))) + (when (string= (car (split-string type "/")) "message") + ;; message/rfc822 parts have to have their heads encoded. + (save-restriction + (message-narrow-to-head) + (let ((rfc2047-header-encoding-alist nil)) + (mail-encode-encoded-word-buffer)))) (setq charset (mm-encode-body)) - (setq encoding (mm-body-encoding charset - (cdr (assq 'encoding cont)))) + (setq encoding (mm-body-encoding + charset + (if (string= (car (split-string type "/")) + "message") + '8bit + (cdr (assq 'encoding cont))))) (setq coded (buffer-string))) (mm-with-unibyte-buffer (cond diff --git a/lisp/nnagent.el b/lisp/nnagent.el index d551c9e..b445395 100644 --- a/lisp/nnagent.el +++ b/lisp/nnagent.el @@ -1,5 +1,5 @@ ;;; nnagent.el --- offline backend for Gnus -;; Copyright (C) 1997,98,99 Free Software Foundation, Inc. +;; Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news, mail diff --git a/lisp/nndoc.el b/lisp/nndoc.el index 8a1dea3..876cee7 100644 --- a/lisp/nndoc.el +++ b/lisp/nndoc.el @@ -1,5 +1,6 @@ ;;; nndoc.el --- single 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 ;; Masanobu UMEDA diff --git a/lisp/nndraft.el b/lisp/nndraft.el index 487ffc1..e5eb42a 100644 --- a/lisp/nndraft.el +++ b/lisp/nndraft.el @@ -1,5 +1,6 @@ ;;; nndraft.el --- draft article 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 ;; Keywords: news diff --git a/lisp/nnfolder.el b/lisp/nnfolder.el index d2a8bb2..9870186 100644 --- a/lisp/nnfolder.el +++ b/lisp/nnfolder.el @@ -1,5 +1,6 @@ ;;; nnfolder.el --- mail folder 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: Scott Byer ;; Lars Magne Ingebrigtsen diff --git a/lisp/nnheader.el b/lisp/nnheader.el index f1bf79b..8e2b604 100644 --- a/lisp/nnheader.el +++ b/lisp/nnheader.el @@ -1,7 +1,8 @@ ;;; nnheader.el --- header access macros for Semi-gnus and its backends -;; Copyright (C) 1987, 88, 89, 90, 93, 94, 95, 96, 97, 98, 99 -;; Free Software Foundation, Inc. +;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996, +;; 1997, 1998, 2000 +;; Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Lars Magne Ingebrigtsen @@ -52,7 +53,6 @@ on your system, you could say something like: (autoload 'nnmail-message-id "nnmail") (autoload 'mail-position-on-field "sendmail") (autoload 'message-remove-header "message") - (autoload 'cancel-function-timers "timers") (autoload 'gnus-point-at-eol "gnus-util") (autoload 'gnus-delete-line "gnus-util") (autoload 'gnus-buffer-live-p "gnus-util")) diff --git a/lisp/nnimap.el b/lisp/nnimap.el index e0531ce..f50f21e 100644 --- a/lisp/nnimap.el +++ b/lisp/nnimap.el @@ -1,5 +1,5 @@ ;;; nnimap.el --- imap backend for Gnus -;; Copyright (C) 1998,1999 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Jim Radford diff --git a/lisp/nnmail.el b/lisp/nnmail.el index b86aedb..945e4a2 100644 --- a/lisp/nnmail.el +++ b/lisp/nnmail.el @@ -1,5 +1,6 @@ ;;; nnmail.el --- mail support functions for the Gnus mail backends -;; Copyright (C) 1995,96,97,98,99, 00 Free Software Foundation, Inc. +;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 +;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news, mail @@ -174,6 +175,13 @@ Eg.: :type '(choice (const :tag "nnmail-expiry-wait" nil) (function :format "%v" nnmail-))) +(defcustom nnmail-expiry-target 'delete + "*Variable that says where expired messages should end up." + :group 'nnmail-expire + :type '(choice (const delete) + (function :format "%v" nnmail-) + string)) + (defcustom nnmail-cache-accepted-message-ids nil "If non-nil, put Message-IDs of Gcc'd articles into the duplicate cache." :group 'nnmail @@ -1341,14 +1349,84 @@ See the documentation for the variable `nnmail-split-fancy' for documentation." (setq nnmail-cache-buffer nil) (kill-buffer (current-buffer))))) +;; Compiler directives. +(defvar group) +(defvar group-art-list) +(defvar group-art) (defun nnmail-cache-insert (id) (when nnmail-treat-duplicates - (unless (gnus-buffer-live-p nnmail-cache-buffer) - (nnmail-cache-open)) + ;; Store some information about the group this message is written + ;; to. This function might have been called from various places. + ;; Sometimes, a function up in the calling sequence has an + ;; argument GROUP which is bound to a string, the group name. At + ;; other times, there is a function up in the calling sequence + ;; which has an argument GROUP-ART which is a list of pairs, and + ;; the car of a pair is a group name. Should we check that the + ;; length of the list is equal to 1? -- kai + (let ((g nil)) + (cond ((and (boundp 'group) group) + (setq g group)) + ((and (boundp 'group-art-list) group-art-list + (listp group-art-list)) + (setq g (caar group-art-list))) + ((and (boundp 'group-art) group-art (listp group-art)) + (setq g (caar group-art))) + (t (setq g ""))) + (unless (gnus-buffer-live-p nnmail-cache-buffer) + (nnmail-cache-open)) + (save-excursion + (set-buffer nnmail-cache-buffer) + (goto-char (point-max)) + (if (and g (not (string= "" g)) + (gnus-methods-equal-p gnus-command-method + (nnmail-cache-primary-mail-backend))) + (insert id "\t" g "\n") + (insert id "\n")))))) + +(defun nnmail-cache-primary-mail-backend () + (let ((be-list (cons gnus-select-method gnus-secondary-select-methods)) + (be nil) + (res nil)) + (while (and (null res) be-list) + (setq be (car be-list)) + (setq be-list (cdr be-list)) + (when (and (gnus-method-option-p be 'respool) + (eval (intern (format "%s-get-new-mail" (car be))))) + (setq res be))) + res)) + +;; Fetch the group name corresponding to the message id stored in the +;; cache. +(defun nnmail-cache-fetch-group (id) + (when (and nnmail-treat-duplicates nnmail-cache-buffer) (save-excursion (set-buffer nnmail-cache-buffer) (goto-char (point-max)) - (insert id "\n")))) + (when (search-backward id nil t) + (beginning-of-line) + (skip-chars-forward "^\n\r\t") + (unless (eolp) + (forward-char 1) + (buffer-substring (point) + (progn (end-of-line) (point)))))))) + +;; Function for nnmail-split-fancy: look up all references in the +;; cache and if a match is found, return that group. +(defun nnmail-split-fancy-with-parent () + (let* ((refstr (or (message-fetch-field "references") + (message-fetch-field "in-reply-to"))) + (references nil) + (res nil)) + (when refstr + (setq references (nreverse (gnus-split-references refstr))) + (unless (gnus-buffer-live-p nnmail-cache-buffer) + (nnmail-cache-open)) + (mapcar (lambda (x) + (setq res (or (nnmail-cache-fetch-group x) res)) + (when (string= "drafts" res) + (setq res nil))) + references) + res))) (defun nnmail-cache-id-exists-p (id) (when nnmail-treat-duplicates @@ -1529,6 +1607,12 @@ See the documentation for the variable `nnmail-split-fancy' for documentation." ;; Compare the time with the current time. (ignore-errors (time-less-p days (time-since time)))))))) +(defun nnmail-expiry-target-group (target group) + (when (nnheader-functionp target) + (setq target (funcall target group))) + (unless (eq target 'delete) + (gnus-request-accept-article target))) + (defun nnmail-check-syntax () "Check (and modify) the syntax of the message in the current buffer." (save-restriction diff --git a/lisp/nnml.el b/lisp/nnml.el index d512cd2..bf54e8a 100644 --- a/lisp/nnml.el +++ b/lisp/nnml.el @@ -1,5 +1,6 @@ ;;; nnml.el --- mail spool 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 ;; Masanobu UMEDA @@ -287,6 +288,13 @@ all. This may very well take some time.") (nnmail-expired-article-p group mod-time force nnml-inhibit-expiry))) (progn + ;; Allow a special target group. + (unless (eq nnmail-expiry-target 'delete) + (with-temp-buffer + (nnml-request-article article group server + (current-buffer)) + (nnmail-expiry-target-group + nnmail-expiry-target group))) (nnheader-message 5 "Deleting article %s in %s" article group) (condition-case () diff --git a/lisp/nnslashdot.el b/lisp/nnslashdot.el index 840eb82..c19f13c 100644 --- a/lisp/nnslashdot.el +++ b/lisp/nnslashdot.el @@ -1,5 +1,5 @@ ;;; nnslashdot.el --- interfacing with Slashdot -;; Copyright (C) 1999 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news diff --git a/lisp/nnspool.el b/lisp/nnspool.el index 6d8e8fe..b4c7cd8 100644 --- a/lisp/nnspool.el +++ b/lisp/nnspool.el @@ -1,5 +1,5 @@ ;;; nnspool.el --- spool access for GNU Emacs -;; Copyright (C) 198,998,89,90,93,94,95,96,97,98 Free Software Foundation, Inc. +;; Copyright (C) 1988,89,90,93,94,95,96,97,98 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Lars Magne Ingebrigtsen diff --git a/lisp/nntp.el b/lisp/nntp.el index 910db3b..b7919b9 100644 --- a/lisp/nntp.el +++ b/lisp/nntp.el @@ -1,6 +1,7 @@ ;;; nntp.el --- nntp access for Gnus -;;; Copyright (C) 1987, 88, 89, 90, 92, 93, 94, 95, 96, 97, 98, 99 -;;; Free Software Foundation, Inc. +;; Copyright (C) 1987, 1988, 1989, 1990, 1992, 1993, 1994, 1995, 1996, +;; 1997, 1998, 2000 +;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Katsumi Yamaoka @@ -340,17 +341,23 @@ noticing asynchronous data.") (save-excursion (set-buffer (process-buffer process)) (erase-buffer))) - (when command - (nntp-send-string process command)) - (cond - ((eq callback 'ignore) - t) - ((and callback wait-for) - (nntp-async-wait process wait-for buffer decode callback) - t) - (wait-for - (nntp-wait-for process wait-for buffer decode)) - (t t))))) + (condition-case err + (progn + (when command + (nntp-send-string process command)) + (cond + ((eq callback 'ignore) + t) + ((and callback wait-for) + (nntp-async-wait process wait-for buffer decode callback) + t) + (wait-for + (nntp-wait-for process wait-for buffer decode)) + (t t))) + (error + (nnheader-report 'nntp "Couldn't open connection to %s: %s" + address err)) + (quit nil))))) (defsubst nntp-send-command (wait-for &rest strings) "Send STRINGS to server and wait until WAIT-FOR returns." @@ -798,7 +805,7 @@ and a password. If SEND-IF-FORCE, only send authinfo to the server if the .authinfo file has the FORCE token." (let* ((list (gnus-parse-netrc nntp-authinfo-file)) - (alist (gnus-netrc-machine list nntp-address)) + (alist (gnus-netrc-machine list nntp-address "nntp")) (force (gnus-netrc-get alist "force")) (user (or (gnus-netrc-get alist "login") nntp-authinfo-user)) (passwd (gnus-netrc-get alist "password"))) diff --git a/lisp/nnultimate.el b/lisp/nnultimate.el index 6042512..f32167e 100644 --- a/lisp/nnultimate.el +++ b/lisp/nnultimate.el @@ -1,5 +1,5 @@ ;;; nnultimate.el --- interfacing with the Ultimate Bulletin Board system -;; Copyright (C) 1999 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news diff --git a/lisp/nnvirtual.el b/lisp/nnvirtual.el index a0ce733..e75b311 100644 --- a/lisp/nnvirtual.el +++ b/lisp/nnvirtual.el @@ -1,5 +1,6 @@ ;;; nnvirtual.el --- virtual newsgroups access 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: David Moore ;; Lars Magne Ingebrigtsen diff --git a/lisp/nnwarchive.el b/lisp/nnwarchive.el index e48f9df..f888a62 100644 --- a/lisp/nnwarchive.el +++ b/lisp/nnwarchive.el @@ -1,5 +1,5 @@ ;;; nnwarchive.el --- interfacing with web archives -;; Copyright (C) 1999 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: news egroups mail-archive @@ -489,7 +489,7 @@ (delete-region (point) (point-max))) (goto-char (point-min)) (while (re-search-forward "]+>\\([^<]+\\)" nil t) - (replace-match "<\\1>")) + (replace-match "\\1")) (nnweb-decode-entities) (buffer-string)) diff --git a/lisp/nnweb.el b/lisp/nnweb.el index 5df3018..da85743 100644 --- a/lisp/nnweb.el +++ b/lisp/nnweb.el @@ -1,5 +1,6 @@ ;;; nnweb.el --- retrieving articles via web search engines -;; 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 ;; Keywords: news @@ -121,7 +122,6 @@ and `altavista'.") (deffoo nnweb-request-scan (&optional group server) (nnweb-possibly-change-server group server) - (setq nnweb-hashtb (gnus-make-hashtable 4095)) (funcall (nnweb-definition 'map)) (unless nnweb-ephemeral-p (nnweb-write-active) @@ -139,8 +139,6 @@ and `altavista'.") (setq nnweb-search (nth 3 info)) (unless dont-check (nnweb-read-overview group))))) - (unless dont-check - (nnweb-request-scan group)) (cond ((not nnweb-articles) (nnheader-report 'nnweb "No matching articles")) @@ -293,6 +291,7 @@ and `altavista'.") (when group (when (and (not nnweb-ephemeral-p) (not (equal group nnweb-group))) + (setq nnweb-hashtb (gnus-make-hashtable 4095)) (nnweb-request-group group nil t)))) (defun nnweb-init (server) @@ -395,6 +394,8 @@ and `altavista'.") (setq date "Jan 1 00:00:00 0000")) (incf i) (setq url (concat url "&fmt=text")) + (when (string-match "&context=[^&]+" url) + (setq url (replace-match "" t t url))) (unless (nnweb-get-hashtb url) (push (list diff --git a/lisp/parse-time.el b/lisp/parse-time.el index 9cc4ce2..06e35d3 100644 --- a/lisp/parse-time.el +++ b/lisp/parse-time.el @@ -1,6 +1,6 @@ ;;; parse-time.el --- Parsing time strings -;; Copyright (C) 1996 by Free Software Foundation, Inc. +;; Copyright (C) 1996,2000 by Free Software Foundation, Inc. ;; Author: Erik Naggum ;; Keywords: util diff --git a/lisp/pop3.el b/lisp/pop3.el index b2d2460..0c45144 100644 --- a/lisp/pop3.el +++ b/lisp/pop3.el @@ -1,6 +1,7 @@ ;;; pop3.el --- Post Office Protocol (RFC 1460) interface -;; Copyright (C) 1996, 97, 98, 1999 Free Software Foundation, Inc. +;; Copyright (C) 1996, 1997, 1998, 1999, 2000 +;; Free Software Foundation, Inc. ;; Author: Richard L. Pieri ;; Daiki Ueno diff --git a/lisp/qp.el b/lisp/qp.el index fc909e4..93c3f7e 100644 --- a/lisp/qp.el +++ b/lisp/qp.el @@ -1,5 +1,5 @@ ;;; qp.el --- Quoted-Printable functions -;; Copyright (C) 1998,99 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; This file is part of GNU Emacs. diff --git a/lisp/rfc1843.el b/lisp/rfc1843.el index b55120c..7fb9736 100644 --- a/lisp/rfc1843.el +++ b/lisp/rfc1843.el @@ -1,5 +1,5 @@ ;;; rfc1843.el --- HZ (rfc1843) decoding -;; Copyright (c) 1998,99 Free Software Foundation, Inc. +;; Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: news HZ HZ+ diff --git a/lisp/rfc2047.el b/lisp/rfc2047.el index e01d7b8..8875891 100644 --- a/lisp/rfc2047.el +++ b/lisp/rfc2047.el @@ -1,5 +1,5 @@ ;;; rfc2047.el --- Functions for encoding and decoding rfc2047 messages -;; Copyright (C) 1998,99 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; MORIOKA Tomohiko @@ -46,7 +46,7 @@ The values can be: 1) nil, in which case no encoding is done; 2) `mime', in which case the header will be encoded according to RFC2047; -3) a charset, in which case it will be encoded as that charse; +3) a charset, in which case it will be encoded as that charset; 4) `default', in which case the field will be encoded as the rest of the article.") @@ -266,7 +266,8 @@ Should be called narrowed to the head of the message." ((and (not break) (looking-at "=\\?")) (setq break (point))) - ((and (looking-at "\\?=") + ((and break + (looking-at "\\?=") (> (- (point) (save-excursion (beginning-of-line) (point))) 76)) (goto-char break) (setq break nil) diff --git a/lisp/smiley.el b/lisp/smiley.el index f7cdda1..0d5f710 100644 --- a/lisp/smiley.el +++ b/lisp/smiley.el @@ -1,5 +1,6 @@ ;;; smiley.el --- displaying smiley faces -;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc. +;; Copyright (C) 1996, 1997, 1998, 1999, 2000 +;; Free Software Foundation, Inc. ;; Author: Wes Hardaker ;; Keywords: fun diff --git a/lisp/time-date.el b/lisp/time-date.el index f78aa60..558bc3c 100644 --- a/lisp/time-date.el +++ b/lisp/time-date.el @@ -1,5 +1,5 @@ ;;; time-date.el --- Date and time handling functions -;; Copyright (C) 1998,99 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Masanobu Umeda diff --git a/lisp/utf7.el b/lisp/utf7.el index 1f3652c..06416e9 100644 --- a/lisp/utf7.el +++ b/lisp/utf7.el @@ -1,5 +1,5 @@ ;;; utf7.el --- UTF-7 encoding/decoding for Emacs -;; Copyright (C) 1999 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000 Free Software Foundation, Inc. ;; Author: Jon K Hellan ;; Keywords: mail diff --git a/lisp/webmail.el b/lisp/webmail.el index f81869e..78b518c 100644 --- a/lisp/webmail.el +++ b/lisp/webmail.el @@ -1,5 +1,5 @@ ;;; webmail.el --- interfacing with web mail -;; Copyright (C) 1999 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: hotmail netaddress my-deja netscape @@ -74,6 +74,8 @@ (login-url "http://%s/cgi-bin/dologin?login=%s&passwd=%s&enter=Sign+in&sec=no&curmbox=ACTIVE&_lang=&js=yes&id=2&tw=-10000&beta=" webmail-aux user password) + (login-snarf . webmail-hotmail-login) + (list-url "%s" webmail-aux) (list-snarf . webmail-hotmail-list) (article-snarf . webmail-hotmail-article) (trash-url @@ -189,9 +191,27 @@ (defvar webmail-type nil) +(defvar webmail-error-function nil) + +(defvar webmail-debug-file "~/.emacs-webmail-debug") + ;;; Interface functions +(defun webmail-debug (str) + (with-temp-buffer + (insert "\n---------------- A bug at " str " ------------------\n") + (mapcar #'(lambda (sym) + (if (boundp sym) + (pp `(setq ,sym ',(eval sym)) (current-buffer)))) + '(webmail-type user)) + (insert "---------------- webmail buffer ------------------\n\n") + (insert-buffer-substring webmail-buffer) + (insert "\n---------------- end of buffer ------------------\n\n") + (append-to-file (point-min) (point-max) webmail-debug-file))) + (defun webmail-error (str) + (if webmail-error-function + (funcall webmail-error-function str)) (message "%s HTML has changed; please get a new version of webmail (%s)" webmail-type str) (error "%s HTML has changed; please get a new version of webmail (%s)" @@ -374,6 +394,19 @@ (setq webmail-aux (match-string 1)) (webmail-error "open@1"))) +(defun webmail-hotmail-login () + (let (site) + (goto-char (point-min)) + (if (re-search-forward + "https?://\\([^/]+hotmail\\.msn\\.com\\)/cgi-bin/" nil t) + (setq site (match-string 1)) + (webmail-error "login@1")) + (goto-char (point-min)) + (if (re-search-forward + "\\(/cgi-bin/HoTMaiL\\?[^\"]*curmbox=ACTIVE[^\"]*\\)" nil t) + (setq webmail-aux (concat "http://" site (match-string 1))) + (webmail-error "login@2")))) + (defun webmail-hotmail-list () (let (site url newp) (goto-char (point-min)) @@ -382,7 +415,7 @@ (webmail-error "maybe your w3 version is too old")) (goto-char (point-min)) (if (re-search-forward - "action=\"https?://\\([^/]+\\)/cgi-bin/HoTMaiL" nil t) + "https?://\\([^/]+hotmail\\.msn\\.com\\)/cgi-bin/" nil t) (setq site (match-string 1)) (webmail-error "list@1")) (goto-char (point-min)) diff --git a/texi/ChangeLog b/texi/ChangeLog index ad588ba..cd81980 100644 --- a/texi/ChangeLog +++ b/texi/ChangeLog @@ -1,3 +1,34 @@ +2000-04-24 17:09:17 Felix Natter + + * gnusref.tex: New version. + + * refcard.tex: New version. + +2000-04-23 00:32:23 Lars Magne Ingebrigtsen + + * gnus.texi (Thread Commands): Add keystrokes. + (Various Summary Stuff): Addition. + +2000-04-22 21:12:25 Alan Shutko + + * Makefile.in: Add pdf support. + +2000-04-21 12:07:20 Shenghuo ZHU + + * gnus.texi (Listing Groups): Addition. + +2000-04-21 13:45:52 Pavel Janik + + * gnus.texi (Mail Source Specifiers): Example for :plugged. + +2000-04-20 20:37:48 Pavel Janik + + * gnus.texi (Limiting): Fix. + +2000-04-20 20:32:40 Dmitry Yaitskov + + * gnus.texi (Charsets): Typo fix. + 2000-03-19 Simon Josefsson * gnus.texi (IMAP): Addition. diff --git a/texi/Makefile.in b/texi/Makefile.in index eb03f40..5e63940 100644 --- a/texi/Makefile.in +++ b/texi/Makefile.in @@ -7,11 +7,13 @@ top_srcdir = @top_srcdir@ @SET_MAKE@ VPATH=$(srcdir) TEXI2DVI=texi2dvi +TEXI2PDF=texi2pdf EMACS=@EMACS@ MAKEINFO=@MAKEINFO@ FLAGS=-batch -q -no-site-file INFOSWI=-l ./dgnushack.el -f dgnushack-texi-format XINFOSWI=-l ./dgnushack.el -f dgnushack-texi-add-suffix-and-format +PDFLATEX=pdflatex LATEX=latex DVIPS=dvips PERL=perl @@ -42,7 +44,7 @@ most: texi2latex.elc latex latexps makeinfo -o $@ $<; \ fi -.SUFFIXES: .texi .dvi .ps +.SUFFIXES: .texi .dvi .ps .pdf .texi: if test $(MAKEINFO) = no; then \ @@ -53,15 +55,28 @@ most: texi2latex.elc latex latexps dvi: gnus.dvi message.dvi refcard.dvi emacs-mime.dvi +pdf: gnus.pdf message.pdf refcard.pdf emacs-mime.pdf + .texi.dvi : $(PERL) -n -e 'print unless (/\@iflatex/ .. /\@end iflatex/)' $< > gnustmp.texi $(TEXI2DVI) gnustmp.texi cp gnustmp.dvi $*.dvi rm gnustmp.* +.texi.pdf : + $(PERL) -n -e 'print unless (/\@iflatex/ .. /\@end iflatex/)' $< > gnustmp.texi + $(TEXI2PDF) gnustmp.texi + cp gnustmp.pdf $*.pdf + rm gnustmp.* + refcard.dvi: refcard.tex gnuslogo.refcard gnusref.tex $(LATEX) refcard.tex + +refcard.pdf: refcard.tex gnuslogo.refcard gnusref.tex + epstopdf gnuslogo.refcard --outfile=gnuslogo.refcard.pdf + $(PDFLATEX) refcard.tex + clean: rm -f gnus.*.bak *.ky *.cp *.fn *.cps *.kys *.log *.aux *.dvi *.vr \ *.tp *.toc *.pg gnus.latexi *.aux *.[cgk]idx \ diff --git a/texi/gnus-faq-ja.texi b/texi/gnus-faq-ja.texi index 7df355e..b08a858 100644 --- a/texi/gnus-faq-ja.texi +++ b/texi/gnus-faq-ja.texi @@ -153,7 +153,7 @@ GNU Emacs @item XEmacs -$B%P!<%8%g%s(B 20.2 $B0J>e$N(B Mule $B5!G=IU$-(B +$B%P!<%8%g%s(B 21.1.1 $B0J>e$N(B Mule $B5!G=IU$-(B @item Meadow diff --git a/texi/gnus-ja.texi b/texi/gnus-ja.texi index 94089ba..a760959 100644 --- a/texi/gnus-ja.texi +++ b/texi/gnus-ja.texi @@ -2814,6 +2814,12 @@ kill $(B$5$l$?%0%k!<%W$rA4$FI=<($7$^$9(B (@code{gnus-group-list-killed})$(B!# $(B@55,I=8=$K9gCW$9$kL>A0$+@bL@J8$r;}$D%0%k!<%W$rA4$FI=<($9$k(B (@code{gnus-group-description-apropos})$(B!#(B +@item A c +@kindex A c (Group) +@findex gnus-group-list-cached +$(B%-%c%C%7%e5-;v$r;}$D%0%k!<%W$rA4$FI=<($9$k(B +(@code{gnus-group-list-cached})$(B!#(B + @end table @vindex gnus-permanently-visible-groups @@ -3921,7 +3927,8 @@ From Newsgroups})$(B!#(B @item L $(B5-;v$N9T?t!#(B @item c -$(B5-;v$NJ8;z?t!#(B +$(B5-;v$NJ8;z?t!#$3$NL>A0;XDj;R$O(B (nnfolder $(B$N$h$&$J(B) $(B$$$/$D$+$NA*BrJ}K!$r(B +$(B%5%]!<%H$7$^$;$s!#(B @item I $(B%9%l%C%I$N%l%Y%k$K$h$k;z2<$2(B (@pxref{Customizing Threading})$(B!#(B @item T @@ -5238,7 +5245,7 @@ Prefixes})$(B!#(B @kindex / x ($(B35N,(B) @findex gnus-summary-limit-to-extra ``$(BDI2C(B'' $(B$N%X%C%@!<$N0l$D$K9gCW$9$k5-;v$K35N,%P%C%U%!$r@)8B$7$^$9(B -(@pxref{To From Newsgroups}) (@code{gnus-summary-limit-to-author}). +(@pxref{To From Newsgroups}) (@code{gnus-summary-limit-to-extra}). @item / u @itemx x @@ -5260,7 +5267,7 @@ Prefixes})$(B!#(B @kindex / t $(B!J35N,!K(B @findex gnus-summary-limit-to-age $(B?t;z$r?R$M$F!"35N,%P%C%U%!$r$=$N?t;z$NF|$h$j8E$$!J$b$7$/$OF1$8!K5-;v$K@)8B(B -$(B$7$^$9(B (@code{gnus-summary-limit-to-marks})$(B!#$b$7@\F,0z?t$,M?$($i$l$l$P!"(B +$(B$7$^$9(B (@code{gnus-summary-limit-to-age})$(B!#$b$7@\F,0z?t$,M?$($i$l$l$P!"(B $(B$=$N?t;z$NF|$h$j$b?7$7$$5-;v$K@)8B$7$^$9!#(B @item / n @@ -5782,11 +5789,19 @@ gnus $(B$OA4$F$N5-;v$N40A4$J(B @code{References} $(BMs$r8+$F!"F1$8%9%l%C%I$KB @item T n @kindex T n $(B!J35N,!K(B +@itemx M-C-n +@kindex M-C-n (Summary) +@itemx M-down +@kindex M-down (Summary) @findex gnus-summary-next-thread $(B$N5 $(BF1$8$h$&$KI=<($7$^$9!#$3$NJQ?t$,(B @code{t} $(B$G$"$k$H!"$=$l$O5-;v$rI=<($7$^$;(B $(B$s(B---$(B:G=i$+$iB8:_$7$J$+$C$?$+$N$h$&$K!#(B +@vindex gnus-alter-articles-to-read-function +@item gnus-alter-articles-to-read-function +$(B$3$NJQ?t$K@_Dj$7$?4X?t$G!"A*Br$9$k5-;v$N%j%9%H$rJQ99$9$k$3$H$,$G$-$^$9!#(B +$(B4X?t$OFs$D$N0z?t(B ($(B%0%k!<%WL>$HA*Br$9$k5-;v$N%j%9%H(B) $(B$rC5n$7$^(B @item $(B$=$l$>$l$N9T$OG$0U$N?t$N(B $(B6h@Z$j0u(B/$(BCM(B $(B$NBP$r4^$`;v$,$G$-$^$9!#M-8z$J6h@Z(B $(B$j0u$O(B @samp{machine}$(B!"(B@samp{login}$(B!"(B@samp{password}$(B!"(B@samp{default}$(B!"(B -@samp{force} $(B$G$9!#(B($(B:G8e$N$b$N$OM-8z$J(B @code{.netrc}/@code{ftp} $(B$N6h@Z$j(B -$(B0u$G$O$"$j$^$;$s!#$3$l$,%U%!%$%k(B @file{.authinfo} $(B$,(B @file{.netrc} $(B%U%!(B -$(B%$%kMM<0$+$i0o$l$kM#0l$NJ}K!$G$9!#(B) +@samp{port}$(B!"(B@samp{force} $(B$G$9!#(B +($(B:G8e$N$b$N$OM-8z$J(B @code{.netrc}/@code{ftp} $(B$N6h@Z$j0u$G$O$"$j$^$;$s!#(B +$(B$3$l$,%U%!%$%k(B @file{.authinfo} $(B$,(B @file{.netrc} $(B%U%!%$%kMM<0$+$i0o$l$k(B +$(B$[$H$s$IM#0l$NJ}K!$G$9!#(B) @end enumerate @@ -10774,7 +10805,18 @@ www.hotmail.com, mail.yahoo.com, www.netaddress.com, www.my-deja.com @item :plugged @code{nil} $(B$G$J$+$C$?$i!"(Bgnus $(B$,(B @dfn{unplugged} $(B$G$"$C$F$b%a!<%k$rl9g$KJXMx$G$9!#(B @end table @end table @@ -11295,6 +11337,16 @@ Gnus $(B$O5-;v$,$I$N%0%k!<%W$KB0$7$F$$$k$+$K4p$E$$$F!"$=$l$,$I$N$/$i$$@8B8(B $(B4|8B@Z$l4|4V$rA*BrE*$KJQ99$9$k$?$a$K%0%k!<%W%Q%i%a!<%?(B @code{expiry-wait} $(B$r;H$&;v$b$G$-$^$9(B (@pxref{Group Parameters})$(B!#(B +@vindex nnmail-expiry-target +$(B5-;v$N4|8B@Z$l>C5n$NIaDL$NF0:n$O$=$l$i$r>C5n$9$k$3$H$G$9!#$7$+$7!">l9g$K(B +$(B$h$C$F$O$=$l$i$r>C5n$9$k$h$j$bJL$N%0%k!<%W$K0\F0$7$?J}$,M-0U5A$+$b$7$l$^(B +$(B$;$s!#(B@code{nnmail-expiry-target} ($(B$H%0%k!<%W%Q%i%a!<%?(B +@code{expiry-target}) $(B$O$3$l$r@)8f$7$^$9!#%G%#%U%)%k%H$NCM$O(B +@code{delete} $(B$G$9$,!"J8;zNs(B ($(B5-;v$r0\F0$9$k@h$N%0%k!<%WL>(B) $(B$^$?$O0\F0@h(B +$(B$N%0%k!<%WL>$+(B @code{delete} $(B$rJV$94X?t(B ($(B5-;v$KHO0O$r69$a$?%P%C%U%!$G!"(B +$(B$=$N5-;v$,B8:_$7$F$$$k%0%k!<%WL>$,0z?t$H$7$FM?$($i$l$^$9(B) $(B$K$9$k$3$H$,$G(B +$(B$-$^$9!#(B + @vindex nnmail-keep-last-article @code{nnmail-keep-last-article} $(B$,(B @code{nil} $(B$G$J$$$H!"(Bgnus $(B$O%a!<%k%K%e!<(B $(B%9%0%k!<%W$N:G8e$N5-;v$r7h$7$F4|8B@Z$l>C5n$7$^$;$s!#$3$l$O(B procmail $(B$NMx(B @@ -20396,6 +20448,15 @@ into [-] buttons. (If I click on one of the [+] buttons, it does turn into a [-] button.) @item +Perhaps there should be a command to "attach" a buffer of comments to +a message? That is, `B WHATEVER', you're popped into a buffer, write +something, end with `C-c C-c', and then the thing you've written gets +to be the child of the message you're commenting. + +@item +Handle external-body parts. + +@item Solve the halting problem. @c TODO diff --git a/texi/gnus.texi b/texi/gnus.texi index 01a6e82..3d2db39 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -2773,6 +2773,11 @@ List all groups that have names that match a regexp List all groups that have names or descriptions that match a regexp (@code{gnus-group-description-apropos}). +@item A c +@kindex A c (Group) +@findex gnus-group-list-cached +List all groups with cached articles (@code{gnus-group-list-cached}). + @end table @vindex gnus-permanently-visible-groups @@ -3867,7 +3872,8 @@ the @code{a} spec. @item L Number of lines in the article. @item c -Number of characters in the article. +Number of characters in the article. This specifier is not supported in some +methods (like nnfolder). @item I Indentation based on thread level (@pxref{Customizing Threading}). @item T @@ -5240,7 +5246,7 @@ Limit the summary buffer to articles that match some author @findex gnus-summary-limit-to-extra Limit the summary buffer to articles that match one of the ``extra'' headers (@pxref{To From Newsgroups}) -(@code{gnus-summary-limit-to-author}). +(@code{gnus-summary-limit-to-extra}). @item / u @itemx x @@ -5262,7 +5268,7 @@ with that mark (@code{gnus-summary-limit-to-marks}). @kindex / t (Summary) @findex gnus-summary-limit-to-age Ask for a number and then limit the summary buffer to articles older than (or equal to) that number of days -(@code{gnus-summary-limit-to-marks}). If given a prefix, limit to +(@code{gnus-summary-limit-to-age}). If given a prefix, limit to articles younger than that number of days. @item / n @@ -5805,11 +5811,19 @@ understand the numeric prefix. @item T n @kindex T n (Summary) +@itemx M-C-n +@kindex M-C-n (Summary) +@itemx M-down +@kindex M-down (Summary) @findex gnus-summary-next-thread Go to the next thread (@code{gnus-summary-next-thread}). @item T p @kindex T p (Summary) +@itemx M-C-p +@kindex M-C-p (Summary) +@itemx M-up +@kindex M-up (Summary) @findex gnus-summary-prev-thread Go to the previous thread (@code{gnus-summary-prev-thread}). @@ -6755,7 +6769,7 @@ content type based on the file name. The result will be fed to Non-@code{nil} means that @code{gnus-uu}, when asked to save without decoding, will save in digests. If this variable is @code{nil}, @code{gnus-uu} will just save everything in a file without any -embellishments. The digesting almost conforms to RFC1153---no easy way +embellishments. The digesting almost conforms to RFC 1153---no easy way to specify any meaningful volume and issue numbers were found, so I simply dropped them. @@ -7684,7 +7698,9 @@ the same manner: @table @kbd @item K b @kindex K b (Summary) -Make all the @sc{mime} parts have buttons in from of them. +Make all the @sc{mime} parts have buttons in from of them. This is +mostly useful if you wish to save (or perform other actions) on inlined +parts. @item K m @kindex K m (Summary) @@ -7709,7 +7725,7 @@ Toggle the buttonized display of the article buffer @item W M w @kindex W M w (Summary) -Decode RFC2047-encoded words in the article headers +Decode RFC 2047-encoded words in the article headers (@code{gnus-article-decode-mime-words}). @item W M c @@ -7818,8 +7834,7 @@ for posting. Each element of the alist has the form @code{(}@var{test header body-list}@code{)}, where: @table @var -@item -test +@item test is either a regular expression matching the newsgroup header or a variable to query, @item header @@ -8471,6 +8486,22 @@ If it is @code{nil} (which is the default), gnus will rename the any other article. If this variable is @code{t}, it won't display the article---it'll be as if it never existed. +@vindex gnus-alter-articles-to-read-function +@item gnus-alter-articles-to-read-function +This function, which takes two parameters (the group name and the list +of articles to be selected), is called to allow the user to alter the +list of articles to be selected. + +For instance, the following function adds the list of cached articles to +the list in one particular group: + +@lisp +(defun my-add-cached-articles (group articles) + (if (string= group "some.group") + (append gnus-newsgroup-cached articles) + articles)) +@end lisp + @end table @@ -10269,8 +10300,8 @@ The file contains one or more line, each of which define one server. @item Each line may contain an arbitrary number of token/value pairs. The valid tokens include @samp{machine}, @samp{login}, @samp{password}, -@samp{default} and @samp{force}. (The latter is not a valid -@file{.netrc}/@code{ftp} token, which is the only way the +@samp{default}, @samp{port} and @samp{force}. (The latter is not a +valid @file{.netrc}/@code{ftp} token, which is almost the only way the @file{.authinfo} file format deviates from the @file{.netrc} file format.) @@ -11124,13 +11155,13 @@ UNDELETED}, is probably the best choice for most people, but if you sometimes peek in your mailbox with a @sc{imap} client and mark some articles as read (or; SEEN) you might want to set this to @samp{nil}. Then all articles in the mailbox is fetched, no matter what. For a -complete list of predicates, see RFC2060 §6.4.4. +complete list of predicates, see RFC 2060 §6.4.4. @item :fetchflag How to flag fetched articles on the server, the default @samp{Deleted} will mark them as deleted, an alternative would be @samp{Seen} which would simply mark them as read. These are the two most likely choices, -but more flags are defined in RFC2060 §2.3.2. +but more flags are defined in RFC 2060 §2.3.2. @item :dontexpunge If non-nil, don't remove all articles marked as deleted in the mailbox @@ -11189,7 +11220,18 @@ Keywords: @table @code @item :plugged -If non-nil, fetch the mail even when Gnus is unplugged. +If non-nil, fetch the mail even when Gnus is unplugged. If you use +directory source to get mail, you can specify it as in this example: + +@lisp +(setq mail-sources + '((directory :path "/home/pavel/.Spool/" + :suffix "" + :plugged t))) +@end lisp + +Gnus will then fetch your mail even when you are unplugged. This is +useful when you use local mail and news. @end table @end table @@ -11284,8 +11326,8 @@ use this hook to notify any mail watch programs, if you want to. @vindex nnmail-split-hook @item nnmail-split-hook @findex article-decode-encoded-words -@findex RFC1522 decoding -@findex RFC2047 decoding +@findex RFC 1522 decoding +@findex RFC 2047 decoding Hook run in the buffer where the mail headers of each message is kept just before the splitting based on these headers is done. The hook is free to modify the buffer contents in any way it sees fit---the buffer @@ -11738,6 +11780,18 @@ necessarily an integer) or one of the symbols @code{immediate} or You can also use the @code{expiry-wait} group parameter to selectively change the expiry period (@pxref{Group Parameters}). +@vindex nnmail-expiry-target +The normal action taken when expiring articles is to delete them. +However, in some circumstances it might make more sense to move them to +other groups instead of deleting them. The @code{nnmail-expiry-target} +(and the @code{expiry-target} group parameter) controls this. The +default value is @code{delete}, but this can also be a string (which +should be the name of the group the message should be moved to), or a +function (which will be called in a buffer narrowed to the message in +question, and with the name of the group being moved from as its +parameter) which should return a target -- either a group name or +@code{delete}. + @vindex nnmail-keep-last-article If @code{nnmail-keep-last-article} is non-@code{nil}, Gnus will never expire the final article in a mail newsgroup. This is to make life @@ -11773,10 +11827,10 @@ auto-expire turned on. @cindex incoming mail treatment Mailers and list servers are notorious for doing all sorts of really, -really stupid things with mail. ``Hey, RFC822 doesn't explicitly +really stupid things with mail. ``Hey, RFC 822 doesn't explicitly prohibit us from adding the string @code{wE aRe ElItE!!!!!1!!} to the end of all lines passing through our server, so let's do that!!!!1!'' -Yes, but RFC822 wasn't designed to be read by morons. Things that were +Yes, but RFC 822 wasn't designed to be read by morons. Things that were considered to be self-evident were not discussed. So. Here we are. Case in point: The German version of Microsoft Exchange adds @samp{AW: @@ -12586,7 +12640,7 @@ groups updated. The easiest way to get started with @code{nnwarchive} is to say something like the following in the group buffer: @kbd{M-x -gnus-group-make-nnwarchive-group RET an_egroup RET egroups RET +gnus-group-make-warchive-group RET an_egroup RET egroups RET www.egroups.com RET your@@email.address RET}. (Substitute the @sc{an_egroup} with the mailing list you subscribed, the @sc{your@@email.address} with your email address.), or to browse the @@ -18426,7 +18480,7 @@ Gnus should work on : Emacs 20.3 and up. @item -XEmacs 20.4 and up. +XEmacs 21.1.1 and up. @end itemize @@ -20736,6 +20790,15 @@ into [-] buttons. (If I click on one of the [+] buttons, it does turn into a [-] button.) @item +Perhaps there should be a command to "attach" a buffer of comments to +a message? That is, `B WHATEVER', you're popped into a buffer, write +something, end with `C-c C-c', and then the thing you've written gets +to be the child of the message you're commenting. + +@item +Handle external-body parts. + +@item Solve the halting problem. @c TODO @@ -21011,7 +21074,7 @@ An article that responds to a different article---its parent. @item digest @cindex digest A collection of messages in one file. The most common digest format is -specified by RFC1153. +specified by RFC 1153. @end table @@ -22264,7 +22327,7 @@ almost suspect that the author looked at the @sc{nov} specification and just shamelessly @emph{stole} the entire thing, and one would be right. @dfn{Header} is a severely overloaded term. ``Header'' is used in -RFC1036 to talk about lines in the head of an article (e.g., +RFC 1036 to talk about lines in the head of an article (e.g., @code{From}). It is used by many people as a synonym for ``head''---``the header and the body''. (That should be avoided, in my opinion.) And Gnus uses a format internally that it calls ``header'', diff --git a/texi/gnusref.tex b/texi/gnusref.tex index da186fe..0ee9168 100644 --- a/texi/gnusref.tex +++ b/texi/gnusref.tex @@ -1,10 +1,4 @@ % include file for the Gnus refcard and booklet -\def\progver{5.0}\def\refver{5.0} % program and refcard versions -\def\date{16 September 1995} -\def\author{Vladimir Alexiev $<$vladimir@cs.ualberta.ca$>$} -\raggedbottom\raggedright -\newlength{\logowidth}\setlength{\logowidth}{6.861in} -\newlength{\logoheight}\setlength{\logoheight}{7.013in} \newlength{\keycolwidth} \newenvironment{keys}[1]% #1 is the widest key {\nopagebreak%\noindent% @@ -13,24 +7,29 @@ \addtolength{\keycolwidth}{-\columnwidth}% \begin{tabular}{@{}l@{\hspace{\tabcolsep}}p{-\keycolwidth}@{}}}% {\end{tabular}\\} -\catcode`\^=12 % allow ^ to be typed literally -\newcommand{\B}[1]{{\bf#1})} % bold l)etter -\def\Title{ +% uncomment the first definition if you do not want pagebreaks in maps +%\newcommand{\esamepage}{\samepage} +\newcommand{\esamepage}{} + +\newcommand*{\B}[1]{{\bf#1})} % bold l)etter + +\newcommand{\Title}{% \begin{center} {\bf\LARGE Gnus \progver\ Reference \Guide\\} %{\normalsize \Guide\ version \refver} \end{center} } -\newcommand\Logo[1]{\centerline{ +\newcommand*{\Logo}[1]{\centerline{% \makebox[\logoscale\logowidth][l]{\vbox to \logoscale\logoheight {\vfill\special{psfile=gnuslogo.#1}}\vspace{-\baselineskip}}}} -\def\CopyRight{ +\newcommand{\Copyright}{% \begin{center} Copyright \copyright\ 1995 Free Software Foundation, Inc.\\* Copyright \copyright\ 1995 \author.\\* +Copyright \copyright\ 2000 Felix Natter $<$fnatter@gmx.net$>$.\\* Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne Ingebrigtsen.\\* and the Emacs Help Bindings feature (C-h b).\\* @@ -40,12 +39,12 @@ Gnus logo copyright \copyright\ 1995 Luis Fernandes.\\* Permission is granted to make and distribute copies of this reference \guide{} provided the copyright notice and this permission are preserved on all copies. Please send corrections, additions and suggestions to the -above email address. \Guide{} last edited on \date. +current maintainer's email address. \Guide{} last edited on \date. } -\def\Notes{ -\subsec{Notes} -{\samepage +\newcommand{\Notes}{% +\subsection*{Notes} +{\esamepage Gnus is complex. Currently it has some 346 interactive (user-callable) functions. Of these 279 are in the two major modes (Group and Summary/Article). Many of these functions have more than one binding, some @@ -76,44 +75,40 @@ equal level will be affected by the operation. If no prefix is given, commands will also set the default level. \quad [score] An article score. If no prefix is given, -`gnus-summary-default-score' is used. -%Some functions were not yet documented at the time of creating this -%\guide and are clearly indicated as such. -\\*[\baselineskip] +`gnus-summary-default-score' is used. \\*[\baselineskip] +% some keys \begin{keys}{C-c C-i} +M-x gnus & start Gnus. \\ +M-x gnus-no-server & start Gnus without trying to contact server. \\ C-c C-i & Go to the Gnus online {\bf info}.\\ C-c C-b & Send a Gnus {\bf bug} report.\\ \end{keys} }} -\def\GroupLevels{ -\subsec{Group Subscribedness Levels} +\newcommand{\GroupLevels}{% The table below assumes that you use the default Gnus levels. Fill your user-specific levels in the blank cells.\\[1\baselineskip] - \begin{tabular}{|c|l|l|} \hline Level & Groups & Status \\ \hline -1 & mail groups & \\ -2 & mail groups & \\ -3 & & subscribed \\ -4 & & \\ -5 & default list level & \\ +1 & draft/mail groups & \\ +2 & mail groups & \\ +3 & & subscribed \\ +4 & & \\ +5 & default list level & \\ \hline -6 & & unsubscribed \\ -7 & & \\ +6 & & unsubscribed \\ +7 & & \\ \hline -8 & & zombies \\ +8 & & zombies \\ \hline -9 & & killed \\ +9 & & killed \\ \hline -\end{tabular} -} +\end{tabular}} -\def\Marks{ -\subsec{Mark Indication Characters} -{\samepage If a command directly sets a mark, it is shown in parentheses.\\* +\newcommand{\MarkCharacters}{% +{\esamepage If a command directly sets a mark, it is shown in parentheses.\\* \newlength{\markcolwidth} \settowidth{\markcolwidth}{` '}% widest character \addtolength{\markcolwidth}{4\tabcolsep} @@ -130,8 +125,8 @@ Level & Groups & Status \\ ` ' & (M-u, M SPC, M c) Not read.\\ ! & (!, M !, M t) Ticked (interesting).\\ ? & (?, M ?) Dormant (only followups are interesting).\\ -C & (C, S c) {\bf Canceled} (only for your own articles).\\ E & (E, M e, M x) {\bf Expirable}. Only has effect in mail groups.\\ +G & (C, B DEL) Canceled article (or deleted in mailgroups).\\ \hline\hline \multicolumn{2}{|p{\markdblcolwidth}|}{The marks below mean that the article is read (killed, uninteresting), and have more or less the same effect. @@ -140,49 +135,61 @@ E & (E, M e, M x) {\bf Expirable}. Only has effect in mail groups.\\ \hline r & (d, M d, M r) Deleted (marked as {\bf read}).\\ C & (M C; M C-c; M H; c, Z c; Z n; Z C) Killed by {\bf catch-up}.\\ -O & {\bf Old} (marked read in a previous session).\\ +F & SOUPed article. See the manual.\\ +O & {\bf Old} (read in a previous session).\\ K & (k, M k; C-k, M K) {\bf Killed}.\\ +M & Article marked as read by duplicate suppression.\\ +Q & Article is part of a sparse thread (see ``Threading'' in the manual).\\ R & {\bf Read} (viewed in actuality).\\ X & Killed by a kill file.\\ Y & Killed due to low score.\\ \hline\multicolumn{2}{c}{\vspace{1ex}}\\\hline -\multicolumn{2}{|p{\markdblcolwidth}|}{{\bf Other marks}}\\ +\multicolumn{2}{|p{\markdblcolwidth}|}{{\bf Marks not affecting visibility}}\\ \hline -\# & (\#, M \#, M P p) Processable (will be affected by the next operation).\\ -A & {\bf Answered} (followed-up or replied).\\ -+ & Over default score.\\ -$-$ & Under default score.\\ -= & Has children (thread underneath it). Add `\%e' to - `gnus-summary-line-format'.\\ +\# & (\#, M \#, M P p) Processable (will be affected by the next operation). +[2]\\ +A & {\bf Answered} (followed-up or replied). [2]\\ +* & Cached. [2]\\ +S & Saved. [2]\\ ++ & Over default score. [3]\\ +$-$ & Under default score. [3]\\ +$=$ & Has children (thread underneath it). Add `\%e' to +`gnus-summary-line-format'. [3]\\ \hline \end{tabular} }} -\def\GroupMode{ -\sec{Group Mode} +\newcommand{\GroupModeGeneral}{% \begin{keys}{C-c M-C-x} -RET & (=) Select this group. [Prefix: how many (read) articles to fetch. -Positive: newest articles, negative: oldest ones.]\\ -SPC & Select this group and display the first unread article. [Same -prefix as above.]\\ +RET & (=) Enter this group. [Prefix: how many (read) articles to fetch. +Positive: newest articles, negative: oldest ones; non-numerical: fetch all articles, not just unread]\\ +M-RET & Enter group quickly.\\ +M-SPC & Same as RET but does not expunge and hide dormants.\\ +M-C-RET & Enter group without any processing, changes will not be permanent.\\ +SPC & Select this group and display the first (unread) article. [Same +prefix as above.]\\ ? & Give a very short help message.\\ $<$ & Go to the beginning of the Group buffer.\\ $>$ & Go to the end of the Group buffer.\\ , & Jump to the lowest-level group with unread articles.\\ . & Jump to the first group with unread articles.\\ -^ & Enter the Server buffer mode.\\ +xx & Enter the Server buffer mode.\\ a & Post an {\bf article} to a group.\\ b & Find {\bf bogus} groups and delete them.\\ c & Mark all unticked articles in this group as read ({\bf catch-up}). [p/p]\\ g & Check the server for new articles ({\bf get}). [level]\\ +M-g & Check the server for new articles in this group ({\bf get}). [p/p]\\ j & {\bf Jump} to a group.\\ m & {\bf Mail} a message to someone.\\ n & Go to the {\bf next} group with unread articles. [distance]\\ +M-n & Go to the {\bf next} group on the same or lower level. +[distance]\\ p & (DEL) Go to the {\bf previous} group with unread articles. [distance]\\ +M-p & Go to the {\bf previous} group on the same or lower level. [distance]\\ q & {\bf Quit} Gnus.\\ -r & Read the init file ({\bf reset}).\\ +r & Re-read the init file ({\bf reset}).\\ s & {\bf Save} the `.newsrc.eld' file (and `.newsrc' if `gnus-save-newsrc-file').\\ z & Suspend (kill all buffers of) Gnus.\\ @@ -193,89 +200,140 @@ N & Go to the {\bf next} group. [distance]\\ P & Go to the {\bf previous} group. [distance]\\ Q & {\bf Quit} Gnus without saving any startup (.newsrc) files.\\ R & {\bf Restart} Gnus.\\ -V & Display the Gnus {\bf version} number.\\ Z & Clear the dribble buffer.\\ -C-c C-d & Show the {\bf description} of this group. [Prefix: re-read it -from the server.]\\ +M-c & Clear data from group (marks and list of read articles). \\ C-c C-s & {\bf Sort} the groups by name, number of unread articles, or level (depending on `gnus-group-sort-function').\\ C-c C-x & Run all expirable articles in this group through the {\bf expiry} process.\\ C-c M-C-x & Run all articles in all groups through the {\bf expiry} process.\\ +C-c M-g & Activate all {\bf groups}.\\ +C-c C-i & Gnus online-manual ({\bf info}).\\ C-x C-t & {\bf Transpose} two groups.\\ -M-d & {\bf Describe} ALL groups. [Prefix: re-read the description from the -server.]\\ -M-f & Fetch this group's {\bf FAQ} (using ange-ftp).\\ -M-g & Check the server for new articles in this group ({\bf get}). [p/p]\\ -M-n & Go to the {\bf previous} unread group on the same or lower level. -[distance]\\ -M-p & Go to the {\bf next} unread group on the same or lower level. -[distance]\\ +H f & Fetch this group's {\bf FAQ} (using ange-ftp).\\ +H v & (V) Display the Gnus {\bf version} number.\\ +H d & (C-c C-d) Show the {\bf description} of this group +[Prefix: re-read from server].\\ +M-d & {\bf Describe} all groups. [Prefix: re-read from server]\\ \end{keys} } -\def\GroupCommands{ -\subsec{List Groups} -{\samepage -\begin{keys}{A m} -A a & (C-c C-a) List all groups whose names match a regexp ({\bf -apropos}).\\ +\newcommand{\ListGroups}{% +{\esamepage +\begin{keys}{A M} A d & List all groups whose names or {\bf descriptions} match a regexp.\\ -A k & (C-c C-l) List all {\bf killed} groups.\\ -A m & List groups that {\bf match} a regexp and have unread articles. -[level]\\ -A s & (l) List {\bf subscribed} groups with unread articles. [level]\\ -A u & (L) List all groups (including {\bf unsubscribed}). [If no prefix -is given, level 7 is the default]\\ -A z & List the {\bf zombie} groups.\\ +A k & (C-c C-l) List all {\bf killed} groups. +[Prefix: look at active-file from server]\\ +A l & List all groups on a specific level. +[Prefix: also list groups with no unread articles]\\ +A d & List all groups that have names or {\bf descriptions} matching +a regexp.\\ +A a & (C-c C-a) List all groups whose names match a regexp +({\bf apropos}).\\ +A A & List the server's active-file.\\ A M & List groups that {\bf match} a regexp.\\ +A m & List groups that {\bf match} a regexp and have unread articles. +[level]\\ +A s & (l) List all {\bf subscribed} groups with unread articles. +[level, 5 and lower is the default]\\ +A u & (L) List all groups (including read and {\bf unsubscribed}). +[level, 7 and lower is the default]\\ +A z & List all {\bf zombie} groups.\\ \end{keys} } -\subsec{Create/Edit Foreign Groups} -{\samepage +\newcommand{\CreateEditGroups}{% +{\esamepage The select methods are indicated in parentheses.\\* -\begin{keys}{G m} +\begin{keys}{G DEL} G a & Make the Gnus list {\bf archive} group. (nndir over ange-ftp)\\ +G c & {\bf Customize} this group's parameters.\\ G d & Make a {\bf directory} group (every file must be a posting and files must have numeric names). (nndir)\\ +G D & Enter a {\bf directory} as a (temporary) group. +(nneething without recording articles read)\\ G e & (M-e) {\bf Edit} this group's select method.\\ +G E & {\bf Edit} this group's info (select method, articles read, etc).\\ G f & Make a group based on a {\bf file}. (nndoc)\\ G h & Make the Gnus {\bf help} (documentation) group. (nndoc)\\ G k & Make a {\bf kiboze} group. (nnkiboze)\\ G m & {\bf Make} a new group.\\ G p & Edit this group's {\bf parameters}.\\ +G r & Rename this group (does not work with read-only groups!).\\ +G u & Create one of the groups mentioned in gnus-{\bf useful}-groups.\\ G v & Add this group to a {\bf virtual} group. [p/p]\\ -G D & Enter a {\bf directory} as a (temporary) group. (nneething without -recording articles read.)\\ -G E & {\bf Edit} this group's info (select method, articles read, etc).\\ G V & Make a new empty {\bf virtual} group. (nnvirtual)\\ +G w & Create ephemeral group based on web-search. [Prefix: make solid group +instead]\\ +G DEL & {\bf Delete} group [Prefix: delete all articles as well].\\ \end{keys} You can also create mail-groups and read your mail with Gnus (very useful -if you are subscribed to any mailing lists), using one of the methods +if you are subscribed to mailing lists), using one of the methods nnmbox, nnbabyl, nnml, nnmh, or nnfolder. Read about it in the online info (C-c C-i g Reading Mail RET). -} - -%\subsubsec{Soup Commands} -%\begin{keys}{G s w} -%G s b & gnus-group-brew-soup: not documented.\\ -%G s p & gnus-soup-pack-packet: not documented.\\ -%G s r & nnsoup-pack-replies: not documented.\\ -%G s s & gnus-soup-send-replies: not documented.\\ -%G s w & gnus-soup-save-areas: not documented.\\ -%\end{keys} +}} -\subsec{Mark Groups} +% TODO: +\newcommand{\SoupCommands}{% +\begin{keys}{G s w} +G s b & gnus-group-brew-soup: not documented.\\ +G s p & gnus-soup-pack-packet: not documented.\\ +G s r & nnsoup-pack-replies: not documented.\\ +G s s & gnus-soup-send-replies: not documented.\\ +G s w & gnus-soup-save-areas: not documented.\\ +\end{keys}} + +\newcommand{\MarkGroups}{% \begin{keys}{M m} M m & (\#) Set the process {\bf mark} on this group. [scope]\\ +M r & Mark all groups matching regular expression.\\ M u & (M-\#) Remove the process mark from this group ({\bf unmark}). [scope]\\ +M U & Remove the process mark from all groups (\textbf{umark all}).\\ M w & Mark all groups in the current region.\\ -\end{keys} - -\subsec{Unsubscribe, Kill and Yank Groups} -\begin{keys}{S w} +\end{keys}} + +\newcommand{\GroupTopicsGeneral}{% +{\esamepage +Topics are ``categories'' for groups. Press t in the group-buffer to +toggle gnus-topic-mode (C-c C-i g Group Topics RET). +\begin{keys}{C-c C-x} +T n & Prompt for topic {\bf name} and create it.\\ +T m & {\bf Move} the current group to some other topic [p/p].\\ +T j & {\bf Jump} to a topic.\\ +T c & {\bf Copy} the current group to some other topic [p/p].\\ +T D & Remove (not delete) the current group [p/p].\\ +T M & {\bf Move} all groups matching a regexp to a topic.\\ +T C & {\bf Copy} all groups matching a regexp to a topic.\\ +T H & Toggle {\bf hiding} of empty topics.\\ +T r & {\bf Rename} a topic.\\ +T DEL & Delete an empty topic.\\ +T \# & Mark all groups in the current topic with the process-mark.\\ +T M-\# & Remove the process-mark from all groups in the current topic.\\ +T TAB & (TAB) Indent current topic [Prefix: unindent].\\ +M-TAB & Unindent the current topic.\\ +RET & (SPC) Either unfold topic or enter group [level].\\ +C-c C-x & Expire all articles in current group or topic.\\ +C-k & {\bf Kill} a group or topic.\\ +C-y & {\bf Yank} a group or topic.\\ +A T & List active-file using {\bf topics}.\\ +G p & Edit topic-{\bf parameters}.\\ +\end{keys}}} + +\newcommand{\TopicSorting}{% +{\esamepage +\begin{keys}{T S m} +T S a & Sort {\bf alphabetically}.\\ +T S u & Sort by number of {\bf unread} articles.\\ +T S l & Sort by group {\bf level}.\\ +T S v & Sort by group score ({\bf value}).\\ +T S r & Sort by group {\bf rank}.\\ +T S m & Sort by {\bf method}.\\ +\end{keys}}} + +\newcommand{\SubscribeKillYankGroups}{% +{\esamepage +\begin{keys}{S C-k} S k & (C-k) {\bf Kill} this group.\\ S l & Set the {\bf level} of this group. [p/p]\\ S s & (U) Prompt for a group and toggle its {\bf subscription}.\\ @@ -283,236 +341,436 @@ S t & (u) {\bf Toggle} subscription to this group. [p/p]\\ S w & (C-w) Kill all groups in the region.\\ S y & (C-y) {\bf Yank} the last killed group.\\ S z & Kill all {\bf zombie} groups.\\ -\end{keys} -} +S C-k & Kill all groups on a certain level.\\ +\end{keys}}} -\def\SummaryMode{ -\sec{Summary Mode} %{Summary and Article Modes} -\begin{keys}{SPC} +\newcommand{\SummaryModeGeneral}{% +{\esamepage +\begin{keys}{M-RET} SPC & (A SPC, A n) Select an article, scroll it one page, move to the next one.\\ DEL & (A DEL, A p, b) Scroll this article one page back. [distance]\\ RET & Scroll this article one line forward. [distance]\\ -= & Expand the Summary window. [Prefix: shrink it to display the -Article window]\\ -$<$ & (A $<$, A b) Scroll to the beginning of this article.\\ -$>$ & (A $>$, A e) Scroll to the end of this article.\\ -\& & Execute a command on all articles matching a regexp. -[Prefix: move backwards.]\\ -j & (G g) Ask for an article number and then {\bf jump} to that summary -line.\\ -C-t & Toggle {\bf truncation} of summary lines.\\ +M-RET & Scroll this article one line backward. [distance]\\ += & Expand the Summary window (fullsize). +[Prefix: shrink to display article window]\\ +% +\& & Execute a command on all articles whose header matches a regexp. +[Prefix: move backwards]\\ M-\& & Execute a command on all articles having the process mark.\\ -M-k & Edit this group's {\bf kill} file.\\ +% M-n & (G M-n) Go to the {\bf next} summary line of an unread article. [distance]\\ M-p & (G M-p) Go to the {\bf previous} summary line of an unread article. [distance]\\ -M-r & Search through all previous articles for a regexp.\\ M-s & {\bf Search} through all subsequent articles for a regexp.\\ +M-r & Search through all previous articles for a regexp.\\ +% +A P & {\bf Postscript}-print current buffer.\\ +% +M-k & Edit this group's {\bf kill} file.\\ M-K & Edit the general {\bf kill} file.\\ -\end{keys} -} - -\def\SortSummary{ -\subsec{Sort the Summary Buffer} -\begin{keys}{C-c C-s C-a} -C-c C-s C-a & Sort the summary by {\bf author}.\\ -C-c C-s C-d & Sort the summary by {\bf date}.\\ -C-c C-s C-i & Sort the summary by article score.\\ -C-c C-s C-n & Sort the summary by article {\bf number}.\\ -C-c C-s C-s & Sort the summary by {\bf subject}.\\ -\end{keys} -} - -\def\Asubmap{ -\subsec{Article Buffer Commands} -\begin{keys}{A m} -A g & (g) (Re)fetch this article ({\bf get}). [Prefix: just show the -article.]\\ -A r & (^, A ^) Go to the parent of this article (the {\bf References} -header).\\ -M-^ & Fetch the article with a given Message-ID.\\ +% +C-t & Toggle {\bf truncation} of summary lines.\\ +Y g & Regenerate the summary-buffer.\\ +Y c & Insert all cached articles into the summary-buffer.\\ +% +M-C-e & {\bf Edit} the group-parameters.\\ +M-C-g & Customize the group-parameters.\\ +% +% article handling +% +A $<$ & ($<$, A b) Scroll to the beginning of this article.\\ +A $>$ & ($>$, A e) Scroll to the end of this article.\\ A s & (s) Perform an i{\bf search} in the article buffer.\\ -A D & (C-d) Un{\bf digestify} this article into a separate group.\\ -\end{keys} -} - -\def\Bsubmap{ -\subsec{Mail-Group Commands} -{\samepage +% +A D & (C-d) Un{\bf digestify} this article into a separate group. +[Prefix: force digest]\\ +M-C-d & Like C-d, but open several documents in nndoc-groups, wrapped +in an nnvirtual group [p/p]\\ +% +A g & (g) (Re)fetch this article ({\bf get}). [Prefix: get raw version]\\ +A r & (\^{}, A \^{}) Fetch the parent(s) of this article. +[Prefix: if positive fetch \textit{n} ancestors; +negative: fetch only the \textit{n}th ancestor]\\ +A t & {\bf Translate} this article.\\ +A R & Fetch all articles mentioned in the {\bf References}-header.\\ +A T & Fetch full \textbf{thread} in which the current article appears.\\ +M-\^{} & Fetch the article with a given Message-ID.\\ +S y & {\bf Yank} the current article into an existing message-buffer. +[p/p]\\ +\end{keys}}} + +\newcommand{\MIMESummary}{% +{\esamepage +For the commands operating on one MIME part (a subset of gnus-article-*), a +prefix selects which part to operate on. If the point is placed over a +MIME button in the article buffer, use the corresponding bindings for the +article buffer instead. +\begin{keys}{W M w} +K v & (b) {\bf View} the MIME-part.\\ +K o & {\bf Save} the MIME part.\\ +K c & {\bf Copy} the MIME part.\\ +K e & View the MIME part {\bf externally}.\\ +K i & View the MIME part {\bf internally}.\\ +K $\mid$ & Pipe the MIME part to an external command.\\ +K b & Make all the MIME parts have buttons in front of them.\\ +K m & Try to repair {\bf multipart-headers}.\\ +X m & Save all parts matching a MIME type to a directory. [p/p]\\ +M-t & Toggle the buttonized display of the article buffer.\\ +W M w & Decode RFC2047-encoded words in the article headers.\\ +W M c & Decode encoded article bodies. [Prefix: prompt for charset]\\ +W M v & View all MIME parts in the current article.\\ +\end{keys}}} + +\newcommand{\SortSummary}{% +{\esamepage +\begin{keys}{C-c C-s C-a} +C-c C-s C-a & Sort the summary-buffer by {\bf author}.\\ +C-c C-s C-d & Sort the summary-buffer by {\bf date}.\\ +C-c C-s C-i & Sort the summary-buffer by article score.\\ +C-c C-s C-l & Sort the summary-buffer by amount of lines.\\ +C-c C-s C-c & Sort the summary-buffer by length.\\ +C-c C-s C-n & Sort the summary-buffer by article {\bf number}.\\ +C-c C-s C-s & Sort the summary-buffer by {\bf subject}.\\ +\end{keys}}} + +\newcommand{\MailGroups}{% formerly \Bsubmap +{\esamepage These commands (except `B c') are only valid in a mail group.\\* \begin{keys}{B M-C-e} -B DEL & {\bf Delete} the mail article from disk (!). [p/p]\\ +B DEL & (B backspace, B delete) {\bf Delete} the mail article from disk (!). +[p/p]\\ +B B & Crosspost this article to another group.\\ B c & {\bf Copy} this article from any group to a mail group. [p/p]\\ B e & {\bf Expire} all expirable articles in this group. [p/p]\\ B i & {\bf Import} a random file into this group.\\ B m & {\bf Move} the article from one mail group to another. [p/p]\\ -B q & {\bf Query} where will the article go during fancy splitting\\ +B p & Query whether the article was posted as well.\\ +B q & {\bf Query} where the article will end up after fancy splitting\\ B r & {\bf Respool} this mail article. [p/p]\\ +B t & {\bf Trace} the fancy splitting patterns applied to this article.\\ B w & (e) Edit this article.\\ B M-C-e & {\bf Expunge} (delete from disk) all expirable articles in this group (!). [p/p]\\ -\end{keys} -}} - -\def\Gsubmap{ -\subsec{Select Articles} -{\samepage +\end{keys}}} + +\newcommand{\DraftGroup}{% formerly \Dsubmap +{\esamepage +The ``drafts''-group contains messages that have been saved but not sent +and rejected articles. \\* +\begin{keys}{B DEL} +D e & {\bf edit} message in draft group.\\ +B DEL & \textbf{Delete} message (like in mailgroup).\\ +\end{keys}}} + +\newcommand{\SelectArticles}{% formerly \Gsubmap +{\esamepage These commands select the target article. They do not understand the prefix.\\* \begin{keys}{G C-n} +h & Enter article-buffer.\\ G b & (,) Go to the {\bf best} article (the one with highest score).\\ G f & (.) Go to the {\bf first} unread article.\\ -G l & (l) Go to the {\bf last} article read.\\ G n & (n) Go to the {\bf next} unread article.\\ -p & Go to the {\bf previous} unread article.\\ -G p & {\bf Pop} an article off the summary history and go to it.\\ +G p & (p) Go to the {\bf previous} unread article.\\ +% G N & (N) Go to {\bf the} next article.\\ G P & (P) Go to the {\bf previous} article.\\ +% G C-n & (M-C-n) Go to the {\bf next} article with the same subject.\\ G C-p & (M-C-p) Go to the {\bf previous} article with the same subject.\\ +% +G l & (l) Go to the previously read article ({\bf last-read-article}).\\ +G o & Pop an article off the summary history and go to it.\\ +% +G g & Search an article via subject.\\ +G j & (j) Search an article via Message-Id or subject.\\ +\end{keys}}} + +\newcommand{\ArticleModeGeneral}{% +{\esamepage +The normal navigation keys work in Article mode. Some additional keys are:\\* +\begin{keys}{C-c RET} +C-c \^{} & Get the article with the Message-ID near point.\\ +C-c RET & Send reply to address near point.\\ +h & Go to the \textbf{header}-line of the article in the +summary-buffer.\\ +s & Go to \textbf{summary}-buffer.\\ +RET & (middle mouse button) Activate the button at point to follow +an URL or Message-ID.\\ +TAB & Move the point to the next button.\\ +M-TAB & Move point to previous button.\\ +\end{keys}}} + +\newcommand{\WashArticle}{% formerly \Wsubmap +{\esamepage +\begin{keys}{W W H} +W b & Make Message-IDs and URLs in the article mouse-clickable +{\bf buttons}.\\ +W l & (w) Remove page breaks ({\bf\^{}L}) from the article.\\ +W c & Translate CRLF-pairs to LF and then the remaining CR's to LF's.\\ +W d & Treat {\bf dumbquotes}.\\ +W f & Look for and display any X-{\bf Face} headers.\\ +W m & Toggle {\bf MIME} processing.\\ +W o & Treat {\bf overstrike} or underline (\^{}H\_) in the article.\\ +W q & Treat {\bf quoted}-printable in the article.\\ +W r & (C-c C-r) Do a Caesar {\bf rotate} (rot13) on the article.\\ +W t & (t) {\bf Toggle} display of all headers.\\ +W v & (v) Toggle permanent {\bf verbose} displaying of all headers.\\ +W w & Do word {\bf wrap} in the article.\\ +W B & Add clickable {\bf buttons} to the article headers.\\ +W C & {\bf Capitalize} first word in each sentence.\\ +W Q & Fill long lines.\\ +% +W W H & Strip certain {\bf headers} from body.\\ +% +W E l & Strip blank {\bf lines} from the beginning of the article.\\ +W E m & Replace blank lines with empty lines and remove {\bf multiple} +blank lines.\\ +W E t & Remove {\bf trailing} blank lines.\\ +W E a & Strip blank lines at the beginning and the end +(W E l, W E m and W E t).\\ +W E A & Strip {\bf all} blank lines.\\ +W E s & Strip leading blank lines from the article body.\\ +W E e & Strip trailing blank lines from the article body.\\ +% +W T u & (W T z) Display the article timestamp in GMT ({\bf UT, ZULU}).\\ +W T i & Display the article timestamp in {\bf ISO} 8601.\\ +W T l & Display the article timestamp in the {\bf local} timezone.\\ +W T s & Display according to `gnus-article-time-format'.\\ +W T e & Display the time {\bf elapsed} since it was sent.\\ +W T o & Display the {\bf original} timestamp.\\ +\end{keys}}} + +\newcommand{\HideHighlightArticle}{% +{\esamepage +\begin{keys}{W W C-c} +W W a & Hide {\bf all} unwanted parts. Calls W W h, W W s, W W C-c.\\ +W W h & Hide article {\bf headers}.\\ +W W b & Hide {\bf boring} headers.\\ +W W s & Hide {\bf signature}.\\ +W W l & Hide {\bf list} identifiers in subject-header.\\ +W W p & Hide {\bf PGP}-signatures.\\ +W W P & Hide {\bf PEM} (privacy enhanced messages).\\ +W W B & Hide banner specified by group parameter.\\ +W W c & Hide {\bf citation}.\\ +W W C-c & Hide {\bf citation} using a more intelligent algorithm.\\ +W W C & Hide cited text in articles that aren't roots.\\ +% +W e & {\bf Emphasize} article.\\ +% +W H a & Highlight {\bf all} parts. Calls W b, W H c, W H h, W H s.\\ +W H c & Highlight article {\bf citations}.\\ +W H h & Highlight article {\bf headers}.\\ +W H s & Highlight article {\bf signature}.\\ \end{keys} +For all hiding-commands: A positive prefix always hides, and a negative +prefix will show what was previously hidden. }} -\def\Hsubmap{ -\subsec{Help Commands} -\begin{keys}{H d} -H d & (C-c C-d) {\bf Describe} this group. [Prefix: re-read the description -from the server.]\\ -H f & Try to fetch the {\bf FAQ} for this group using ange-ftp.\\ -H h & Give a very short {\bf help} message.\\ -H i & (C-c C-i) Go to the Gnus online {\bf info}.\\ -H v & Display the Gnus {\bf version} number.\\ -\end{keys} -} - -\def\Msubmap{ -\subsec{Mark Articles} +\newcommand{\MIMEArticleMode}{% +{\esamepage +\begin{keys}{M-RET} +RET & (BUTTON-2) Toggle display of the MIME object.\\ +v & (M-RET) Prompt for a method and then view object using this method.\\ +o & Prompt for a filename and save the MIME object.\\ +c & {\bf Copy} the MIME object to a new buffer and display this buffer.\\ +t & View the MIME object as a different {\bf type}.\\ +$\mid$ & Pipe the MIME object to a process.\\ +\end{keys}}} + +%% end of article mode for reading .......................................... + +\newcommand{\MarkArticlesGeneral}{% formerly \Msubmap +{\esamepage \begin{keys}{M M-C-r} d & (M d, M r) Mark this article as read and move to the next one. [scope]\\ D & Mark this article as read and move to the previous one. [scope]\\ -u & (!, M !, M t) Tick this article (mark it as interesting) and move +! & (u, M !, M t) Tick this article (mark it as interesting) and move to the next one. [scope]\\ U & Tick this article and move to the previous one. [scope]\\ +M ? & (?) Mark this article as dormant (only followups are +interesting). [scope]\\ +M D & Show all {\bf dormant} articles (normally they are hidden unless they +have any followups).\\ +M M-D & Hide all {\bf dormant} articles.\\ +C-w & Mark all articles between point and mark as read.\\ M-u & (M SPC, M c) Clear all marks from this article and move to the next one. [scope]\\ M-U & Clear all marks from this article and move to the previous one. -[scope]\\ -M ? & (?) Mark this article as dormant (only followups are -interesting). [scope]\\ -M b & Set a {\bf bookmark} in this article.\\ +[scope]\\ +% M e & (E, M x) Mark this article as {\bf expirable}. [scope]\\ +% M k & (k) {\bf Kill} all articles with the same subject then select the -next one.\\ -M B & Remove the {\bf bookmark} from this article.\\ -M C & {\bf Catch-up} the articles that are not ticked.\\ -M D & Show all {\bf dormant} articles (normally they are hidden unless they -have any followups).\\ -M H & Catch-up (mark read) this group to point ({\bf here}).\\ +next unread one.\\ M K & (C-k) {\bf Kill} all articles with the same subject as this one.\\ -C-w & Mark all articles between point and mark as read.\\ -M S & (C-c M-C-s) {\bf Show} all expunged articles.\\ +% +M C & {\bf Catch-up} the articles that are not ticked and not dormant.\\ M C-c & {\bf Catch-up} all articles in this group.\\ +M H & Catch-up (mark read) this group to point (to-{\bf here}).\\ +% +M b & Set a {\bf bookmark} in this article.\\ +M B & Remove the {\bf bookmark} from this article.\\ +% M M-r & (x) Expunge all {\bf read} articles from this group.\\ -M M-D & Hide all {\bf dormant} articles.\\ M M-C-r & Expunge all articles having a given mark.\\ +M S & (C-c M-C-s) {\bf Show} all expunged articles.\\ +M M C-h & Displays some more keys doing ticking slightly differently.\\ \end{keys} +The variable `gnus-summary-goto-unread' controls what happens after a mark +has been set (C-x C-i g Setting Marks RET) +}} -\subsubsec{Mark Based on Score} -\begin{keys}{M s m} +\newcommand{\MarkByScore}{% +\begin{keys}{M V m} M V c & {\bf Clear} all marks from all high-scored articles. [score]\\ M V k & {\bf Kill} all low-scored articles. [score]\\ M V m & Mark all high-scored articles with a given {\bf mark}. [score]\\ M V u & Mark all high-scored articles as interesting (tick them). [score]\\ -\end{keys} +\end{keys}}} -\subsubsec{The Process Mark} -{\samepage -These commands set and remove the process mark \#. You only need to use +\newcommand{\ProcessMark}{% +{\esamepage +These commands set and remove the process mark (\#). You only need to use it if the set of articles you want to operate on is non-contiguous. Else use a numeric prefix.\\* \begin{keys}{M P R} -M P a & Mark {\bf all} articles (in series order).\\ M P p & (\#, M \#) Mark this article.\\ +M P u & (M-\#, M M-\#) \textbf{unmark} this article.\\ +M P b & Mark all articles in {\bf buffer}.\\ M P r & Mark all articles in the {\bf region}.\\ -M P s & Mark all articles in the current {\bf series}.\\ -M P t & Mark all articles in this (sub){\bf thread}.\\ -M P u & (M-\#, M M-\#) {\bf Unmark} this article.\\ M P R & Mark all articles matching a {\bf regexp}.\\ +M P t & Mark all articles in this (sub){\bf thread}.\\ +M P s & Mark all articles in the current {\bf series}.\\ M P S & Mark all {\bf series} that already contain a marked article.\\ -M P U & {\bf Unmark} all articles.\\ -\end{keys} -}} - -\def\Osubmap{ -\subsec{Output Articles} +M P a & Mark {\bf all} articles (in series order).\\ +M P U & \textbf{unmark} all articles.\\ +% +M P i & {\bf Invert} the list of process-marked articles.\\ +M P k & Push the current process-mark set onto stack and unmark +all articles.\\ +M P y & Pop process-mark set from stack and restore it.\\ +\end{keys}}} + +\newcommand{\Limiting}{% +{\esamepage +\begin{keys}{/M} +// & (/s) Limit the summary-buffer to articles matching {\bf subject}.\\ +/a & Limit the summary-buffer to articles matching {\bf author}.\\ +/x & Limit depending on ``extra'' headers.\\ +/u & (x) Limit to {\bf unread} articles. +[Prefix: also exclude ticked and dormant articles]\\ +/m & Limit to articles marked with specified {\bf mark}.\\ +/t & Ask for a number and exclude articles younger than that many days. +[Prefix: exclude older articles]\\ +/n & Limit to current article. [p/p]\\ +/w & Pop the previous limit off the stack and restore it. +[Prefix: pop all limits]\\ +/v & Limit to score. [score]\\ +/E & (M S) Include all expunged articles in the limit.\\ +/D & Include all dormant articles in the limit.\\ +/* & Include all cached articles in the limit.\\ +/d & Exclude all dormant articles from the limit.\\ +/M & Exclude all marked articles.\\ +/T & Include all articles from the current thread in the limit.\\ +/c & Exclude all dormant articles that have no children from the limit.\\ +/C & Mark all excluded unread articles as read. +[Prefix: also mark ticked and dormant articles]\\ +\end{keys}}} + +\newcommand{\OutputArticles}{% formerly \Osubmap +{\esamepage \begin{keys}{O m} +O o & (o, C-o) Save this article using the default article saver. [p/p]\\ +O b & Save this article's {\bf body} in plain file format [p/p]\\ O f & Save this article in plain {\bf file} format. [p/p]\\ +O F & like O f, but overwrite file's contents. [p/p]\\ O h & Save this article in {\bf mh} folder format. [p/p]\\ O m & Save this article in {\bf mail} format. [p/p]\\ -O o & (o, C-o) Save this article using the default article saver. [p/p]\\ -O p & ($\mid$) Pipe this article to a shell command. [p/p]\\ O r & Save this article in {\bf rmail} format. [p/p]\\ O v & Save this article in {\bf vm} format. [p/p]\\ -\end{keys} -} - -\def\Ssubmap{ -\subsec{Post, Followup, Reply, Forward, Cancel} -{\samepage -These commands put you in a separate post or mail buffer. After -editing the article, send it by pressing C-c C-c. If you are in a -foreign group and want to post the article using the foreign server, give -a prefix to C-c C-c.\\* +O p & ($\mid$) Pipe this article to a shell command. [p/p]\\ +\end{keys}}} + +\newcommand{\PostReplyetc}{% formerly \Ssubmap +{\esamepage +These commands put you in a separate news or mail buffer. See the section +about composing messages for more information. +%After +%editing the article, send it by pressing C-c C-c. If you are in a +%foreign group and want to post the article using the foreign server, give +%a prefix to C-c C-c.\\* \begin{keys}{S O m} -S b & {\bf Both} post a followup to this article, and send a reply.\\ -S c & (C) {\bf Cancel} this article (only works if it is your own).\\ +S p & (a) {\bf Post} an article to this group.\\ S f & (f) Post a {\bf followup} to this article.\\ +S F & (F) Post a {\bf followup} and include the original. [p/p]\\ +S o p & Forward this article as a {\bf post} to a newsgroup. +[Prefix: include all headers]\\ +S M-c & Send a complaint about excessive crossposting to the author of this +article. [p/p]\\ +% S m & (m) Send {\bf a} mail to some other person.\\ -S o m & (C-c C-f) Forward this article by {\bf mail} to a person.\\ -S o p & Forward this article as a {\bf post} to a newsgroup.\\ -S p & (a) {\bf Post} an article to this group.\\ S r & (r) Mail a {\bf reply} to the author of this article.\\ +S R & (R) Mail a {\bf reply} and include the original. [p/p]\\ +S w & Mail a {\bf wide} reply to this article.\\ +S W & Mail a {\bf wide} reply to this article.\\ +S o m & (C-c C-f) Forward this article by {\bf mail} to a person. +[Prefix: include all headers]\\ +S D b & Resend {\bf bounced} mail.\\ +S D r & {\bf Resend} mail to a different person.\\ +% +S n & Post a followup via {\bf news} even if you got the message +through mail.\\ +S N & Post a followup via {\bf news} and include the original mail. +[p/p]\\ +% +S c & (C) {\bf Cancel} this article (only works if it is your own).\\ S s & {\bf Supersede} this article with a new one (only for own -articles).\\ -S u & {\bf Uuencode} a file and post it as a series.\\ -S B & {\bf Both} post a followup, send a reply, and include the -original. [p/p]\\ -S F & (F) Post a {\bf followup} and include the original. [p/p]\\ +articles).\\ +% S O m & Digest these series and forward by {\bf mail}. [p/p]\\ S O p & Digest these series and forward as a {\bf post} to a newsgroup. [p/p]\\ -S R & (R) Mail a {\bf reply} and include the original. [p/p]\\ +% +S u & {\bf Uuencode} a file and post it as a series.\\ \end{keys} If you want to cancel or supersede an article you just posted (before it has appeared on the server), go to the *post-news* buffer, change `Message-ID' to `Cancel' or `Supersedes' and send it again with C-c C-c. }} -\def\Tsubmap{ -\subsec{Thread Commands} -\begin{keys}{T \#} +\newcommand{\Threading}{% formerly \Tsubmap +{\esamepage +\begin{keys}{T M-\#} T \# & Mark this thread with the process mark.\\ -T d & Move to the next article in this thread ({\bf down}). [distance]\\ +T M-\# & Remove process-marks from this thread.\\ +% +T t & Re-{\bf thread} the current article's thread.\\ +% movement +T n & (M-C-f) Go to the {\bf next} thread. [distance]\\ +T p & (M-C-b) Go to the {\bf previous} thread. [distance]\\ +T d & {\bf Descend} this thread. [distance]\\ +T u & Ascend this thread ({\bf up}-thread). [distance]\\ +T o & Go to the top of this thread.\\ +% +T s & {\bf Show} the thread hidden under this article.\\ T h & {\bf Hide} this (sub)thread.\\ +% T i & {\bf Increase} the score of this thread.\\ +T l & (M-C-l) {\bf Lower} the score of this thread.\\ +% T k & (M-C-k) {\bf Kill} the current (sub)thread. [Negative prefix: tick it, positive prefix: unmark it.]\\ -T l & (M-C-l) {\bf Lower} the score of this thread.\\ -T n & (M-C-f) Go to the {\bf next} thread. [distance]\\ -T p & (M-C-b) Go to the {\bf previous} thread. [distance]\\ -T s & {\bf Show} the thread hidden under this article.\\ -T u & Move to the previous article in this thread ({\bf up}). [distance]\\ +% T H & {\bf Hide} all threads.\\ T S & {\bf Show} all hidden threads.\\ T T & (M-C-t) {\bf Toggle} threading.\\ -\end{keys} -} +\end{keys}}} -\def\Vsubmap{ -\subsec{Score (Value) Commands} -{\samepage +\newcommand{\Scoring}{% formerly \Vsubmap +{\esamepage Read about Adaptive Scoring in the online info.\\* \begin{keys}{\bf A p m l} V a & {\bf Add} a new score entry, specifying all elements.\\ @@ -528,7 +786,6 @@ interface.\\ V S & Display the {\bf score} of this article.\\ \bf A p m l& Make a scoring entry based on this article.\\ \end{keys} - The four letters stand for:\\* \quad \B{A}ction: I)ncrease, L)ower;\\* \quad \B{p}art: a)utor (from), s)ubject, x)refs (cross-posting), d)ate, l)ines, @@ -548,51 +805,10 @@ t)emporary. \begin{keys}{C-c C-c} C-c C-c & Finish editing the score file.\\ C-c C-d & Insert the current {\bf date} as number of days.\\ -\end{keys} -}} - -\def\Wsubmap{ -\subsec{Wash the Article Buffer} -\begin{keys}{W C-c} -W b & Make Message-IDs and URLs in the article to mouse-clickable {\bf - buttons}.\\ -W c & Remove extra {\bf CRs} (^M) from the article.\\ -W f & Look for and display any X-{\bf Face} headers.\\ -W l & (w) Remove page breaks ({\bf^L}) from the article.\\ -W m & Toggle {\bf MIME} processing.\\ -W o & Treat {\bf overstrike} or underline (^H\_) in the article.\\ -W q & Treat {\bf quoted}-printable in the article.\\ -W r & (C-c C-r) Do a Caesar {\bf rotate} (rot13) on the article.\\ -W t & (t) {\bf Toggle} the displaying of all headers.\\ -v & Toggle permanent {\bf verbose} displaying of all headers.\\ -W w & Do word {\bf wrap} in the article.\\ -W T e & Convert the article timestamp to time {\bf elapsed} since sent.\\ -W T l & Convert the article timestamp to the {\bf local} timezone.\\ -W T u & (W T z) Convert the article timestamp to {\bf UTC} ({\bf Zulu}, -GMT).\\ -\end{keys} - -\subsubsec{Hide/Highlight Parts of the Article} -\begin{keys}{W W C-c} -W W a & Hide {\bf all} unwanted parts. Calls W W h, W W s, W W C-c.\\ -W W c & Hide article {\bf citation}.\\ -W W h & Hide article {\bf headers}.\\ -W W s & Hide article {\bf signature}.\\ -W W C-c & Hide article {\bf citation} using a more intelligent algorithm.\\ -%\end{keys} -% -%\subsubsec{Highlight Parts of the Article} -%\begin{keys}{W H A} -W H a & Highlight {\bf all} parts. Calls W b, W H c, W H h, W H s.\\ -W H c & Highlight article {\bf citation}.\\ -W H h & Highlight article {\bf headers}.\\ -W H s & Highlight article {\bf signature}.\\ -\end{keys} -} +\end{keys}}} -\def\Xsubmap{ -\subsec{Extract Series (Uudecode etc)} -{\samepage +\newcommand{\ExtractSeries}{% formerly \Xsubmap +{\esamepage Gnus recognizes if the current article is part of a series (multipart posting whose parts are identified by numbers in their subjects, e.g.{} 1/10\dots10/10) and processes the series accordingly. You can mark and @@ -621,44 +837,86 @@ C-c C-v C-v & (X v u) Uudecode and view these series. [p/p]\\ \end{keys} }} -\def\Zsubmap{ -\subsec{Exit the Current Group} +\newcommand{\ExitSummary}{% formerly \Zsubmap +{\esamepage \begin{keys}{Z G} +Z Z & (q, Z Q) Exit this group.\\ +Z E & (Q) {\bf Exit} without updating the group information.\\ +% Z c & (c) Mark all unticked articles as read ({\bf catch-up}) and exit.\\ -Z n & Mark all articles as read and go to the {\bf next} group.\\ Z C & Mark all articles as read ({\bf catch-up}) and exit.\\ -Z E & (Q) {\bf Exit} without updating the group information.\\ -Z G & (M-g) Check for new articles in this group ({\bf get}).\\ +% +Z n & Mark all articles as read and go to the {\bf next} group.\\ Z N & Exit and go to {\bf the} next group.\\ Z P & Exit and go to the {\bf previous} group.\\ +% +Z G & (M-g) Check for new articles in this group ({\bf get}).\\ Z R & Exit this group, and then enter it again ({\bf reenter}). [Prefix: select all articles, read and unread.]\\ -Z Z & (q, Z Q) Exit this group.\\ -\end{keys} -} +Z s & Update and save the dribble buffer. [Prefix: save .newsrc* as well]\\ +\end{keys}}} -\def\ArticleMode{ -\sec{Article Mode} -{\samepage -% All keys for Summary mode also work in Article mode. -The normal navigation keys work in Article mode. -Some additional keys are:\\* +\newcommand{\MsgCompositionGeneral}{% +Press C-c ? in the composition-buffer to get this information. +{\esamepage \begin{keys}{C-c C-m} -RET & (middle mouse button) Activate the button at point to follow -an URL or Message-ID.\\ -TAB & Move the point to the next button.\\ -h & (s) Go to the {\bf header} line of the article in the {\bf -summary} buffer.\\ -C-c ^ & Get the article with the Message-ID near point.\\ -C-c C-m & {\bf Mail} reply to the address near point (prefix: include the -original).\\ -\end{keys} -}} - -\def\ServerMode{ -\sec{Server Mode} -{\samepage -To enter this mode, press `^' while in Group mode.\\* +% sending +C-c C-c & Send message and exit. [Prefix: send via foreign server]\\ +C-c C-s & Send message. [Prefix: send via foreign server]\\ +C-c C-d & Don't send message (save as \textbf{draft}).\\ +C-c C-k & \textbf{Kill} message-buffer.\\ +C-c C-m & {\bf Mail} reply to the address near point. +[Prefix: include the original]\\ +% modify headers/body +C-c C-t & Paste the recipient's address into \textbf{To:}-field.\\ +C-c C-n & Insert a \textbf{Newsgroups:}-header.\\ +C-c C-o & Sort headers.\\ +C-c C-e & \textbf{Elide} region.\\ +C-c C-v & Kill everything outside region.\\ +C-c C-r & Do a \textbf{Rot-13} on the body.\\ +C-c C-w & Insert signature (from `message-signature-file').\\ +C-c C-z & Kill everything up to signature.\\ +C-c C-y & \textbf{Yank} original message.\\ +C-c C-q & Fill the yanked message.\\ +\end{keys}}} + +\newcommand{\MsgCompositionMovementArticle}{% +The following functions create the header-field if necessary. +{\esamepage +\begin{keys}{C-c C-f C-u} +C-c TAB & Move to \textbf{signature}.\\ +C-c C-b & Move to \textbf{body}.\\ +C-c C-f C-t & Move to \textbf{To:}.\\ +C-c C-f C-c & Move to \textbf{Cc:}.\\ +C-c C-f C-b & Move to \textbf{Bcc:}.\\ +C-c C-f C-w & Move to \textbf{Fcc:}.\\ +C-c C-f C-s & Move to \textbf{Subject:}.\\ +C-c C-f C-r & Move to \textbf{Reply-To:}.\\ +C-c C-f C-f & Move to \textbf{Followup-To:}.\\ +C-c C-f C-n & Move to \textbf{Newsgroups:}.\\ +C-c C-f C-u & Move to \textbf{Summary:}.\\ +C-c C-f C-k & Move to \textbf{Keywords:}.\\ +C-c C-f C-d & Move to \textbf{Distribution:}.\\ +\end{keys}}} + +\newcommand{\MsgCompositionMML}{% +{\esamepage +\begin{keys}{M-m P} +M-m f & (C-c C-a) Attach \textbf{file}.\\ +M-m b & Attach contents of \textbf{buffer}.\\ +M-m e & Attach \textbf{external} file (ftp..).\\ +M-m P & Create MIME-\textbf{preview} (new buffer).\\ +M-m v & \textbf{Validate} article.\\ +M-m p & Insert \textbf{part}.\\ +M-m m & Insert \textbf{multi}-part.\\ +M-m q & \textbf{Quote} region.\\ +% TODO: narrow headers (M-m n) ? +\end{keys}}} + +%% TODO: +\newcommand{\ServerMode}{% +{\esamepage +To enter this mode, press `\^' while in Group mode.\\* \begin{keys}{SPC} SPC & (RET) Browse this server.\\ a & {\bf Add} a new server.\\ @@ -667,13 +925,13 @@ e & {\bf Edit} a server.\\ k & {\bf Kill} this server. [scope]\\ l & {\bf List} all servers.\\ q & Return to the group buffer ({\bf quit}).\\ +s & Request that the server scan its sources for new articles.\\ +g & Request that the server regenerate its data.\\ y & {\bf Yank} the previously killed server.\\ -\end{keys} -}} +\end{keys}}} -\def\BrowseServer{ -\sec{Browse Server Mode} -{\samepage +\newcommand{\BrowseServer}{% +{\esamepage To enter this mode, press `B' while in Group mode.\\* \begin{keys}{RET} RET & Enter the current group.\\ @@ -683,5 +941,4 @@ n & Go to the {\bf next} group. [distance]\\ p & Go to the {\bf previous} group. [distance]\\ q & (l) {\bf Quit} browse mode.\\ u & Subscribe to the current group. [scope]\\ -\end{keys} -}} +\end{keys}}} diff --git a/texi/refcard.tex b/texi/refcard.tex index a701cd4..f5ce217 100644 --- a/texi/refcard.tex +++ b/texi/refcard.tex @@ -1,65 +1,167 @@ -% Reference Card for (ding) Gnus, 3 twocolumn pages. -% To be processed with latex 2.09 +% -*- latex -*- +% Reference Card for (ding) Gnus: to be processed with LaTeX2e +\documentclass{article} \def\Guide{Card}\def\guide{card} \def\logoscale{0.25} -\def\sec{\section*} -\def\subsec{\subsection*} -\def\subsubsec{\subsubsection*} -\documentstyle{article} \textwidth 7.26in \textheight 10in \topmargin -1.0in % the same settings work for A4, although there is a bit of space at the % top and bottom of the page. \oddsidemargin -0.5in \evensidemargin -0.5in + +% TODO: +% - how can you get 'tabular' to wrap around pages ? +% - some things might not be updated: scoring and server modes, maybe more + \begin{document} -\twocolumn\scriptsize\pagestyle{empty} +\newlength{\logowidth} +\setlength{\logowidth}{6.861in} +\newlength{\logoheight} +\setlength{\logoheight}{7.013in} + +\def\progver{5.8}\def\refver{5.8} % program and refcard versions +\def\date{26th of March 2000} +\def\author{Vladimir Alexiev $<$vladimir@cs.ualberta.ca$>$} +\raggedbottom\raggedright +% +% 2000-03-26 Felix Natter : +% refcard updated for Gnus 5.8.3: please send corrections or suggestions +% to the above email-address + +% changes since 2000-03-26: +% - Create/Edit Foreign Groups: remove S b and S B (not there in 5.8.3) +% - Send/Reply etc.: remove w and W (the only bindings are S w and S W) +% Mon Apr 3 18:41:09 2000: +% - added C-c C-n and C-c C-t (Article) +% - C-c C-a as alias for M-m f (Article) + some other M-m *-bindings +% - added section for ``jumping'' in article-mode +% - now there's a difference between ``reading'' and ``composition'' +% article-modes + +\twocolumn +%\tiny +\scriptsize +\pagestyle{plain} + +% this contains a set of commands containing the actual key-sequences +% (and some explanations). \input{gnusref} -% page 1, left column \Title \par -\vspace{0.5\baselineskip} \Logo{refcard} -\vspace*{\fill} -\GroupLevels -\GroupMode -\pagebreak - -% page 1, right column \Notes -\vspace*{\fill} -\GroupCommands -\pagebreak - -% page 2, left column -\SummaryMode -\Asubmap -\Bsubmap -\Gsubmap -\Hsubmap -\Tsubmap -\pagebreak - -% page 2, right column -\Msubmap -\Marks -\pagebreak - -% page 3 -\Osubmap -\Ssubmap -\Xsubmap -\Vsubmap -\SortSummary -\Wsubmap -\Zsubmap -\ArticleMode +% +% +\section*{Group-Mode} +\GroupModeGeneral + \subsection*{Group Subscribedness-Levels} + \GroupLevels + \subsection*{List Groups} + \ListGroups + \subsection*{Create/Edit Foreign Groups} + \CreateEditGroups + \subsection*{Unsubscribe, Kill and Yank Groups} + \SubscribeKillYankGroups + \subsection*{Mark Groups} + \MarkGroups +% topics in group-mode + \subsection*{Group Topics} + \GroupTopicsGeneral + \subsubsection*{Topic Sorting} + \TopicSorting +% summary-mode +\section*{Summary-Mode} +\SummaryModeGeneral + \subsection*{Select Articles} + \SelectArticles +% + \subsection*{Threading} + \Threading +% + \subsection*{Limiting} + \Limiting + \subsection*{Sort the Summary-Buffer} + \SortSummary + \subsection*{Score (Value) Commands} + \Scoring +% + \subsection*{MIME operations from the Summary-Buffer} + \MIMESummary + \subsection*{Extract Series (Uudecode etc)} + \ExtractSeries + \subsection*{Output Articles} + \OutputArticles +% + \subsection*{Post, Followup, Reply, Forward, Cancel} + \PostReplyetc + \subsection*{Message-Composition} + \MsgCompositionGeneral + \subsubsection*{Jumping in message-buffer} + \MsgCompositionMovementArticle + \subsubsection*{Attachments/MML} + \MsgCompositionMML +% marking articles + \subsection*{Mark Articles} + \MarkArticlesGeneral + \subsubsection*{Mark Based on Score} + \MarkByScore + \subsubsection*{The Process Mark} + \ProcessMark + \subsubsection*{Mark Indication-Characters} + \MarkCharacters +% + \subsection*{Mail-Group Commands} + \MailGroups + \subsection*{Draft-Group Commands} + \DraftGroup +% exiting + \subsection*{Exit the Summary-Buffer} + \ExitSummary +% +% +\section*{Article Mode (reading)} +\ArticleModeGeneral + \subsection*{Wash the Article-Buffer} + \WashArticle + \subsection*{Hide/Highlight Parts of the Article} + \HideHighlightArticle + \subsection*{MIME operations from the Article-Buffer (reading)} + \MIMEArticleMode +% +% +\section*{Server Mode} \ServerMode - -% page 4 +% +% +\section*{Browse Server Mode} \BrowseServer -\pagebreak -\onecolumn + +%\pagebreak \vspace*{\fill} -\CopyRight +\Copyright \end{document} + +% \SummaryMode +% \Gsubmap +% \Bsubmap +% \Dsubmap +% \Tsubmap +% %\pagebreak +% % page 2, right column +% \Msubmap +% \Marks +% %\pagebreak +% \Limiting +% % page 3 +% \Osubmap +% \Ssubmap +% \Xsubmap +% \Vsubmap +% \SortSummary +% \Zsubmap +% \ArticleMode +% \ServerMode +% % page 4 +% \BrowseServer +