Index: gnus/ChangeLog diff -u gnus/ChangeLog:7.91 gnus/ChangeLog:7.97 --- gnus/ChangeLog:7.91 Wed Apr 19 00:21:56 2006 +++ gnus/ChangeLog Wed Apr 11 15:19:30 2007 @@ -1,3 +1,23 @@ +2007-04-11 Didier Verna + + * GNUS-NEWS: Generated. + +2007-04-01 Reiner Steib + + * GNUS-NEWS: Generated. + +2007-03-23 Katsumi Yamaoka + + * README: Bump ngnus version. + +2006-12-26 Reiner Steib + + * GNUS-NEWS: Generated. + +2006-10-09 Romain Francoise + + * todo: Fix some typos. + 2006-04-19 Reiner Steib * make.bat: Use "echo *" to clarify the output. @@ -382,7 +402,7 @@ * GNUS-NEWS: Added Article Buttons. Added Upgrading (from Simon Josefsson). Add gnus-mime-delete-part, markup fixes and some other corrections. Mention Gnus FAQ. - + 2003-04-30 Jesper Harder @@ -434,19 +454,19 @@ * GNUS-NEWS: Add IDNA. Add TLS. Fix USEFOR reference. -2003-03-22 Frank Schmitt - +2003-03-22 Frank Schmitt + * make.bat: Redone from scratch; supports both Emacs and XEmacs now; correctly generate gnus-load.el; check for errors; use makeinfo if available, infohack.el if it isn't; be less verbose when copying files; copy files from etc/gnus and etc/smilies, too -2003-03-22 Frank Schmitt - +2003-03-22 Frank Schmitt + * make-x.bat: Removed, make.bat does its job now. -2003-03-22 Frank Schmitt - +2003-03-22 Frank Schmitt + * etc/gnus-tut.txt: Include Gnus FAQ from http://my.gnus.org. 2003-02-19 Reiner Steib @@ -522,9 +542,9 @@ 2002-02-22 Steve Youngs * aclocal.m4 (AC_PATH_LISPDIR): Default to - .../site-packages/lisp/gnus for XEmacs. + .../site-packages/lisp/gnus for XEmacs. (AC_PATH_ETCDIR): Default to .../site-packages/etc/gnus for - XEmacs. + XEmacs. 2002-02-01 ShengHuo ZHU @@ -534,7 +554,7 @@ * etc/gnus/oort.xface (X-Face): Oort X-Face from Raymond Scholz . - + 2002-01-02 ShengHuo ZHU * etc/gnus/describe-group.xpm: Set pixels of first line to @@ -591,14 +611,14 @@ Contributed by Kim F. Storm . 2001-10-19 Kai Gro,A_(Bjohann - From Frank Schmitt . - + From Frank Schmitt . + * make-x.bat: Use correct directory structure for XEmacs on Windows. 2001-10-06 08:00:00 ShengHuo ZHU * Makefile.in (uninstall): Add. - + * etc/Makefile.in (uninstall): Add. 2001-09-27 14:00:00 ShengHuo ZHU @@ -695,6 +715,7 @@ ;; Local Variables: ;; coding: iso-2022-7bit +;; fill-column: 79 ;; End: ;;; arch-tag: 60301ba8-b152-41b3-8fb2-173bba77f2a8 Index: gnus/GNUS-NEWS diff -u gnus/GNUS-NEWS:7.47 gnus/GNUS-NEWS:7.52 --- gnus/GNUS-NEWS:7.47 Fri Mar 31 21:33:09 2006 +++ gnus/GNUS-NEWS Wed Apr 11 15:19:31 2007 @@ -1,7 +1,8 @@ GNUS NEWS -- history of user-visible changes. + Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, - 2006 Free Software Foundation, Inc. -See the end for copying conditions. + 2006, 2007 Free Software Foundation, Inc. +See the end of the file for license conditions. Please send Gnus bug reports to bugs@gnus.org. For older news, see Gnus info node "New Features". @@ -61,6 +62,10 @@ (`gnus-summary-limit-to-replied') and `/ R' (`gnus-summary-limit-to-recipient'). *Note Limiting::. +** You can now fetch all ticked articles from the server using `Y t' +(`gnus-summary-insert-ticked-articles'). *Note Summary Generation +Commands::. + ** Gnus supports a new sort command in the Summary buffer: `C-c C-s C-t' (`gnus-summary-sort-by-recipient'). *Note Summary Sorting::. @@ -97,6 +102,7 @@ ** The option `mm-fill-flowed' can be used to disable treatment of format=flowed messages. Also, flowed text is disabled when sending inline PGP signed messages. *Note Flowed text: (emacs-mime)Flowed text. +(New in Gnus 5.10.7) @@ -118,6 +124,14 @@ use `(setq message-hidden-headers nil)'. *Note Message Headers: (message)Message Headers. +** You can highlight different levels of citations like in the article +buffer. See `gnus-message-highlight-citation'. + +** `auto-fill-mode' is enabled by default in Message mode. See +`message-fill-column'. *Note Message Headers: (message)Various Message +Variables. + + * Changes in back ends @@ -147,6 +161,14 @@ ** The nnml back end allows other compression programs beside `gzip' for compressed message files. *Note Mail Spool::. +** The nnml back end supports group compaction. + +This feature, accessible via the functions `gnus-group-compact-group' +(`G z' in the group buffer) and `gnus-server-compact-server' (`z' in the +server buffer) renumbers all articles in a group, starting from 1 and +removing gaps. As a consequence, you get a correct total article count +(until messages are deleted again). + * Appearance @@ -180,20 +202,24 @@ * For older news, see Gnus info node "New Features". ---------------------------------------------------------------------- -Copyright information: + +This file is part of GNU Emacs. -Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, - 2006 Free Software Foundation, Inc. +GNU Emacs is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Emacs is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Emacs; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. - Permission is granted to anyone to make or distribute verbatim copies - of this document as received, in any medium, provided that the - copyright notice and this permission notice are preserved, - thus giving the recipient permission to redistribute in turn. - - Permission is granted to distribute modified versions - of this document, or of portions of it, - under the above conditions, provided also that they - carry prominent notices stating who last changed them. Local variables: mode: outline Index: gnus/README diff -u gnus/README:7.6 gnus/README:7.7 --- gnus/README:7.6 Tue Apr 11 16:17:52 2006 +++ gnus/README Fri Mar 23 11:56:32 2007 @@ -19,7 +19,7 @@ Then you have to tell Emacs where Gnus is. You might put something like - (setq load-path (cons (expand-file-name "~/ngnus-0.4/lisp") load-path)) + (setq load-path (cons (expand-file-name "~/ngnus-0.6/lisp") load-path)) (require 'gnus-load) in your .emacs file, or wherever you keep such things. @@ -28,8 +28,8 @@ (require 'info) (if (featurep 'xemacs) - (add-to-list 'Info-directory-list "~/ngnus-0.4/texi/") - (add-to-list 'Info-default-directory-list "~/ngnus-0.4/texi/")) + (add-to-list 'Info-directory-list "~/ngnus-0.6/texi/") + (add-to-list 'Info-default-directory-list "~/ngnus-0.6/texi/")) No Gnus does absolutely not work with anything older than Emacs 21.1 or XEmacs 21.4. Index: gnus/todo diff -u gnus/todo:7.4 gnus/todo:7.5 --- gnus/todo:7.4 Wed Mar 29 17:56:06 2006 +++ gnus/todo Mon Oct 9 21:12:13 2006 @@ -230,7 +230,7 @@ so one could do things like limiting on, to do whatever one likes with these articles. -* A possibility to add notes to messages. If thouse could include links +* A possibility to add notes to messages. If those could include links to other (stored) messages this would be very practical. * Allow article editing in groups which do not support it, but @@ -342,7 +342,7 @@ * Allow a user-defined picons directory for personal groups. * Annotations as discussed last autumn. Be able to make comments to - articles for all bakends. The comments amybe should go into a + articles for all backends. The comments maybe should go into a seperate "backend", like nndraft. * Catchup on a topic and all its subtopics. I.e. do "c y" when on a Index: gnus/contrib/ChangeLog diff -u gnus/contrib/ChangeLog:7.23 gnus/contrib/ChangeLog:7.46 --- gnus/contrib/ChangeLog:7.23 Tue Apr 11 18:22:01 2006 +++ gnus/contrib/ChangeLog Tue Apr 10 01:44:06 2007 @@ -1,4 +1,121 @@ -2006-04-11 Sascha Wilde (tiny patch) +2007-04-06 Chong Yidong + + * sendmail.el (mail-text, mail-mode): Revert extant pieces of + 1995-05-19 doc changes. + +2007-03-26 Andreas Seltenreich + + * nnir.el (gnus-group-make-nnir-group): Put a message-unique-id into + names of ephemeral groups to avoid gnus-backlog related caching + problems on repeated searches. + +2007-03-24 Reiner Steib + + * smtpmail.el: Signal an error when used with Emacs 22+ or XEmacs. + (smtpmail-send-it): Remove NOMODIFY argument of + `set-buffer-file-coding-system' for compatibility with Emacs 21. + +2007-02-20 Juanma Barranquero + + * smtpmail.el (smtpmail-smtp-service, smtpmail-queue-index-file): + Fix typos in docstrings. + (smtpmail-local-domain, smtpmail-queue-mail): Doc fixes. + +2007-01-06 Simon Josefsson + + * README: Mention that smtpmail.el doesn't work on XEmacs. + +2006-11-24 Eli Zaretskii + + * smtpmail.el (smtpmail-send-it): + Copy buffer-file-coding-system from the mail buffer. Possibly add a + MIME header for the message encoding. + Bind coding-system-for-write around the call to mail-do-fcc. + Use smtpmail-code-conv-from to encode queued mail messages. + +2006-10-02 MIYOSHI Masanori (tiny change) + + * smtpmail.el (smtpmail-try-auth-methods): Fix typo in + 2006-09-28 commit. + +2006-09-28 Osamu Yamane (tiny change) + + * smtpmail.el (smtpmail-try-auth-methods): Do not break long + lines in base64-encoded authentication response. + +2006-09-04 Chong Yidong + + * sendmail.el (sendmail-program): Moved here from pathe.el. + +2006-08-09 Katsumi Yamaoka + + * compface.el (uncompface): Use binary rather than raw-text-unix. + +2006-08-09 Katsumi Yamaoka + + * compface.el (uncompface): Make sure the eol conversion doesn't take + place when communicating with the external programs. Reported by + ARISAWA Akihiro . + +2006-07-17 Sascha Wilde + + * nnir.el: Removed support for non free backends glimpse and excite. + Changed and updated copyright to Free Software Foundation. Moved all + authors to head. + +2006-06-15 Chong Yidong + + * sendmail.el (mail-send): Search explicitly for + mail-header-separator when checking for corrupted header lines. + +2006-06-10 Andreas Seltenreich + + * nnir.el (nnir-read-server-parm): Do not unconditionally fall back to + global variables if nnir-mail-backend is nil. + (nnir-retrieve-headers): Error on void novitem. It would just result + in a more obscure error later. + +2006-06-09 Andreas Seltenreich + + * nnir.el (nnir-group-server): DTRT when called on native groups. The + macro is called on groups without checking for foreigness, although the + docstring stated it was only for foreign ones. + +2006-06-08 Andreas Seltenreich + + * nnir.el (nnir-retrieve-headers): Bind gnus-override-method before + calling gnus-retrieve-headers. If we hit a group that isn't in + gnus-newsrc-hashtb, gnus-find-method-for-group invented a new select + method with empty parameters, possibly corrupting + gnus-server-method-cache on the next call to gnus-method-to-server. + +2006-06-01 Andreas Seltenreich + + * nnir.el (nnir-retrieve-headers): Revert last change; we might as well + see message-ids instead of article numbers. + (nnir-request-article): Actually check for message-ids. + +2006-06-01 Reiner Steib + + * nnir.el (nnir-run-swish++): Compressed files might not have .gz + extension. + +2006-05-31 Andreas Seltenreich + + * nnir.el (nnir-retrieve-headers, nnir-request-article): Move check for + message-id request. + +2006-05-30 Andreas Seltenreich + + * nnir.el (nnir-retrieve-headers): Return correct article numbers when + less than the full range is selected. + +2006-05-12 Simon Josefsson + + * nnir.el: Compare servers using gnus-server-equal, otherwise + string methods in nnir-mail-backend won't work. + +2006-04-11 Sascha Wilde * nnir.el (nnir-run-swish++): Allow matching gzipped files. @@ -334,6 +451,7 @@ ;; Local Variables: ;; coding: iso-2022-7bit +;; fill-column: 79 ;; End: ;;; arch-tag: 105a2bf0-3f04-4ba6-a991-619aece2c04f Index: gnus/contrib/README diff -u gnus/contrib/README:7.7 gnus/contrib/README:7.8 --- gnus/contrib/README:7.7 Sat Feb 11 23:25:03 2006 +++ gnus/contrib/README Mon Jan 8 09:53:37 2007 @@ -46,7 +46,8 @@ Copies of the corresponding files from the Emacs lisp/mail/ directory, to provide features (occasionally) needed by Gnus which may not be provided by the versions of these files in older Emacs - distributions. + distributions. XEmacs users should NOT use this, since it doesn't + work. See the XEmacs mail-lib module instead. ssl.el Index: gnus/contrib/compface.el diff -u gnus/contrib/compface.el:7.4 gnus/contrib/compface.el:7.6 --- gnus/contrib/compface.el:7.4 Wed Jul 6 08:42:01 2005 +++ gnus/contrib/compface.el Thu Aug 10 00:07:20 2006 @@ -81,24 +81,28 @@ ((eq uncompface-use-external t) (with-temp-buffer (insert face) - (and (eq 0 (apply 'call-process-region (point-min) (point-max) - "uncompface" - 'delete '(t nil) nil)) - (progn - (goto-char (point-min)) - (insert "/* Width=48, Height=48 */\n") - ;; I just can't get "icontopbm" to work correctly on its - ;; own in XEmacs. And Emacs doesn't understand un-raw pbm - ;; files. - (if (not (featurep 'xemacs)) - (eq 0 (call-process-region (point-min) (point-max) - "icontopbm" - 'delete '(t nil))) - (shell-command-on-region (point-min) (point-max) - "icontopbm | pnmnoraw" - (current-buffer) t) - t)) - (buffer-string)))) + (let ((coding-system-for-read 'raw-text) + ;; At least "icontopbm" doesn't work with Windows because + ;; the line-break code is converted into CRLF by default. + (coding-system-for-write 'binary)) + (and (eq 0 (apply 'call-process-region (point-min) (point-max) + "uncompface" + 'delete '(t nil) nil)) + (progn + (goto-char (point-min)) + (insert "/* Width=48, Height=48 */\n") + ;; I just can't get "icontopbm" to work correctly on its + ;; own in XEmacs. And Emacs doesn't understand un-raw pbm + ;; files. + (if (not (featurep 'xemacs)) + (eq 0 (call-process-region (point-min) (point-max) + "icontopbm" + 'delete '(t nil))) + (shell-command-on-region (point-min) (point-max) + "icontopbm | pnmnoraw" + (current-buffer) t) + t)) + (buffer-string))))) (t (let* ((gc-cons-threshold (eval '(lsh -1 -1))) (start (current-time))) Index: gnus/contrib/nnir.el diff -u gnus/contrib/nnir.el:7.10 gnus/contrib/nnir.el:7.20 --- gnus/contrib/nnir.el:7.10 Tue Apr 11 18:22:01 2006 +++ gnus/contrib/nnir.el Mon Mar 26 19:25:12 2007 @@ -1,10 +1,16 @@ ;;; nnir.el --- search mail with various search engines -*- coding: iso-8859-1 -*- -;; Copyright (C) 1998 Kai Großjohann + +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006 Free Software Foundation, Inc. ;; Author: Kai Großjohann -;; Keywords: news, mail, searching, ir, glimpse, wais, hyrex +;; Swish-e and Swish++ backends by: +;; Christoph Conrad . +;; Imap backend by: Simon Josefsson . + +;; Keywords: news mail searching ir -;; This file is not part of GNU Emacs. +;; This file is part of GNU Emacs. ;; This is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by @@ -31,7 +37,7 @@ ;; with your ideas. ;; What does it do? Well, it allows you to index your mail using some -;; search engine (freeWAIS-sf, Glimpse and others -- see later), +;; search engine (freeWAIS-sf, swish-e and others -- see later), ;; then type `G G' in the Group buffer and issue a query to the search ;; engine. You will then get a buffer which shows all articles ;; matching the query, sorted by Retrieval Status Value (score). @@ -55,7 +61,6 @@ ;; others doesn't support nnfolder. ;; * It can only search the mail backend's which are supported by one ;; search engine, because of different query languages. -;; * There are restrictions to the Glimpse setup. ;; * There are restrictions to the Wais setup. ;; * There are restrictions to the imap setup. ;; * gnus-summary-nnir-goto-thread: Fetches whole group first, before @@ -156,18 +161,7 @@ ;; this prefix. It defaults to `$HOME/Mail/' (note the trailing ;; slash). -;; 2. Glimpse -;; -;; The code expects you to have one Glimpse index which contains all -;; your mail files. The Lisp setup involves setting the -;; `nnir-glimpse-*' variables. The most difficult to understand -;; variable is probably `nnir-glimpse-remove-prefix', it corresponds -;; to `nnir-wais-remove-prefix', see above. The `nnir-glimpse-home' -;; variable should be set to the value of the `-H' option which allows -;; one to search this Glimpse index. I have indexed my whole home -;; directory with Glimpse, so I assume a default of `$HOME'. - -;; 3. Namazu +;; 2. Namazu ;; ;; The Namazu backend requires you to have one directory containing all ;; index files, this is controlled by the `nnir-namazu-index-directory' @@ -211,7 +205,7 @@ ;; For maximum searching efficiency I have a cron job set to run this ;; command every four hours. -;; 4. HyREX +;; 3. HyREX ;; ;; The HyREX backend requires you to have one directory from where all ;; your relative paths are to, if you use them. This directory must be @@ -242,7 +236,7 @@ ;; the second element should be the article number, and the third ;; element should be the Retrieval Status Value (RSV) as returned from ;; the search engine. An RSV is the score assigned to the document by -;; the search engine. For Boolean search engines like Glimpse, the +;; the search engine. For Boolean search engines, the ;; RSV is always 1000 (or 1 or 100, or whatever you like). ;; The sorting order of the articles in the summary buffer created by @@ -261,8 +255,6 @@ ;; Todo, or future ideas: -;; * Make it so that Glimpse can also be called without `-F'. -;; ;; * It should be possible to restrict search to certain groups. ;; ;; * There is currently no error checking. @@ -302,6 +294,7 @@ (require 'nnoo) (require 'gnus-group) (require 'gnus-sum) +(require 'message) (eval-and-compile (require 'gnus-util)) (eval-when-compile @@ -330,12 +323,8 @@ ;;; Developer Extension Variable: (defvar nnir-engines - `((glimpse nnir-run-glimpse - ((group . "Group spec: "))) - (wais nnir-run-waissearch + `((wais nnir-run-waissearch ()) - (excite nnir-run-excite-search - ()) (imap nnir-run-imap ((criteria "Search in: " ; Prompt @@ -376,7 +365,7 @@ ;;; User Customizable Variables: (defgroup nnir nil - "Search nnmh and nnml groups in Gnus with Glimpse, freeWAIS-sf, or EWS." + "Search nnmh and nnml groups in Gnus with swish-e, freeWAIS-sf, or EWS." :group 'gnus) ;; Mail backend. @@ -407,47 +396,6 @@ :type '(sexp) :group 'nnir) -;; Glimpse engine. - -(defcustom nnir-glimpse-program "glimpse" - "*Name of Glimpse executable." - :type '(string) - :group 'nnir) - -(defcustom nnir-glimpse-home (getenv "HOME") - "*Value of `-H' glimpse option. -`~' and environment variables must be expanded, see the functions -`expand-file-name' and `substitute-in-file-name'." - :type '(directory) - :group 'nnir) - -(defcustom nnir-glimpse-remove-prefix (concat (getenv "HOME") "/Mail/") - "*The prefix to remove from each file name returned by Glimpse -in order to get a group name (albeit with / instead of .). This is a -regular expression. - -For example, suppose that Glimpse returns file names such as -\"/home/john/Mail/mail/misc/42\". For this example, use the following -setting: (setq nnir-glimpse-remove-prefix \"/home/john/Mail/\") -Note the trailing slash. Removing this prefix gives \"mail/misc/42\". -`nnir' knows to remove the \"/42\" and to replace \"/\" with \".\" to -arrive at the correct group name, \"mail.misc\"." - :type '(regexp) - :group 'nnir) - -(defcustom nnir-glimpse-additional-switches '("-i") - "*A list of strings, to be given as additional arguments to glimpse. -The switches `-H', `-W', `-l' and `-y' are always used -- calling -glimpse without them does not make sense in our situation. -Suggested elements to put here are `-i' and `-w'. - -Note that this should be a list. Ie, do NOT use the following: - (setq nnir-glimpse-additional-switches \"-i -w\") ; wrong! -Instead, use this: - (setq nnir-glimpse-additional-switches '(\"-i\" \"-w\"))" - :type '(repeat (string)) - :group 'nnir) - ;; freeWAIS-sf. (defcustom nnir-wais-program "waissearch" @@ -470,37 +418,15 @@ in order to get a group name (albeit with / instead of .). This is a regular expression. -This variable is similar to `nnir-glimpse-remove-prefix', only for Wais, -not Glimpse." - :type '(regexp) - :group 'nnir) - -;; EWS (Excite for Web Servers) engine. - -(defcustom nnir-excite-aquery-program "aquery.pl" - "*Name of the EWS query program. Should be `aquery.pl' or a path to same." - :type '(string) - :group 'nnir) - -(defcustom nnir-excite-collection "Mail" - "*Name of the EWS collection to search." - :type '(string) - :group 'nnir) - -(defcustom nnir-excite-remove-prefix (concat (getenv "HOME") "/Mail/") - "*The prefix to remove from each file name returned by EWS -in order to get a group name (albeit with / instead of .). This is a -regular expression. - -This variable is very similar to `nnir-glimpse-remove-prefix', except -that it is for EWS, not Glimpse." +For example, suppose that Wais returns file names such as +\"/home/john/Mail/mail/misc/42\". For this example, use the following +setting: (setq nnir-wais-remove-prefix \"/home/john/Mail/\") +Note the trailing slash. Removing this prefix gives \"mail/misc/42\". +`nnir' knows to remove the \"/42\" and to replace \"/\" with \".\" to +arrive at the correct group name, \"mail.misc\"." :type '(regexp) :group 'nnir) -;; Swish++. Next three variables Copyright (C) 2000, 2001 Christoph -;; Conrad . -;; Swish++ home page: http://homepage.mac.com/pauljlucas/software/swish/ - (defcustom nnir-swish++-configuration-file (expand-file-name "~/Mail/swish++.conf") "*Configuration file for swish++." @@ -527,8 +453,8 @@ in order to get a group name (albeit with / instead of .). This is a regular expression. -This variable is very similar to `nnir-glimpse-remove-prefix', except -that it is for swish++, not Glimpse." +This variable is very similar to `nnir-wais-remove-prefix', except +that it is for swish++, not Wais." :type '(regexp) :group 'nnir) @@ -537,7 +463,6 @@ ;; New version: http://www.boe.es/swish-e ;; Variables `nnir-swish-e-index-file', `nnir-swish-e-program' and ;; `nnir-swish-e-additional-switches' -;; Copyright (C) 2000 Christoph Conrad . (make-obsolete-variable 'nnir-swish-e-index-file 'nnir-swish-e-index-files) @@ -580,8 +505,8 @@ in order to get a group name (albeit with / instead of .). This is a regular expression. -This variable is very similar to `nnir-glimpse-remove-prefix', except -that it is for swish-e, not Glimpse. +This variable is very similar to `nnir-wais-remove-prefix', except +that it is for swish-e, not Wais. This could be a server parameter." :type '(regexp) @@ -649,8 +574,8 @@ "*The prefix to remove from each file name returned by Namazu in order to get a group name (albeit with / instead of .). -This variable is very similar to `nnir-glimpse-remove-prefix', except -that it is for Namazu, not Glimpse." +This variable is very similar to `nnir-wais-remove-prefix', except +that it is for Namazu, not Wais." :type '(directory) :group 'nnir) @@ -686,6 +611,7 @@ (if extra-parms (setq parms (nnir-read-parms query)) (setq parms (list (cons 'query query)))) + (add-to-list 'parms (cons 'unique-id (message-unique-id)) t) (gnus-group-read-ephemeral-group (concat "nnir:" (prin1-to-string parms)) '(nnir "") t (cons (current-buffer) @@ -704,16 +630,17 @@ (add-hook 'gnus-group-mode-hook 'nnir-group-mode-hook) (defmacro nnir-group-server (group) - "Return the server for a foreign newsgroup GROUP. + "Return the server for a newsgroup GROUP. The returned format is as `gnus-server-to-method' needs it. See `gnus-group-real-prefix' and `gnus-group-real-name'." `(let ((gname ,group)) (if (string-match "^\\([^:]+\\):" gname) - (setq gname (match-string 1 gname)) - nil) - (if (string-match "^\\([^+]+\\)\\+\\(.+\\)$" gname) - (format "%s:%s" (match-string 1 gname) (match-string 2 gname)) - (concat gname ":")))) + (progn + (setq gname (match-string 1 gname)) + (if (string-match "^\\([^+]+\\)\\+\\(.+\\)$" gname) + (format "%s:%s" (match-string 1 gname) (match-string 2 gname)) + (concat gname ":"))) + "native"))) ;; Summary mode commands. @@ -790,7 +717,6 @@ (deffoo nnir-retrieve-headers (articles &optional group server fetch-old) (save-excursion (let ((artlist (copy-sequence articles)) - (idx 1) (art nil) (artitem nil) (artgroup nil) (artno nil) @@ -817,27 +743,30 @@ ;; NOV data and prepend to `novdata' (set-buffer nntp-server-buffer) (nnir-possibly-change-server server) - (case (setq foo (gnus-retrieve-headers (list artno) artfullgroup nil)) - (nov - (goto-char (point-min)) - (setq novitem (nnheader-parse-nov)) - (unless novitem - (pop-to-buffer nntp-server-buffer) - (error - "nnheader-parse-nov returned nil for article %s in group %s" - artno artfullgroup))) - (headers - (goto-char (point-min)) - (setq novitem (nnheader-parse-head)) - (unless novitem - (pop-to-buffer nntp-server-buffer) - (error - "nnheader-parse-head returned nil for article %s in group %s" - artno artfullgroup))) - (t (nnheader-report 'nnir "Don't support header type %s." foo))) - ;; replace article number in original group with article number + (let ((gnus-override-method + (gnus-server-to-method server))) + (case (setq foo (gnus-retrieve-headers (list artno) artfullgroup nil)) + (nov + (goto-char (point-min)) + (setq novitem (nnheader-parse-nov)) + (unless novitem + (pop-to-buffer nntp-server-buffer) + (error + "nnheader-parse-nov returned nil for article %s in group %s" + artno artfullgroup))) + (headers + (goto-char (point-min)) + (setq novitem (nnheader-parse-head)) + (unless novitem + (pop-to-buffer nntp-server-buffer) + (error + "nnheader-parse-head returned nil for article %s in group %s" + artno artfullgroup))) + (t (error "Unknown header type %s while requesting article %s of group %s" + foo artno artfullgroup)))) + ;; replace article number in original group with article number ;; in nnir group - (mail-header-set-number novitem idx) + (mail-header-set-number novitem art) (mail-header-set-from novitem (mail-header-from novitem)) (mail-header-set-subject @@ -847,8 +776,7 @@ (mail-header-subject novitem))) ;;-(mail-header-set-extra novitem nil) (push novitem novdata) - (setq artlist (cdr artlist)) - (setq idx (1+ idx))) + (setq artlist (cdr artlist))) (setq novdata (nreverse novdata)) (set-buffer nntp-server-buffer) (erase-buffer) (mapcar 'nnheader-insert-nov novdata) @@ -856,99 +784,33 @@ (deffoo nnir-request-article (article &optional group server to-buffer) - (save-excursion - (let* ((artitem (nnir-artlist-article nnir-artlist - article)) - (artfullgroup (nnir-artitem-group artitem)) - (artno (nnir-artitem-number artitem)) - ;; Bug? - ;; Why must we bind nntp-server-buffer here? It won't - ;; work if `buf' is used, say. (Of course, the set-buffer - ;; line below must then be updated, too.) - (nntp-server-buffer (or to-buffer nntp-server-buffer))) - (set-buffer nntp-server-buffer) - (erase-buffer) - (message "Requesting article %d from group %s" - artno artfullgroup) - (gnus-request-article artno artfullgroup nntp-server-buffer) - (cons artfullgroup artno)))) + (if (stringp article) + (nnheader-report + 'nnir + "nnir-retrieve-headers doesn't grok message ids: %s" + article) + (save-excursion + (let* ((artitem (nnir-artlist-article nnir-artlist + article)) + (artfullgroup (nnir-artitem-group artitem)) + (artno (nnir-artitem-number artitem)) + ;; Bug? + ;; Why must we bind nntp-server-buffer here? It won't + ;; work if `buf' is used, say. (Of course, the set-buffer + ;; line below must then be updated, too.) + (nntp-server-buffer (or to-buffer nntp-server-buffer))) + (set-buffer nntp-server-buffer) + (erase-buffer) + (message "Requesting article %d from group %s" + artno artfullgroup) + (gnus-request-article artno artfullgroup nntp-server-buffer) + (cons artfullgroup artno))))) (nnoo-define-skeleton nnir) ;;; Search Engine Interfaces: -;; Glimpse interface. -(defun nnir-run-glimpse (query server &optional group) - "Run given query against glimpse. Returns a vector of (group name, file name) -pairs (also vectors, actually)." - (save-excursion - (let ((artlist nil) - (groupspec (cdr (assq 'group query))) - (qstring (cdr (assq 'query query))) - (prefix (nnir-read-server-parm 'nnir-glimpse-remove-prefix server)) - artno dirnam) - (when (and group groupspec) - (error (concat "It does not make sense to use a group spec" - " with process-marked groups."))) - (when group - (setq groupspec (gnus-group-real-name group))) - (set-buffer (get-buffer-create nnir-tmp-buffer)) - (erase-buffer) - (if groupspec - (message "Doing glimpse query %s on %s..." query groupspec) - (message "Doing glimpse query %s..." query)) - (let* ((cp-list - `( ,nnir-glimpse-program - nil ; input from /dev/null - t ; output - nil ; don't redisplay - "-H" ,(nnir-read-server-parm 'nnir-glimpse-home server) ; search home dir - "-W" ; match pattern in file - "-l" "-y" ; misc options - ,@(nnir-read-server-parm 'nnir-glimpse-additional-switches server) - "-F" ,prefix ; restrict output to mail - ,qstring ; the query, in glimpse format - )) - (exitstatus - (progn - (message "%s args: %s" nnir-glimpse-program - (mapconcat 'identity (cddddr cp-list) " ")) - (apply 'call-process cp-list)))) - (unless (or (null exitstatus) - (zerop exitstatus)) - (nnheader-report 'nnir "Couldn't run glimpse: %s" exitstatus) - ;; Glimpse failure reason is in this buffer, show it if - ;; the user wants it. - (when (> gnus-verbose 6) - (display-buffer nnir-tmp-buffer)))) - (when groupspec - (keep-lines groupspec)) - (if groupspec - (message "Doing glimpse query %s on %s...done" query groupspec) - (message "Doing glimpse query %s...done" query)) - (sit-for 0) - ;; remove superfluous stuff from glimpse output - (goto-char (point-min)) - (delete-non-matching-lines "/[0-9]+$") - ;;(delete-matching-lines "\\.overview~?$") - (goto-char (point-min)) - (while (re-search-forward (concat "^" prefix "\\(.+\\)" "/\\([0-9]\\)+$") nil t) - ;; replace / with . in group names - (setq dirnam (substitute ?. ?/ (match-string 1)) - artno (match-string 2)) - (push (vector (nnir-group-full-name dirnam server) - (string-to-int artno)) artlist)) - - (sort* artlist - (function (lambda (x y) - (if (string-lessp (nnir-artitem-group x) - (nnir-artitem-group y)) - t - (< (nnir-artitem-number x) - (nnir-artitem-number y)))))) - ))) - ;; freeWAIS-sf interface. (defun nnir-run-waissearch (query server &optional group) "Run given query agains waissearch. Returns vector of (group name, file name) @@ -994,50 +856,7 @@ (> (nnir-artitem-rsv x) (nnir-artitem-rsv y))))))))) -;; EWS (Excite for Web Servers) interface -(defun nnir-run-excite-search (query server &optional group) - "Run a given query against EWS. Returns vector of (group name, file name) -pairs (also vectors, actually)." - (when group - (error "Searching specific groups not implemented for EWS.")) - (save-excursion - (let ((qstring (cdr (assq 'query query))) - (prefix (nnir-read-server-parm 'nnir-excite-remove-prefix server)) - artlist group article-num article) - (setq nnir-current-query query) - (set-buffer (get-buffer-create nnir-tmp-buffer)) - (erase-buffer) - (message "Doing EWS query %s..." qstring) - (call-process nnir-excite-aquery-program - nil ; input from /dev/null - t ; output to current buffer - nil ; don't redisplay - (nnir-read-server-parm 'nnir-excite-collection server) - (if (string= (substring qstring 0 1) "(") - qstring - (format "(concept %s)" qstring))) - (message "Gathering query output...") - - (goto-char (point-min)) - (while (re-search-forward - "^[0-9]+\\s-[0-9]+\\s-[0-9]+\\s-\\(\\S-*\\)" nil t) - (setq article (match-string 1)) - (unless (string-match - (concat "^" (regexp-quote prefix) - "\\(.*\\)/\\([0-9]+\\)") article) - (nnheader-report 'nnir "Dir name %s doesn't contain prefix %s" - article prefix)) - (setq group (substitute ?. ?/ (match-string 1 article))) - (setq group (nnir-group-full-name group server)) - (setq article-num (match-string 2 article)) - (setq artlist (vconcat artlist (vector (vector group - (string-to-int article-num) - 1000))))) - (message "Gathering query output...done") - artlist))) - -;; IMAP interface. The following function is Copyright (C) 1998 Simon -;; Josefsson . +;; IMAP interface. ;; todo: ;; nnir invokes this two (2) times???! ;; we should not use nnimap at all but open our own server connection @@ -1074,8 +893,7 @@ (quit nil)) (reverse artlist)))) -;; Swish++ interface. The following function is Copyright (C) 2000, -;; 2001 Christoph Conrad . +;; Swish++ interface. ;; -cc- Todo ;; Search by ;; - group @@ -1147,7 +965,11 @@ dirnam (file-name-directory (match-string 2))) ;; don't match directories - (when (string-match "^[0-9]+\\(\\.gz\\)?$" artno) + (when (string-match "^[0-9]+\\(\\.[a-z0-9]+\\)?$" artno) + ;; nnml-use-compressed-files might be any string, but probably this + ;; is sufficient. Note that we can't only use the value of + ;; nnml-use-compressed-files because old articles might have been + ;; saved with a different value. (when (not (null dirnam)) ;; maybe limit results to matching groups. @@ -1181,8 +1003,7 @@ (> (nnir-artitem-rsv x) (nnir-artitem-rsv y))))))))) -;; Swish-E interface. The following function is Copyright (C) 2000, -;; 2001 by Christoph Conrad . +;; Swish-E interface. (defun nnir-run-swish-e (query server &optional group) "Run given query against swish-e. Returns a vector of (group name, file name) pairs (also vectors, @@ -1495,9 +1316,7 @@ (cond ((and method (assq key (cddr method))) (nth 1 (assq key (cddr method)))) ((and nnir-mail-backend - (gnus-method-equal method nnir-mail-backend)) - (symbol-value key)) - ((null nnir-mail-backend) + (gnus-server-equal method nnir-mail-backend)) (symbol-value key)) (t nil)))) ;; (if method @@ -1549,7 +1368,7 @@ (defun nnir-artlist-artitem-rsv (artlist n) "Returns from ARTLIST the Retrieval Status Value of the Nth artitem -(counting from 1)." +\(counting from 1)." (nnir-artitem-rsv (nnir-artlist-article artlist n))) ;; unused? Index: gnus/contrib/sendmail.el diff -u gnus/contrib/sendmail.el:7.1 gnus/contrib/sendmail.el:7.5 --- gnus/contrib/sendmail.el:7.1 Sat Feb 11 23:25:03 2006 +++ gnus/contrib/sendmail.el Tue Apr 10 01:44:06 2007 @@ -1,7 +1,7 @@ ;;; sendmail.el --- mail sending commands for Emacs. -*- byte-compile-dynamic: t -*- ;; Copyright (C) 1985, 1986, 1992, 1993, 1994, 1995, 1996, 1998, 2000, -;; 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Maintainer: FSF ;; Keywords: mail @@ -48,6 +48,16 @@ :group 'sendmail :version "22.1") +(defcustom sendmail-program + (cond + ((file-exists-p "/usr/sbin/sendmail") "/usr/sbin/sendmail") + ((file-exists-p "/usr/lib/sendmail") "/usr/lib/sendmail") + ((file-exists-p "/usr/ucblib/sendmail") "/usr/ucblib/sendmail") + (t "fakemail")) ;In ../etc, to interface to /bin/mail. + "Program used to send messages." + :group 'mail + :type 'file) + ;;;###autoload (defcustom mail-from-style 'angles "Specifies how \"From:\" fields look. @@ -610,16 +620,16 @@ \\[mail-send-and-exit] mail-send-and-exit (send the message and exit) Here are commands that move to a header field (and create it if there isn't): - \\[mail-to] move to To: \\[mail-subject] move to Subject: - \\[mail-cc] move to CC: \\[mail-bcc] move to BCC: + \\[mail-to] move to To: \\[mail-subject] move to Subj: + \\[mail-bcc] move to BCC: \\[mail-cc] move to CC: \\[mail-fcc] move to FCC: \\[mail-reply-to] move to Reply-To: \\[mail-mail-reply-to] move to Mail-Reply-To: \\[mail-mail-followup-to] move to Mail-Followup-To: -\\[mail-text] mail-text (move to beginning of message text). +\\[mail-text] move to message text. \\[mail-signature] mail-signature (insert `mail-signature-file' file). \\[mail-yank-original] mail-yank-original (insert current message, in Rmail). \\[mail-fill-yanked-message] mail-fill-yanked-message (fill what was yanked). -\\[mail-sent-via] mail-sent-via (add a Sent-via field for each To or CC). +\\[mail-sent-via] mail-sent-via (add a sent-via field for each To or CC). Turning on Mail mode runs the normal hooks `text-mode-hook' and `mail-mode-hook' (in that order)." (make-local-variable 'mail-reply-action) @@ -863,11 +873,14 @@ (error "Message contains non-ASCII characters")))) ;; Complain about any invalid line. (goto-char (point-min)) - (while (< (point) (mail-header-end)) - (unless (looking-at "[ \t]\\|.*:\\|$") - (push-mark opoint) - (error "Invalid header line (maybe a continuation line lacks initial whitespace)")) - (forward-line 1)) + (re-search-forward (regexp-quote mail-header-separator) (point-max) t) + (let ((header-end (or (match-beginning 0) (point-max)))) + (goto-char (point-min)) + (while (< (point) header-end) + (unless (looking-at "[ \t]\\|.*:\\|$") + (push-mark opoint) + (error "Invalid header line (maybe a continuation line lacks initial whitespace)")) + (forward-line 1))) (goto-char opoint) (run-hooks 'mail-send-hook) (message "Sending...") @@ -1379,7 +1392,7 @@ nil))) (defun mail-text () - "Move point to beginning of message text." + "Move point to beginning of text field." (interactive) (expand-abbrev) (goto-char (mail-text-start))) Index: gnus/contrib/smtpmail.el diff -u gnus/contrib/smtpmail.el:7.1 gnus/contrib/smtpmail.el:7.10 --- gnus/contrib/smtpmail.el:7.1 Sat Feb 11 23:25:03 2006 +++ gnus/contrib/smtpmail.el Sat Mar 24 20:16:54 2007 @@ -1,7 +1,7 @@ ;;; smtpmail.el --- simple SMTP protocol (RFC 821) for sending mail ;; Copyright (C) 1995, 1996, 2001, 2002, 2003, 2004, 2005, -;; 2006 Free Software Foundation, Inc. +;; 2006, 2007 Free Software Foundation, Inc. ;; Author: Tomoji Kagatani ;; Maintainer: Simon Josefsson @@ -68,6 +68,12 @@ ;;; Code: +;; This version of `smtpmail.el' should only be used with Emacs 21. +(if (featurep 'xemacs) + (error "Please use `smtpmail.el' from the mail-lib package.") + (when (>= emacs-major-version 22) + (error "Please use `smtpmail.el' bundled with Emacs."))) + (require 'sendmail) (autoload 'starttls-open-stream "starttls") (autoload 'starttls-negotiate "starttls") @@ -99,13 +105,13 @@ (defcustom smtpmail-smtp-service 25 "*SMTP service port number. -The default value would be \"smtp\" or 25 ." +The default value would be \"smtp\" or 25." :type '(choice (integer :tag "Port") (string :tag "Service")) :group 'smtpmail) (defcustom smtpmail-local-domain nil "*Local domain name without a host name. -If the function (system-name) returns the full internet address, +If the function `system-name' returns the full internet address, don't define this value." :type '(choice (const nil) string) :group 'smtpmail) @@ -145,7 +151,7 @@ :group 'smtpmail) (defcustom smtpmail-queue-mail nil - "*Specify if mail is queued (if t) or sent immediately (if nil). + "*If set, mail is queued; otherwise it is sent immediately. If queued, it is stored in the directory `smtpmail-queue-dir' and sent with `smtpmail-send-queued-mail'." :type 'boolean @@ -176,7 +182,12 @@ (defcustom smtpmail-starttls-credentials '(("" 25 "" "")) "Specify STARTTLS keys and certificates for servers. This is a list of four-element list with `servername' (a string), -`port' (an integer), `key' (a filename) and `certificate' (a filename)." +`port' (an integer), `key' (a filename) and `certificate' (a +filename). +If you do not have a certificate/key pair, leave the `key' and +`certificate' fields as `nil'. A key/certificate pair is only +needed if you want to use X.509 client authenticated +connections." :type '(repeat (list (string :tag "Server") (integer :tag "Port") (file :tag "Key") @@ -193,7 +204,7 @@ :group 'smtpmail) (defvar smtpmail-queue-index-file "index" - "File name of queued mail index, + "File name of queued mail index. This is relative to `smtpmail-queue-dir'.") (defvar smtpmail-address-buffer) @@ -239,6 +250,17 @@ (save-excursion (set-buffer tembuf) (erase-buffer) + ;; Use the same buffer-file-coding-system as in the mail + ;; buffer, otherwise any write-region invocations (e.g., in + ;; mail-do-fcc below) will annoy with asking for a suitable + ;; encoding. + ;; + ;; This file (`gnus/contrib/smtpmail.el') is only useful for Emacs + ;; which doesn't support the third argument (NOMODIFY) of + ;; `set-buffer-file-coding-system'. + (set-buffer-file-coding-system smtpmail-code-conv-from nil) + (set-buffer-modified-p nil) + (force-mode-line-update) (insert-buffer-substring mailbuf) (goto-char (point-max)) ;; require one newline at the end. @@ -321,6 +343,22 @@ (goto-char (point-min)) (unless (re-search-forward "^Date:" delimline t) (insert "Date: " (message-make-date) "\n")) + ;; Possibly add a MIME header for the current coding system + (let (charset) + (goto-char (point-min)) + (and (eq mail-send-nonascii 'mime) + (not (re-search-forward "^MIME-version:" delimline t)) + (progn (skip-chars-forward "\0-\177") + (/= (point) (point-max))) + smtpmail-code-conv-from + (setq charset + (coding-system-get smtpmail-code-conv-from + 'mime-charset)) + (goto-char delimline) + (insert "MIME-version: 1.0\n" + "Content-type: text/plain; charset=" + (symbol-name charset) + "\nContent-Transfer-Encoding: 8bit\n"))) ;; Insert an extra newline if we need it to work around ;; Sun's bug that swallows newlines. (goto-char (1+ delimline)) @@ -329,7 +367,10 @@ ;; Find and handle any FCC fields. (goto-char (point-min)) (if (re-search-forward "^FCC:" delimline t) - (mail-do-fcc delimline)) + ;; Force mail-do-fcc to use the encoding of the mail + ;; buffer to encode outgoing messages on FCC files. + (let ((coding-system-for-write smtpmail-code-conv-from)) + (mail-do-fcc delimline))) (if mail-interactive (with-current-buffer errbuf (erase-buffer)))) @@ -365,6 +406,7 @@ (make-directory smtpmail-queue-dir t)) (with-current-buffer buffer-data (erase-buffer) + (set-buffer-file-coding-system smtpmail-code-conv-from nil) (insert-buffer-substring tembuf) (write-file file-data) (set-buffer buffer-elisp) @@ -536,7 +578,18 @@ (decoded (base64-decode-string challenge)) (hash (rfc2104-hash 'md5 64 16 passwd decoded)) (response (concat (smtpmail-cred-user cred) " " hash)) - (encoded (base64-encode-string response))) + ;; Osamu Yamane : + ;; SMTP auth fails because the SMTP server identifies + ;; only the first part of the string (delimited by + ;; new line characters) as a response from the + ;; client, and the rest as distinct commands. + + ;; In my case, the response string is 80 characters + ;; long. Without the no-line-break option for + ;; base64-encode-sting, only the first 76 characters + ;; are taken as a response to the server, and the + ;; authentication fails. + (encoded (base64-encode-string response t))) (smtpmail-send-command process (format "%s" encoded)) (if (or (null (car (setq ret (smtpmail-read-response process)))) (not (integerp (car ret))) @@ -549,12 +602,12 @@ (>= (car ret) 400)) (throw 'done nil)) (smtpmail-send-command - process (base64-encode-string (smtpmail-cred-user cred))) + process (base64-encode-string (smtpmail-cred-user cred) t)) (if (or (null (car (setq ret (smtpmail-read-response process)))) (not (integerp (car ret))) (>= (car ret) 400)) (throw 'done nil)) - (smtpmail-send-command process (base64-encode-string passwd)) + (smtpmail-send-command process (base64-encode-string passwd t)) (if (or (null (car (setq ret (smtpmail-read-response process)))) (not (integerp (car ret))) (>= (car ret) 400)) @@ -571,7 +624,7 @@ (concat "\0" (smtpmail-cred-user cred) "\0" - passwd)))) + passwd) t))) (if (or (null (car (setq ret (smtpmail-read-response process)))) (not (integerp (car ret))) (not (equal (car ret) 235))) Index: gnus/etc/gnus-tut.txt diff -u gnus/etc/gnus-tut.txt:7.5 gnus/etc/gnus-tut.txt:7.6 --- gnus/etc/gnus-tut.txt:7.5 Wed Feb 8 05:17:16 2006 +++ gnus/etc/gnus-tut.txt Wed Jan 24 08:15:39 2007 @@ -25,8 +25,8 @@ heart's delight at and . -;; Copyright (C) 1995, 2002, 2003, 2004, 2005, -;; 2006 Free Software Foundation, Inc. +;; Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005, +;; 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/etc/images/gnus/bar.xbm diff -u gnus/etc/images/gnus/bar.xbm:1.2 gnus/etc/images/gnus/bar.xbm:removed --- gnus/etc/images/gnus/bar.xbm:1.2 Sat Feb 19 06:08:40 2005 +++ gnus/etc/images/gnus/bar.xbm Tue May 1 17:20:37 2007 @@ -1,7 +0,0 @@ -#define noname_width 6 -#define noname_height 48 -static char noname_bits[] = { - 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, - 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, - 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, - 0x0c,0x0c,0x0c}; Index: gnus/etc/images/gnus/bar.xpm diff -u gnus/etc/images/gnus/bar.xpm:1.2 gnus/etc/images/gnus/bar.xpm:removed --- gnus/etc/images/gnus/bar.xpm:1.2 Sat Feb 19 06:08:40 2005 +++ gnus/etc/images/gnus/bar.xpm Tue May 1 17:20:37 2007 @@ -1,54 +0,0 @@ -/* XPM */ -static char * picon-bar_xpm[] = { -"6 48 2 1", -" c white s background", -". c black", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. "}; Index: gnus/etc/images/gnus/rot13.pbm Index: gnus/etc/images/gnus/rot13.xpm diff -u gnus/etc/images/gnus/rot13.xpm:1.2 gnus/etc/images/gnus/rot13.xpm:1.3 --- gnus/etc/images/gnus/rot13.xpm:1.2 Sat Feb 19 06:08:41 2005 +++ gnus/etc/images/gnus/rot13.xpm Fri Mar 2 00:43:24 2007 @@ -1,32 +1,128 @@ /* XPM */ static char * rot13_xpm[] = { -"24 24 5 1", -" c None", -". c #A5A5A5A59595", -"X c #C7C7C6C6C6C6", -"o c #E1E1E0E0E0E0", -"O c #919187876969", -" ", -" ", -" ", -" . ", -" ..X. ", -" ..XXX. ", -" ..XXXXXo. ", -" ...XXXXXXooo. ", -" .o.XXXXXoooo. ", -" .oo.XXXooOooo. ", -" .oo..XXoOXOOoo. ", -" .oo.XXoOXooOXoo. ", -" .o.XoooOOXXOXooX. ", -" .XXooOOXOOXoooo. ", -" .XooOOOooooooo. ", -" .oOOXOXooooo. ", -" .oOOXoooooo. ", -" .oOOXooo.. ", -" .oooooo. ", -" .ooo.. ", -" .oo. ", -" .. ", -" ", -" "}; +"24 24 101 2", +" g None", +". g #000000", +"+ g #212121", +"@ g #9E9E9E", +"# g #E6E6E6", +"$ g #E7E7E7", +"% g #C8C8C8", +"& g #A0A0A0", +"* g #131313", +"= g #5F5F5F", +"- g #EDEDED", +"; g #D6D6D6", +"> g #D5D5D5", +", g #DDDDDD", +"' g #D8D8D8", +") g #A1A1A1", +"! g #3C3C3C", +"~ g #353535", +"{ g #EFEFEF", +"] g #CFCFCF", +"^ g #4C4C4C", +"/ g #141414", +"( g #6A6A6A", +"_ g #D0D0D0", +": g #B2B2B2", +"< g #454545", +"[ g #E2E2E2", +"} g #292929", +"| g #0F0F0F", +"1 g #949494", +"2 g #E9E9E9", +"3 g #C3C3C3", +"4 g #1C1C1C", +"5 g #E1E1E1", +"6 g #272727", +"7 g #DEDEDE", +"8 g #B6B6B6", +"9 g #0C0C0C", +"0 g #262626", +"a g #1F1F1F", +"b g #616161", +"c g #5B5B5B", +"d g #232323", +"e g #111111", +"f g #181818", +"g g #3D3D3D", +"h g #636363", +"i g #545454", +"j g #2E2E2E", +"k g #242424", +"l g #070707", +"m g #DCDCDC", +"n g #D3D3D3", +"o g #C5C5C5", +"p g #C2C2C2", +"q g #BFBFBF", +"r g #B5B5B5", +"s g #696969", +"t g #ACACAC", +"u g #999999", +"v g #8F8F8F", +"w g #868686", +"x g #686868", +"y g #B1B1B1", +"z g #9A9A9A", +"A g #909090", +"B g #878787", +"C g #DBDBDB", +"D g #A6A6A6", +"E g #979797", +"F g #8A8A8A", +"G g #8D8D8D", +"H g #838383", +"I g #666666", +"J g #BBBBBB", +"K g #9F9F9F", +"L g #8B8B8B", +"M g #828282", +"N g #676767", +"O g #A3A3A3", +"P g #8E8E8E", +"Q g #888888", +"R g #8C8C8C", +"S g #BABABA", +"T g #818181", +"U g #757575", +"V g #DADADA", +"W g #AFAFAF", +"X g #848484", +"Y g #7F7F7F", +"Z g #7B7B7B", +"` g #B8B8B8", +" . g #D9D9D9", +".. g #ABABAB", +"+. g #929292", +"@. g #939393", +"#. g #808080", +"$. g #919191", +"%. g #ADADAD", +"&. g #969696", +"*. g #4A4A4A", +" ", +" ", +" . . . . . ", +" . + @ # $ % & * ", +" . = - # ; > , ' ) ! . ", +" ~ { ] ^ . . / ( _ : < ", +" . [ ' } . | ( % 1 . ", +" * 2 3 . 4 5 @ . ", +" 6 7 8 . . $ 8 . ", +" 9 0 a b c d e 6 a f a g h i j k l ", +" . 7 m ' ; n o p p p p q r r r s . ", +" . 7 p 8 : t t t t t t t u v w x . ", +" . m p 8 y t t t t t t t z A B s . ", +" . C p r D E E E E E E A F G H I . ", +" . , p 8 J t t t t t t t K L M N . ", +" . m p y O E E E E E E P Q R H ( . ", +" . m p r S t t t t t t t K L T U . ", +" . V p W & E E E E E E F X B Y Z . ", +" . C p y ` t t t t t t t K F B T . ", +" . .p W ..E E E E E E E +.G @.#.. ", +" . $.%.z &.A L F F G $.A A P X *.. ", +" . . . . . . . . . . . . . . . ", +" ", +" "}; Index: gnus/etc/images/smilies/reverse-smile.xpm diff -u gnus/etc/images/smilies/reverse-smile.xpm:1.1 gnus/etc/images/smilies/reverse-smile.xpm:removed --- gnus/etc/images/smilies/reverse-smile.xpm:1.1 Sat Feb 19 06:08:44 2005 +++ gnus/etc/images/smilies/reverse-smile.xpm Tue May 1 17:20:37 2007 @@ -1,20 +0,0 @@ -/* XPM */ -static char * reverse_smile_xpm[] = { -"13 14 3 1", -" c None", -". c #000000", -"+ c #FFDD00", -" ....... ", -" ..+++++.. ", -" .+++++++++. ", -".+++.....+++.", -".++.+++++.++.", -".++.+++++.++.", -".+++++++++++.", -".+++++++++++.", -".++..+++..++.", -".++..+++..++.", -".+++++++++++.", -" .+++++++++. ", -" ..+++++.. ", -" ....... "}; Index: gnus/lisp/ChangeLog diff -u gnus/lisp/ChangeLog:7.1237 gnus/lisp/ChangeLog:7.1539 --- gnus/lisp/ChangeLog:7.1237 Mon May 1 17:14:44 2006 +++ gnus/lisp/ChangeLog Tue May 1 17:16:54 2007 @@ -1,8 +1,1768 @@ +2007-05-01 Lars Magne Ingebrigtsen + + * gnus.el: No Gnus v0.6 is released. + +2007-04-27 Didier Verna + + * gnus-util.el (gnus-orify-regexp): Moved and renamed to ... + * gmm-utils.el (gmm-regexp-concat): here. + * message.el: Don't require 'gnus-util. + (message-dont-reply-to-names): Handle name change above. + * gnus-sum.el (gnus-ignored-from-addresses): Ditto. + +2007-04-26 Katsumi Yamaoka + + * mm-util.el (mm-charset-synonym-alist): Don't make it a user option + since the initial value varies according to the system. + +2007-04-25 Katsumi Yamaoka + + * mm-util.el (mm-charset-synonym-alist): Defcustom. + +2007-04-25 NAKAJI Hiroyuki (tiny change) + + * mm-util.el (mm-charset-synonym-alist): Map iso8859-1 to iso-8859-1. + +2007-04-24 Didier Verna + + Improve the type of gnus-ignored-from-addresses. + * gnus-util.el (gnus-orify-regexp): New function. + * message.el (gnus-util): Require it. + * message.el (message-dont-reply-to-names): Use gnus-orify-regexp. + * gnus-sum.el (gnus-ignored-from-addresses): New function. + * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): Use it. + +2007-04-24 Didier Verna + + * gnus-sum.el: + * gnus-utils.el: Fix some trailing whitespaces. + +2007-04-23 Katsumi Yamaoka + + * gnus-msg.el (gnus-summary-resend-message-edit): Add Gcc header. + (gnus-summary-resend-bounced-mail): Ditto; search whole body for parent + article's Message-ID; refer parent article in summary buffer. + + * message.el (message-bounce): Call mime-to-mml. + + * dgnushack.el (byte-optimize-form-code-walker): Fix the form which was + not helpful to Emacs 21.1 and 21.2 for detecting a bug that does not + optimize and/or forms properly. + +2007-04-22 Reiner Steib + + * dgnushack.el (with-syntax-table): XEmacs bug has been fixed. Add + URL. + +2007-04-20 Katsumi Yamaoka + + * gnus-msg.el (gnus-summary-supersede-article): Add Gcc header. + +2007-04-19 Katsumi Yamaoka + + * gnus-art.el (gnus-mime-strip-charset-parameters): New function. + (gnus-mime-view-part-as-charset): Use it; redisplay subpart currently + displayed of multipart/alternative part if it is invoked from summary + buffer. + + * mm-view.el (mm-inline-text-html-render-with-w3m) + (mm-inline-text-html-render-with-w3m-standalone) + (mm-inline-render-with-function): Use mail-parse-charset by default. + +2007-04-17 Katsumi Yamaoka + + * gnus-uu.el (gnus-uu-digest-mail-forward): Pull articles processed + from gnus-newsgroup-processable. + +2007-04-16 Didier Verna + + * gnus-msg.el (gnus-configure-posting-styles): Handle + message-signature-directory properly with :file syntax. Reported by + "Leo". + +2007-04-11 Didier Verna + + New user option: message-signature-directory. + * gnus-msg.el (gnus-configure-posting-styles): Support it. + * message.el (message-insert-signature): Ditto. + * message.el (message-signature-file): Doc update. + * message.el (message-signature-directory): New. + +2007-04-10 Katsumi Yamaoka + + * gnus-msg.el (gnus-inews-yank-articles): Use + message-exchange-point-and-mark instead of exchange-point-and-mark. + +2007-04-09 Katsumi Yamaoka + + * message.el (message-yank-original): Make sure cited text ends with + newline; don't exchange point and mark. + +2007-04-07 Chong Yidong + + * tls.el (open-tls-stream): Properly handle case where there + is no associated buffer. + +2007-04-03 Thien-Thi Nguyen + + * gnus-msg.el (gnus-inews-yank-articles): Fix bug: After + message-yank-original, make sure (< mark TEXT point). + +2007-03-31 Reiner Steib + + * message.el (message-fill-column): New variable. + (message-mode): Use it. Add comment on a possible new hook. + + * nnmail.el (nnmail-spool-file): Mark as obsolete. + (nnmail-get-new-mail): Reformat. + + * gnus-registry.el (gnus-registry-cache-save): Add FIXME comment. + + * gmm-utils.el: Fix Commentary. + (gmm-tool-bar-from-list): Fix typo in doc string. + +2007-03-27 Thien-Thi Nguyen + + * message.el (message-yank-original): Don't switch point and mark + unnecessarily to put point and mark as documented. + +2007-03-27 Lars Magne Ingebrigtsen + + * message.el (message-put-addresses-in-ecomplete): Only fetch headers + from the message heads. + +2007-03-25 Kevin Greiner + + * gnus-art.el (gnus-article-set-window-start): Do nothing when the + article buffer does not have a window. This may not be the best + solution but is certainly better than setting the start of the null, + that is the current, window. + +2007-03-24 Reiner Steib + + * gnus-draft.el (gnus-draft-setup-hook): New hook. + (gnus-draft-setup): Run it. + + * gnus-score.el (gnus-inhibit-slow-scoring): New variable, renamed from + gnus-score-fast-scoring. Allow regexp. + (gnus-score-headers): Use it. + + * gnus-util.el (gnus-emacs-version): Include "no MULE" in no-MULE + XEmacs. + + * gnus-art.el (gnus-article-browse-html-article): Fix typo in doc + string. + (gnus-button-alist): Also catch ` k ...'. + (gnus-treat-display-x-face): Fix doc string. + +2007-03-25 Andreas Seltenreich + + * gnus-msg.el (gnus-setup-message, gnus-inews-add-send-actions): Move + evaluation of gnus-extended-version to ensure correct generation of the + User-Agent header when message-generate-headers-first is used. + +2007-03-24 Simon Josefsson + + * hashcash.el (hashcash-generate-payment-async): Don't crash if + hashcash-path is nil. Don't call callback with incorrect number of + parameters if val is 0. + +2007-03-20 Andreas Seltenreich + + * message.el (message-required-news-headers): + * gnus-util.el (gnus-intern-safe): Fix typo in docstring. + +2007-03-18 Thien-Thi Nguyen + + * tls.el (open-tls-stream): In handshake-waiting loop, + don't wait more if there is output available to process. + +2007-03-17 Thien-Thi Nguyen + + * tls.el (tls-program): Doc fix. + +2007-03-15 Katsumi Yamaoka + + * message.el (message-generate-new-buffers): Change the meaning of the + nil value; add `standard' to the choices; treat t as `unique'; improve + doc string. + (gnus-select-frame-set-input-focus): Autoload. + (message-buffer-name): Search for the existing message buffer if + message-generate-new-buffers is nil or `standard'; treat the value t of + message-generate-new-buffers as `unique'. + (message-pop-to-buffer): Raise the frame already displaying the message + buffer; clear the echo area after querying. + (message-setup): Pass the `continue' argument to compose-mail. + (message-mail): Prefer `switch-function' if it is given; search for the + existing message buffer if the `continue' argument is non-nil; pass + continue and switch-function arguments to compose-mail by way of + message-setup. + (message-mail-other-window): Adjust argument of message-setup. + (message-mail-other-frame): Ditto. + +2007-03-13 Katsumi Yamaoka + + * gnus-cite.el (font-lock-set-defaults): Autoload it for Emacs. + (gnus-message-citation-mode): Require font-lock for XEmacs; make sure + to turn font-lock on when turning gnus-message-citation-mode on. + +2007-03-06 Daiki Ueno + + * mml-smime.el (mml-smime-use): New variable; default to use openssl. + (mml-smime-function-alist): New variable; add epg as the backend. + * mml-sec.el (mml-smime-sign): Don't require mml-smime, autoload + mml-smime- functions instead. + * mm-view.el: Require smime. + +2007-03-05 Didier Verna + + * gnus-topic.el (gnus-topic-hierarchical-parameters): Perform merging + instead of just inheritance for posting styles. + * gnus.el (gnus-group-fast-parameter): Fix typo in comment. + +2007-02-24 Chris Moore + + * pgg-pgp5.el (pgg-pgp5-encrypt-region): + * pgg-pgp.el (pgg-pgp-encrypt-region): + * pgg-gpg.el (pgg-gpg-encrypt-region): + Check pgg-encrypt-for-me if no other recipients. + +2007-02-24 John Paul Wallington + + * tls.el (tls-certtool-program): Fix custom type. + +2007-02-28 Katsumi Yamaoka + + * gnus-cite.el (gnus-message-search-citation-line): Use point-at-bol + and point-at-eol instead of line-(beginning|end)-position. + + * assistant.el (assistant-parse-buffer): Ditto. + + * netrc.el (netrc-parse-services): Ditto. + +2007-02-28 Daiki Ueno + + * mml2015.el (mml2015-epg-find-usable-key): New function. + (mml2015-epg-sign): Use it. + (mml2015-epg-encrypt): Use it. + +2007-02-28 Katsumi Yamaoka + + * message.el (message-make-in-reply-to): Quote name containing + non-ASCII characters. It will make the RFC2047 encoder cause an error + if there are special characters. Reported by NAKAJI Hiroyuki + . + +2007-02-27 Didier Verna + + Include the group parameters as well as the topic ones in the + inheritance filter process. + * gnus-topic.el (gnus-topic-hierarchical-parameters): New optional + argument GROUP-PARAMS-LIST. + * gnus-topic.el (gnus-group-topic-parameters): Use it. + +2007-02-27 Katsumi Yamaoka + + * nntp.el (nntp-never-echoes-commands) + (nntp-open-connection-functions-never-echo-commands): New variables. + (nntp-send-command): Use them. + +2007-02-20 Daiki Ueno + + * mml2015.el (mml2015-epg-verify): Simplified. + +2007-02-19 Katsumi Yamaoka + + * mml.el (mml-content-disposition-alist): New user option. + (mml-content-disposition): New function. + (mml-insert-mime-headers, mml-minibuffer-read-disposition): Use it. + (mml-attach-file, mml-dnd-attach-file): Pass file name to it. + +2007-02-19 Daiki Ueno + + * mml2015.el (mml2015-epg-verify): Convert LF to CRLF before signature + verification. + +2007-02-15 Andreas Seltenreich + + * nnweb.el (nnweb-google-parse-1): Fix date parsing to also match on + articles posted in the last 24 hours. + +2007-02-14 Chong Yidong + + * smiley.el (smiley-regexp-alist): Add "dead" smiley. + +2007-02-14 Micha,Ak(Bl Cadilhac + + * nntp.el (nntp-send-command): Don't wait for echoes when + nntp-open-ssl-stream is used. + +2007-02-13 Katsumi Yamaoka + + * gnus-cite.el (gnus-test-font-lock-add-keywords) + (gnus-message-add-citation-keywords) + (gnus-message-remove-citation-keywords): Remove. + (gnus-message-citation-mode): Instead of modifying font-lock-keywords + directly, make the variables in font-lock-defaults buffer-local, add + gnus-message-citation-keywords to them and then update the value of + font-lock-keywords. + +2007-02-09 Katsumi Yamaoka + + * message.el (message-cite-original-1): Don't call + gnus-article-highlight-citation. + + * gnus-cite.el (gnus-cite-parse): Work with two or more MS-type + citations; fix line count. + +2007-02-08 Katsumi Yamaoka + + * gnus-cite.el (gnus-test-font-lock-add-keywords): New function. + (gnus-message-add-citation-keywords) + (gnus-message-remove-citation-keywords): Use it; fix the emulating + versions of font-lock-add-keywords and font-lock-remove-keywords to + work with XEmacs correctly. + +2007-02-07 Katsumi Yamaoka + + * gnus-cite.el (gnus-cite-face-list): Set the values of + gnus-message-max-citation-depth and gnus-message-citation-keywords. + (gnus-message-max-citation-depth): Use defvar rather than defconst. + (gnus-message-cite-prefix-regexp): New variable. + (gnus-message-search-citation-line): Use it; protect against long + citation prefix; fill match data with nil rather than 0 for XEmacs; set + the 0th match data for Emacs. + (gnus-message-citation-keywords): Set LAXMATCH flag in every HIGHLIGHT. + (gnus-message-add-citation-keywords): Append keywords rather than + prepending; emulate font-lock-add-keywords if it is not available. + (gnus-message-remove-citation-keywords): Emulate + font-lock-remove-keywords if it is not available. + + * gnus-msg.el (gnus-message-highlight-citation): Default to t. + + * message.el (message-cite-prefix-regexp): Set the value of + gnus-message-cite-prefix-regexp. + +2007-02-01 Andreas Seltenreich + + * nnweb.el (nnweb-google-parse-1): Update parser. + +2007-01-29 Juanma Barranquero + + * gnus-art.el (gnus-button-prefer-mid-or-mail): Fix typo in docstring. + +2007-01-28 Andreas Seltenreich + + * nnslashdot.el (nnslashdot-request-article): Update end-of-article + regexp. + +2007-01-24 Katsumi Yamaoka + + * uudecode.el (uudecode-string-to-multibyte): New function emulating + string-to-multibyte. + (uudecode-decode-region-internal): Use it. + + * lpath.el: Fbind string-as-multibyte for XEmacs. + +2007-01-23 Reiner Steib + + * gnus-score.el (gnus-home-score-file, gnus-home-adapt-file): Fix + custom choice. + + * gnus-art.el (gnus-signature-limit): Fix custom choice. + +2007-01-22 Daiki Ueno + + * mm-util.el (mm-inhibit-file-name-handlers): Add epa-file-handler. + + * mm-decode.el (mm-save-part-to-file): Use `mm-write-region' instead of + `write-region' to respect `mm-inhibit-file-name-handlers'. + +2007-01-19 Reiner Steib + + * nnsoup.el (nnsoup-directory, nnsoup-packer, nnsoup-packet-directory): + Use gnus-home-directory instead of "~/" or "$HOME". + +2007-01-17 Teodor Zlatanov + + * encrypt.el (encrypt-insert-file-contents): Add better prompt + to mention filename. + Add comments at beginning regarding usage. + (encrypt-write-file-contents): Change interactive so a string is + acceptable. If the file has no associated model, show an error instead + of a nonsense prompt. + +2007-01-16 TSUCHIYA Masatoshi + + * spam.el (spam-bsfilter-ham-switch): Fix typo. + Thanks to Yoshihiko Yamada for kind notification of this typo. + +2007-01-12 Kenichi Handa + + * uudecode.el (uudecode-decode-region-internal): Make it work in a + multibyte buffer. + +2007-01-14 Reiner Steib + + * gnus-score.el (gnus-score-fast-scoring): New variable. + (gnus-score-headers): Use it. + + * gnus-sum.el (gnus-auto-select-first): Improve doc string. + + * message.el (message-cite-original-1): Call + gnus-article-highlight-citation if requested. + + * gnus-cite.el (gnus-article-highlight-citation): Add SAME-BUFFER arg. + + * gnus-art.el (gnus-article-browse-html-article): Add warning about web + bugs to doc string. + (gnus-button-alist): Add mid\\|message-id. + (gnus-button-fetch-group): Extend for use in + `browse-url-browser-function'. + (gnus-button-url-regexp): Try to catch paired parentheses like in + Wikipedia URLs. + + * gnus-sum.el (gnus-summary-reparent-children): Another doc string fix. + Suggested by Simon Krahnke . + +2007-01-13 Romain Francoise + + * nnml.el (nnml-use-compressed-files): Fix typo in docstring. + Update copyright. + +2007-01-13 Patric Mueller (tiny change) + + * gnus-sum.el (gnus-summary-reparent-children): Fix typo in doc string. + +2007-01-09 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-unfollowed-groups) + (gnus-registry-split-fancy-with-parent): Fix documentation. + +2007-01-08 Lars Magne Ingebrigtsen + + * spam-report.el (spam-report-gmane-internal): Speed up spam reporting + from nnweb groups. + +2006-12-31 Lars Magne Ingebrigtsen + + * spam-report.el (spam-report-gmane-internal): Add necessary "/" to + Xref urls. Erase buffer before requesting head. + +2007-01-07 Reiner Steib + + * gnus-soup.el (gnus-soup): New custom group. Make user variables + customizable. + +2007-01-05 Daiki Ueno + + * mml2015.el (mml2015-epg-sign): Ask user whether to skip or abort if + no signing key is found. + (mml2015-epg-encrypt): Ask user whether to skip or abort if + no encrypting and/or signing key is found. + +2007-01-03 Reiner Steib + + * spam-report.el (spam-report-gmane-spam): Remove redundant message. + +2007-01-01 Andreas Seltenreich + + * nnweb.el (nnweb-gmane-create-mapping): Put back code to merge the + headers read from disk with the ones newly found in the current search. + This should no longer cause problems, because the article numbers in + Gmane's `nov.php' output are ignored since the previous change. + +2007-01-02 Andreas Seltenreich + + * gmm-utils.el (gmm-tool-bar-style): Fix custom type. + +2007-01-01 Katsumi Yamaoka + + * lpath.el: Fbind clear-string and cp-supported-codepages; don't fbind + replace-regexp-in-string; bind url-version; fbind display-images-p and + timer-set-function for XEmacs; bind timer-list for XEmacs; fbind + find-face and set-itimer-function for Emacs; bind itimer-list for + Emacs. + + * mm-decode.el (mm-display-external): Use itimer function for XEmacs. + +2007-01-01 Romain Francoise + + * gnus-sum.el (gnus-summary-make-menu-bar): Fix typo. + +2006-12-31 Steve Youngs + + * gnus-cite.el: Load easy-mmode at compile time for (S)XEmacs to get + `define-minor-mode' macro definition expanded properly. + (gnus-message-citation-mode): This is now OK for (S)XEmacs so don't + exclude it there. + + * gnus-msg.el (gnus-message-highlight-citation): Revert Reiner's patch + of 2006-12-30. The default is nil on (S)XEmacs already because of the + `fboundp' test. + (gnus-message-citation-mode): Revert Reiner's patch of 2006-12-30. + This is OK to autoload in (S)XEmacs now. + +2006-12-30 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-limit-to-singletons): New command and + keystroke. + (gnus-summary-limit-to-singletons): Fix typo. + + * spam-report.el (spam-report-gmane-internal): Fall back on Xref if all + else fails. + +2006-12-30 Andreas Seltenreich + + * gnus-cite.el (turn-off-gnus-message-citation-mode): Fix typo in + docstring. + + * gnus-sum.el (gnus-summary-insert-ticked-articles): New command. + (gnus-summary-make-menu-bar, gnus-summary-buffer-map): Bind it. + (gnus-summary-insert-dormant-articles): Fix typo in message. + +2006-12-30 Reiner Steib + + * gnus-msg.el (gnus-message-highlight-citation): Ensure default to be + nil for XEmacs. + (gnus-message-citation-mode): Don't autoload in XEmacs. + + * gnus-cite.el (gnus-message-citation-mode): Don't define in XEmacs. + +2006-12-29 Jouni K. Sepp,Ad(Bnen + + * nnimap.el (nnimap-expunge-search-string): Mention + nnimap-search-uids-not-since-is-evil in docstring. + +2006-12-28 Reiner Steib + + * spam.el: Revert to make-obsolete-variable because + define-obsolete-variable-alias is not supported in Emacs 21. + + * spam.el (spam-ifile-path, spam-ifile-database-path) + (spam-bogofilter-path): Use define-obsolete-variable-alias instead of + make-obsolete-variable. + (spam-bsfilter-path, spam-bsfilter-program) + (spam-spamassassin-path, spam-spamassassin-program) + (spam-sa-learn-path, spam-sa-learn-program): Rename variables. Don't + use "path" inappropriately. + (spam-check-spamassassin, spam-spamassassin-register-with-sa-learn) + (spam-check-bsfilter, spam-bsfilter-register-with-bsfilter): Use new + variable names. + +2006-12-28 Daiki Ueno + + * gnus-sum.el (gnus-summary-next-article): Make sure we are in the + summary buffer. + + * password.el (password-cache-remove): Use clear-string to burn + password, if available. + +2006-12-26 Reiner Steib + + * gnus-msg.el (gnus-message-citation-mode): Fix autoload. + + * gnus-cite.el (gnus-message-highlight-citation): Move to gnus-msg.el. + + * gnus-msg.el (gnus-setup-message): Add gnus-message-citation-mode. + (gnus-message-highlight-citation): Move defcustom here from + gnus-cite.el. + (gnus-message-citation-mode): Autoload. + + * gnus-cite.el: Adjust Oliver's code to Gnus namespace. Add some + checks to make it compile with XEmacs. + (gnus-message-citation-mode): New minor mode. + (gnus-message-max-citation-depth, gnus-message-citation-keywords) + (gnus-message-highlight-citation): New variables. + (gnus-message-search-citation-line) + (gnus-message-add-citation-keywords) + (gnus-message-remove-citation-keywords) + (turn-on-gnus-message-citation-mode) + (turn-off-gnus-message-citation-mode): New functions. + +2006-12-26 Oliver Scholz + + * gnus-cite.el: Enable highlighting of different citation levels in + message-mode. + +2006-12-26 Reiner Steib + + * message.el (message-make-fqdn): Fix comment. + (message-bogus-system-names): Add ".local". + + * spam.el (spam-ifile-path, spam-ifile-program) + (spam-ifile-database-path, spam-ifile-database) + (spam-bogofilter-path, spam-bogofilter-program): Rename variables. + Don't use "path" inappropriately. + (spam-spamoracle-database, spam-get-ifile-database-parameter): Fix doc + strings. + (spam-check-ifile, spam-ifile-register-with-ifile) + (spam-check-bogofilter, spam-bogofilter-register-with-bogofilter): Use + new variable names. + + * gnus-art.el (gnus-treat-display-x-face, gnus-treat-display-face) + (gnus-treat-display-smileys): Simplify using + gnus-image-type-available-p. + + * gnus-ems.el (gnus-image-type-available-p): Use display-images-p if + available. + + * gnus-xmas.el (gnus-xmas-image-type-available-p): Use + `display-images-p' if available. + +2006-12-22 Katsumi Yamaoka + + * nnrss.el (nnrss-fetch): Replace buffer's contents with the decoded + one after turning on the buffer's multibyteness instead of decoding + them directly in the unibyte buffer that causes unexpected conversion + in Emacs 23 (unicode). + +2006-12-21 Andreas Seltenreich + + * message.el (message-generate-hashcash): Fix custom type. + +2006-12-20 Reiner Steib + + * gnus-sum.el (gnus-summary-recenter): Remove debug messages. + +2006-12-20 Reiner Steib + + * gnus-group.el (gnus-group-tool-bar-gnome): Exchange connect and + disconnect icons. Add help text. + +2006-12-20 Teodor Zlatanov + + * spam.el (spam-extra-header-to-number): CRM114 spam score is + negated to be consistent with the others we handle. + +2006-12-19 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-article-setup-buffer): Actually set the local + version of gnus-summary-buffer to something, so that we can use two + article buffers at the same time. + +2006-12-18 Teodor Zlatanov + + * spam.el (spam-necessary-extra-headers): Make spam-use-regex-headers + trigger all the extra headers. + (spam-extra-header-to-number): Don't require spam-use-crm114 for header + sorting. + +2006-12-14 Andreas Seltenreich + + * nnweb.el (nnweb-gmane-create-mapping): Keep the mapping stable for + solid groups. + +2006-12-17 Chong Yidong + + * pgg-gpg.el (pgg-gpg-use-agent): Default to t. + +2006-12-13 Reiner Steib + + * legacy-gnus-agent.el: Add Copyright notice. + +2006-12-12 Chong Yidong + + * gnus-sum.el (gnus-make-thread-indent-array): Fix last change. + +2006-12-10 Lars Magne Ingebrigtsen + + * nnweb.el (nnweb-gmane-search): Placeholder TOPDOC setting. + + * gnus-sum.el (gnus-summary-recenter): Force setting the window start + to make it work reliably in CVS Emacs. + (gnus-summary-limit-strange-charsets-predicate) + (gnus-summary-limit-to-predicate): New functions. + +2006-12-08 Chong Yidong + + * gnus-sum.el (gnus-make-thread-indent-array): New optional arg + specifying array size. + (gnus-summary-insert-line, gnus-summary-prepare-threads): Regrow indent + array if it is too small. + (gnus-sort-threads-recursive): Renamed from gnus-sort-thread-1. + (gnus-sort-threads-loop): New function. + +2006-12-06 Chris Moore + + * gnus-sum.el (gnus-sort-threads, gnus-summary-limit-children): + Use `max' to avoid the value of `max-lisp-eval-depth' decreasing. + +2006-12-04 Jouni K. Sepp,Ad(Bnen + + * mm-url.el (mm-url-predefined-programs): Call curl with correct + options. + +2006-12-01 Lars Magne Ingebrigtsen + + * spam-report.el (spam-report-url-ping-plain): Wait for output to avoid + DOS-ing the recipient. + + * nnweb.el (nnweb-gmane-create-mapping): Use the article number from + the headers when creating the mapping to avoid mismappings. + (nnweb-gmane-create-mapping): Always nix out old mapping. + +2006-11-30 Katsumi Yamaoka + + * message.el (message-signed-or-encrypted-p): Bind mm-decrypt-option + and mm-verify-option to never. + +2006-11-30 Katsumi Yamaoka + + * message.el (message-signed-or-encrypted-p): New function. + (message-forward-make-body): Use it. + + * mml2015.el (mml2015-pgg-clear-verify, mml2015-epg-clear-verify): + Replace encode-coding-string with mm-encode-coding-string. + +2006-11-29 Katsumi Yamaoka + + * nneething.el (nneething-decode-file-name): Replace + decode-coding-string with mm-decode-coding-string. + + * gnus-int.el (gnus-open-server): Say failed server's name. + +2006-11-24 Stefan Monnier + + * pgg-pgp.el (pgg-pgp-process-region): Change `args' from a list of + strings to a single string. Quote `errors-file-name'. + (pgg-pgp-encrypt-region, pgg-pgp-decrypt-region, pgg-pgp-sign-region) + (pgg-pgp-verify-region, pgg-pgp-insert-key, pgg-pgp-snarf-keys-region): + Adjust calls. Use `shell-quote-argument'. + +2006-11-24 Juanma Barranquero + + * gnus-agent.el (gnus-agent-expire-unagentized-dirs) + (gnus-agent-regenerate-group): Fix space/tab mixup in messages. + + * gnus-art.el (gnus-article-x-face-command, gnus-numeric-save-name): + * gnus-group.el (gnus-group-sort-function, gnus-group-line-format) + (gnus-group-mode, gnus-group-read-group, gnus-group-delete-group) + (gnus-group-make-directory-group, gnus-group-transpose-groups): + * gnus-start.el (gnus-options-subscribe, gnus-options-not-subscribe) + (gnus-subscribe-newsgroup, gnus-1): + * gnus-sum.el (gnus-summary-make-false-root, gnus-make-threads): + * gnus.el (gnus-nntp-server, gnus-use-cross-reference) + (gnus-valid-select-methods, total-expire, gnus-summary-line-format) + (gnus-group-read-only-p): Fix space/tab mixup in docstrings. + +2006-11-24 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-limit-to-headers): New command and + keystroke. + (gnus-summary-limit-to-bodies): Implement headersp. + +2006-11-23 Lars Magne Ingebrigtsen + + * dns.el (query-dns): Protect against "Process dns deleted" strings. + +2006-11-21 Katsumi Yamaoka + + * mm-util.el (mm-string-to-multibyte): Alias to identity in XEmacs. + +2006-11-21 Lars Magne Ingebrigtsen + + * message.el (message-generate-hashcash): Expand range of values to + include `opportunistic'. + (message-send-mail): Use it. + +2006-11-18 Andreas Seltenreich + + * mm-uu.el (mm-uu-pgp-signed-extract-1): Make last fix more thorough + and comment it. + + * nnslashdot.el (nnslashdot-retrieve-headers-1): Update regexp. + +2006-11-15 Reiner Steib + + * gnus-util.el (gnus-extract-address-components): Improve comment. + +2006-11-14 Katsumi Yamaoka + + * gnus-util.el (gnus-extract-address-components): Work with address in + which the name portion contains @. + + * lpath.el: Fbind custom-autoload. + +2006-11-14 Reiner Steib + + * gnus.el (gnus-start): Move custom group up. + (gnus-select-method): Don't autoload, but make it available for + `customize-variable'. + (gnus-getenv-nntpserver): Don't autoload. + +2006-11-14 Teodor Zlatanov + + * spam.el: Revert to 7.82 (removed changes since 2006-10-16). + +2006-11-14 Reiner Steib + + * message.el (message-sendmail-extra-arguments): New variable. + (message-send-mail-with-sendmail): Use it. + +2006-11-14 Katsumi Yamaoka + + * mml.el (mml-generate-mime-1): Use mm-string-as-unibyte instead of + mm-with-unibyte-current-buffer to make string unibyte. + + * mm-decode.el (mm-insert-part): Use mm-string-to-multibyte instead of + mm-string-as-multibyte. + +2006-11-14 Daiki Ueno + + * mml2015.el (mml2015-epg-sign): Prefix "pgp-" to a micalg value. + Reported by Werner Koch . + +2006-11-14 Daiki Ueno + + * mml2015.el: Autoload epa-select-keys when compiling. + +2006-11-13 Daiki Ueno + + * mml2015.el (mml2015-epg-sign): Save the signing keys in + message-options. + (mml2015-epg-encrypt): Save the recipient keys in message-options. + +2006-11-13 Daiki Ueno + + * mml2015.el (mml2015-epg-encrypt): Removed backward compatibility for + EasyPG (< 0.0.6). + (mml2015-always-trust): New user option. + (mml2015-epg-passphrase-callback): Display key ID on the passphrase + prompt. + +2006-11-10 Katsumi Yamaoka + + * nntp.el (nntp-authinfo-force): New variable. + (nntp-send-authinfo): Use it. + +2006-11-09 Reiner Steib + + * message.el (message-strip-subject-encoded-words): Allow _not_ to + decode encoded words. Improve prompt. Add comment about forwarding. + (message-replacement-char): Move up. + +2006-11-08 Wolfgang Jenkner (tiny change) + + * gnus-sum.el (gnus-summary-catchup): Use gnus-sorted-intersection + instead of gnus-intersection because arguments of gnus-sorted-nunion + must be sorted. This avoids corruption of gnus-newsgroup-unreads. + +2006-11-07 Reiner Steib + + * message.el (message-strip-subject-encoded-words): Reformat prompt. + (message-simplify-subject-functions): Enable + message-strip-subject-encoded-words by default. + +2006-11-06 Reiner Steib + + * message.el (message-strip-subject-encoded-words): New function + (message-simplify-subject-functions): New variable. + (message-simplify-subject): Use it. Fix typo in doc string. + Support message-strip-subject-encoded-words. + +2006-11-03 Juanma Barranquero + + * gnus-diary.el (gnus-diary-delay-format-function): + * nndiary.el (nndiary-reminders): + * nnsoup.el (nnsoup-always-save): Use "non-nil" in docstrings. + +2006-11-01 Reiner Steib + + * gnus-art.el (article-hide-boring-headers): Fetch date from + gnus-original-article-buffer to avoid problems with localized date + strings. + +2006-10-30 Katsumi Yamaoka + + * html2text.el (html2text-format-tags): Avoid infloop on open tags. + +2006-10-29 Reiner Steib + + * mm-util.el (mm-codepage-iso-8859-list, mm-codepage-ibm-list): + New variables. + (mm-setup-codepage-iso-8859, mm-setup-codepage-ibm): New functions. + (mm-charset-synonym-alist): Move some entries to + mm-codepage-iso-8859-list. + (mm-charset-synonym-alist, mm-charset-override-alist): Add + iso-8859-8/windows-1255 and iso-8859-9/windows-1254. + +2006-10-29 Katsumi Yamaoka + + * gnus-sum.el (gnus-set-mode-line): Quote % in group name. + +2006-10-28 Reiner Steib + + * gnus-agent.el (gnus-agent-make-mode-line-string): Make it compatible + with Emacs 21 and XEmacs. + +2006-10-27 Teodor Zlatanov + + * spam.el (spam-parse-address): New function for better parsing, + catching errors, etc. + (spam-check-BBDB, spam-enter-ham-BBDB, spam-parse-list): Use it. + +2006-10-26 Reiner Steib + + * mm-view.el: Add interactive arg to html2text autoload. + +2006-10-25 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-move-article): Use no-encode for `B B'. + +2006-10-24 Reiner Steib + + * mm-util.el (mm-codepage-iso-8859-list, mm-codepage-ibm-list): New + variables. + (mm-setup-codepage-iso-8859, mm-setup-codepage-ibm): New functions. + (mm-charset-synonym-alist): Move some entries to + mm-codepage-iso-8859-list. + + * gnus.el (gnus-getenv-nntpserver, gnus-select-method): Autoload. + +2006-10-23 Reiner Steib + + * message.el (message-citation-line-format) + (message-insert-formated-citation-line): Fix implementation of %E, %N + and %n according to the doc string. + +2006-10-20 Teodor Zlatanov + + * spam.el (spam-check-BBDB, spam-enter-ham-BBDB, spam-parse-list): Use + car-safe to avoid bad parses. + +2006-10-20 Katsumi Yamaoka + + * gnus-group.el (gnus-group-make-doc-group): Work for non-ASCII group + names. + + * gnus-sum.el (gnus-select-newsgroup): Decode group name. + +2006-10-19 Katsumi Yamaoka + + * gnus-draft.el (gnus-draft-edit-message): Make sure to remove Date + header. + + * message.el (message-draft-headers): Add Date. + (message-headers-to-generate): Fix typo in docstring. + + * nndraft.el (nndraft-required-headers): New variable. + (nndraft-generate-headers): Use it. + + * gnus-registry.el (gnus-registry-wash-for-keywords): Bind `word'. + +2006-10-16 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-wash-for-keywords) + (gnus-registry-find-keywords): New functions to allow easy searching of + articles that are in the registry. + +2006-10-16 Teodor Zlatanov + + * spam.el (spam-check-BBDB, spam-enter-ham-BBDB, spam-parse-list): Use + ietf-drums-parse-address instead of gnus-extract-address-components. + Reported by Damien Elmes . + +2006-10-19 Reiner Steib + + * gnus.el (gnus-mime): Remove unused custom group. + +2006-10-13 Andreas Seltenreich + + * mm-uu.el (mm-uu-pgp-signed-extract-1): Use RFC 2440 definition of + "blank line" when searching for end of armor headers. + +2006-10-11 Katsumi Yamaoka + + * gmm-utils.el (gmm-write-region): Fix variable name. + +2006-10-10 Reiner Steib + + * gmm-utils.el (gmm-write-region): New function based on compatibility + code from `mm-make-temp-file'. + + * mm-util.el (mm-make-temp-file): Use `gmm-write-region'. + + * nnmaildir.el (nnmaildir--update-nov) + (nnmaildir-request-replace-article, nnmaildir-request-accept-article): + Use `gmm-write-region'. + +2006-10-04 Reiner Steib + + * mm-util.el (mm-charset-synonym-alist, mm-charset-override-alist): Add + iso-8859-8/windows-1255 and iso-8859-9/windows-1254. + + * nnheader.el (nnheader-find-file-noselect): Inhibit version-control. + + * message.el (message-replacement-char): New variable. + (message-fix-before-sending): Use it. + (message-simplify-subject): New function to remove duplicate code. + (message-reply, message-followup): Use it. + + * gnus-sum.el (gnus-summary-make-menu-bar): Clarify + gnus-summary-limit-to-articles. + +2006-10-03 Katsumi Yamaoka + + * gnus-util.el (gnus-with-local-quit): New macro. + + * gnus-demon.el (gnus-demon): Replace with-local-quit with it. + +2006-10-02 Teodor Zlatanov + + * gnus-util.el (gnus-string-remove-all-properties): Another fix to + ignore non-string data. + +2006-09-29 Teodor Zlatanov + + * gnus-util.el (gnus-string-remove-all-properties): Fix to ignore + non-string data (needs to be done in the registry too). + +2006-09-28 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-save, gnus-registry-cache-save) + (gnus-registry-remove-alist-text-properties, gnus-registry-action) + (gnus-registry-split-fancy-with-parent) + (gnus-registry-fetch-simplified-message-subject-fast) + (gnus-registry-fetch-sender-fast, gnus-registry-store-extra-entry): + Remove text properties on ingress into the registry and when it's saved. + (gnus-registry-clean-empty-function): Fix bug with cleaning the + registry from entries with no groups. + +2006-09-28 Teodor Zlatanov + + * gnus-util.el (gnus-string-remove-all-properties): Add utility + function to remove string properties. + +2006-09-28 Reiner Steib + + * gmm-utils.el (gmm): Adjust custom version. + + * mm-util.el (mm-charset-override-alist, mm-charset-eval-alist): Adjust + custom version. + + * gnus-draft.el (gnus-draft-mode): Don't call `mml-mode'. + +2006-09-27 Reiner Steib + + * gnus-art.el (gnus-insert-prev-page-button) + (gnus-insert-next-page-button): Simplify. Reformat. + +2006-09-27 Maxime Edouard Robert Froumentin + + * gnus-art.el (gnus-insert-prev-page-button) + (gnus-insert-next-page-button): Apply gnus-article-button-face. + +2006-09-25 Chong Yidong + + * gnus-demon.el (gnus-demon): Use with-local-quit to avoid hangs. + +2006-09-20 Maxime Edouard Robert Froumentin + + (gnus-insert-mime-button, gnus-insert-mime-security-button): Apply + gnus-article-button-face to MIME and security buttons. + +2006-09-20 Reiner Steib + + * gnus-art.el (gnus-button-url-regexp): Try to make the value more + readable. + +2006-09-20 Katsumi Yamaoka + + * dgnushack.el: Autoload browse-url-of-file for XEmacs. + +2006-09-20 Steve Youngs + + * gnus-art.el (gnus-article-browse-html-parts): They're files, so use + `browse-url-of-file' instead of `browse-url'. + +2006-09-19 Andreas Seltenreich + + * nnslashdot.el (nnslashdot-request-article): Update end-of-article + regexp. Articles containing quotation were cut prematurely. + +2006-09-16 Katsumi Yamaoka + + * message.el (message-cite-original-1): Use nobody by default for the + value of From header. + (message-reply): Ditto. + +2006-09-11 Daiki Ueno + + * mml2015.el (mml2015-epg-clear-decrypt): Don't append verify results + to the gnus-info. This fixes a bug of inline-PGP message verification. + Reported by Michael Piotrowski . + +2006-09-09 Reiner Steib + + * pop3.el (pop3-leave-mail-on-server): Mention problem of duplicate + mails in the doc string. Add some URLs in comment. + (pop3-movemail): Warn about pop3-leave-mail-on-server. + +2006-09-07 Katsumi Yamaoka + + * rfc2047.el (rfc2047-quote-special-characters-in-quoted-strings): Fix + backslashes handling and the way to find boundaries of quoted strings. + +2006-09-07 Daiki Ueno + + * mml1991.el (mml1991-epg-encrypt): Simply throw an error if + mml1991-encrypt-to-self is set and mml1991-signers is not set. + * mml2015.el (mml2015-epg-encrypt): Simply throw an error if + mml2015-encrypt-to-self is set and mml2015-signers is not set. + +2006-09-06 Reiner Steib + + * gnus-art.el (gnus-button-marker-list): Move up. Convert comment into + doc string. + (gnus-button-regexp, gnus-button-last): Remove unused variables. + +2006-09-06 Katsumi Yamaoka + + * lpath.el: Fbind epg-check-configuration. + +2006-09-06 Simon Josefsson + + * mml2015.el (mml2015-use): Doc fix, mention epg. + +2006-09-06 Daiki Ueno + + * mml2015.el (mml2015-use): Default to epg, if available. + +2006-09-06 Daiki Ueno + + * mml1991.el (mml1991-epg-sign): Don't lookup a private key by + message-sender. + (mml1991-epg-encrypt): Ditto. + * mml2015.el (mml2015-epg-sign): Don't lookup a private key by + message-sender. + (mml2015-epg-encrypt): Ditto. + +2006-09-04 Chong Yidong + + * message.el (message-send-mail-with-sendmail): Look for sendmail in + several common directories. + +2006-09-05 Daiki Ueno + + * mml2015.el (mml2015-epg-encrypt): Expand group configuration. + * mml1991.el (mml1991-epg-encrypt): Expand group configuration. + +2006-09-04 Katsumi Yamaoka + + * gnus-art.el (article-decode-encoded-words): Make it fast. + +2006-09-04 Katsumi Yamaoka + + * gnus-art.el (article-decode-encoded-words): Don't infloop in XEmacs. + + * rfc2047.el (rfc2047-strip-backslashes-in-quoted-strings): Decode `\\' + in quoted string into `\'. + +2006-09-01 Katsumi Yamaoka + + * rfc2047.el (rfc2047-quote-special-characters-in-quoted-strings): + Use standard-syntax-table. + +2006-09-01 Katsumi Yamaoka + + * gnus-art.el (gnus-decode-address-function): New variable. + (article-decode-encoded-words): Use it to decode headers which are + assumed to contain addresses. + (gnus-mime-delete-part): Remove useless `or'. + + * gnus-sum.el (gnus-decode-encoded-address-function): New variable. + (gnus-summary-from-or-to-or-newsgroups): Use it to decode To header. + (gnus-nov-parse-line): Use it to decode From header. + (gnus-get-newsgroup-headers): Ditto. + (gnus-summary-enter-digest-group): Use it to decode `to-address'. + + * mail-parse.el (mail-decode-encoded-address-region): New alias. + (mail-decode-encoded-address-string): New alias. + + * rfc2047.el (rfc2047-quote-special-characters-in-quoted-strings): + New function. + (rfc2047-encode-message-header, rfc2047-encode-region): Use it. + (rfc2047-strip-backslashes-in-quoted-strings): New fnction. + (rfc2047-decode-region): Use it; add optional argument `address-mime'. + (rfc2047-decode-string): Ditto. + (rfc2047-decode-address-region): New function. + (rfc2047-decode-address-string): New function. + +2006-08-31 Reiner Steib + + * message.el (message-caesar-buffer-body): Allow rotating headers. + + * gnus-sum.el (gnus-summary-caesar-message): Allow rotating headers. + + * message.el (message-insert-formated-citation-line): Fix %f. + Reported by Torsten Bronger . + +2006-08-18 Katsumi Yamaoka + + * gnus-bookmark.el (gnus-bookmark-file-coding-system): New variable. + (gnus-bookmark-mouse-available-p): New macro. + (gnus-bookmark-bmenu-list): Use it; use gnus-mouse-2. + (gnus-bookmark-bmenu-show-infos): Use it. + (gnus-bookmark-insert-details): Use it; use gnus-mouse-2. + (gnus-bookmark-bmenu-hide-infos): Ditto. + (gnus-bookmark-remove-properties): New function. + (gnus-bookmark-set, gnus-bookmark-make-cell): Use it. + (gnus-bookmark-set-bookmark-name): Don't use 2nd arg of split-string. + (gnus-bookmark-write-file): Bind coding-system-for-write. + (gnus-bookmark-insert-file-format-version-stamp): Add coding cookie. + (gnus-bookmark-jump): Make completing-read work with XEmacs; activate + group before selecting it. + (gnus-bookmark-get-bookmark): Use assoc instead of assoc-string. + (gnus-bookmark-bmenu-mode-map): Bind `q' to bury-buffer instead of + quit-window if it is not available; use gnus-mouse-2 and bind it to + gnus-bookmark-bmenu-select-by-mouse. + (gnus-bookmark-show-details): Remove unused variable `details-list'. + (gnus-bookmark-bmenu-select-by-mouse): New function. + +2006-08-13 Romain Francoise + + * mm-extern.el (mm-extern-mail-server): End `y-or-n-p' prompt with a + space. + +2006-08-09 Katsumi Yamaoka + + * compface.el (uncompface): Use binary rather than raw-text-unix. + +2006-08-09 Katsumi Yamaoka + + * compface.el (uncompface): Make sure the eol conversion doesn't take + place when communicating with the external programs. Reported by + ARISAWA Akihiro . + +2006-07-31 Katsumi Yamaoka + + * nnheader.el (nnheader-insert-head): Fix typo in comment. + +2006-07-31 Andreas Seltenreich + + * nnweb.el (nnweb-google-parse-1): Update regexp for author and date. + Make it more robust by parsing author and date independently. + +2006-07-28 Katsumi Yamaoka + + * nnheader.el (nnheader-insert-head): Make it work with Mac as well. + +2006-07-28 Daiki Ueno + + * mml2015.el (mml2015-epg-sign): If mml2015-signers is not set, use the + first matching secret key. + (mml2015-epg-encrypt): Ditto. + + * mml1991.el (mml1991-epg-sign): If mml1991-signers is not set, use the + first matching secret key. + (mml1991-epg-encrypt): Ditto. + + * mml2015.el (mml2015-encrypt-to-self): New user option. + (mml2015-epg-encrypt): Append mml2015-signers to recipients list if + mml2015-epg-encrypt-to-self is set. + + * mml1991.el (mml1991-encrypt-to-self): New variable. + (mml1991-epg-encrypt): Append mml1991-signers to recipients list if + mml1991-epg-encrypt-to-self is set. + + * mml2015.el (mml2015-signers): New user option. + (mml2015-epg-sign): Reflect the value of mml2015-signers. + (mml2015-epg-encrypt): Allow to select signing keys. + + * mml1991.el (mml1991-signers): New variable. + (mml1991-epg-sign): Reflect the value of mml1991-signers. + (mml1991-epg-encrypt): Allow to select signing keys. + +2006-07-27 Katsumi Yamaoka + + * nnheader.el (nnheader-insert-head): Make it work even if the file + uses CRLF for the line-break code. + +2006-07-25 Daiki Ueno + + * mml2015.el: Require mml-sec instead of password. + (mml2015-verbose): Inherit the default value from mml-secure-verbose. + (mml2015-cache-passphrase): Inherit the default value from + mml-secure-cache-passphrase. + (mml2015-passphrase-cache-expiry): Inherit the default value from + mml-secure-passphrase-cache-expiry. + + * mml1991.el: Require mml-sec instead of password. + (mml1991-verbose): Inherit the default value from mml-secure-verbose. + (mml1991-cache-passphrase): Inherit the default value from + mml-secure-cache-passphrase. + (mml1991-passphrase-cache-expiry): Inherit the default value from + mml-secure-passphrase-cache-expiry. + + * mml-sec.el: Require password. + (mml-secure-verbose): New user option. + (mml-secure-cache-passphrase): New user option. + (mml-secure-passphrase-cache-expiry): New user option. + +2006-07-24 Daiki Ueno + + * pgg-def.el (pgg-truncate-key-identifier): Truncate the key ID to 8 + letters from the end. Thanks to "David Smith" and + andreas@altroot.de (Andreas V,Av(Bgele) + + FIXME: Use `tiny change'? + +2006-07-19 Andreas Seltenreich + + * mm-url.el (mm-url-insert-file-contents): Inhibit Connection: close + workaround for the url package included with Emacs. + + * nnweb.el (nnweb-google-create-mapping): Update regexp. + +2006-07-19 Katsumi Yamaoka + + * gnus-sum.el (gnus-select-newsgroup): Setup the article buffer + correctly. This fixes a bug caused by the 2006-05-12 change. + +2006-07-18 Karl Fogel + + * nnmail.el (nnmail-article-group): If splitting raises an error, give + some information about the error when saying that the `bogus' mail + group will be used. + +2006-07-17 Reiner Steib + + * gnus-sum.el (gnus-summary-delete-article): Don't use TAB in doc + string. + +2006-07-16 NAKAJI Hiroyuki (tiny change) + + * mm-util.el (mm-charset-synonym-alist): Map windows-31j to cp932. + +2006-07-14 Andreas Seltenreich + + * gnus-start.el (gnus-subscribe-options-newsgroup-method): Doc fix. + +2006-07-10 Daiki Ueno + + * mml1991.el (mml1991-function-alist): Add epg. + (mml1991-epg-passphrase-callback, mml1991-epg-sign) + (mml1991-epg-encrypt): New functions. + +2006-07-10 Daiki Ueno + + * mml2015.el (mml2015-verbose): New variable. + (mml2015-cache-passphrase): Ditto. + (mml2015-passphrase-cache-expiry): Ditto. + (mml2015-function-alist): Add epg. + (mml2015-epg-passphrase-callback, mml2015-epg-decrypt) + (mml2015-epg-clear-decrypt, mml2015-epg-verify) + (mml2015-epg-clear-verify, mml2015-epg-sign, mml2015-epg-encrypt): New + functions. + +2006-07-08 Andreas Seltenreich + + * message.el (message-cite-original-1): Preserve region when removing + quoted text due to X-No-Archive in order to avoid bogus attribution + when citing multiple messages. + +2006-06-27 Andreas Seltenreich + + * gnus-group.el (gnus-group-sort-by-unread): Fix typo. Reported by + Kenneth Jacker . + +2006-06-26 Reiner Steib + + * gnus-diary.el (gnus-user-format-function-d) + (gnus-user-format-function-D): Autoload. + + * imap.el (Commentary): Fix typo. + + * gnus-util.el (kill-empty-logs, gnus-byte-compile): Remove anonymous + 2006-04-22 contribution. + +2006-06-26 Andreas Seltenreich + + * gnus.el (gnus-valid-select-methods): Revert last change for nnweb. + It didn't really fix the bogosity I'm seeing with solid web groups. + +2006-06-26 Andreas Seltenreich + + * gnus.el (gnus-valid-select-methods): Declare nnweb with 'address. + Since revision 6.95 (2003-01-05) of gnus-group.el, solid web groups are + created using server names. If we use the feature without declaring + it, Gnus does not properly manage server and group state. + + * nnweb.el (nnweb-google-search): Respect nnweb-max-hits as upper + bound. + +2006-06-25 Andreas Seltenreich + + * gnus.el (gnus-find-method-for-group): On killed/unknown groups, try + looking up the method using GROUP's prefix before inventing a new one. + It is used on killed/unknown groups in various places where returning + an all-new method isn't expected by the caller. + + * gnus-util.el (gnus-group-server): Fix for empty virtual server names + and match semantics of gnus-group-real-prefix. + +2006-06-22 Reiner Steib + + * nnmail.el (nnmail-broken-references-mailers): New variable. + (nnmail-ignore-broken-references): New function generalizing + nnmail-fix-eudora-headers. + (nnmail-fix-eudora-headers): Now obsolete. + + * gnus-art.el (gnus-button-handle-custom): Support + `customize-apropos*'. + +2006-06-21 Lars Magne Ingebrigtsen + + * gnus-art.el (article-hide-headers): Inhibit read-only stuff. + + * gnus-group.el (gnus-fetch-group): Document ARTICLES and select those + articles. + +2006-06-21 Reiner Steib + + * message.el (message-cite-reply-above): New variable. + (message-yank-original): Use it. + +2006-06-20 Katsumi Yamaoka + + * rfc2231.el (rfc2231-parse-string): Allow `*'s in parameter values. + +2006-06-20 Reiner Steib + + * gnus-bookmark.el (gnus-bookmark-jump): Don't mark unrelated articles + as read. + + * gnus-group.el (gnus-group-quick-select-group): Add GROUP argument. + +2006-06-19 Reiner Steib + + * gnus-bookmark.el: Fix Copyright, keywords, whitespace, etc. + (gnus-bookmark-default-file): Use gnus-directory. + (gnus-bookmark-bmenu-file-column, gnus-bookmark-use-annotations): + Remove "*" in doc string. + (gnus-bookmark-write-file): Simplify. + (gnus-bookmark-maybe-sort-alist): Use `when'. + (gnus-bookmark-get-bookmark): Fix typo in doc string. + (gnus-bookmark-set-bookmark-name, gnus-bookmark-get-bookmark): Add + FIXME about Emacs 21 and XEmacs compatibility. + (gnus-bookmark-set-bookmark-name): Use `gnus-replace-in-string' for + compatibility. + (gnus-bookmark-bmenu-mode): Use `gnus-run-mode-hooks' for + compatibility. + (gnus-bookmark-menu-heading): Fix version. + +2006-06-19 Bastien Guerry + + * gnus-bookmark.el: New file. + +2006-06-19 Katsumi Yamaoka + + * message.el (message-syntax-checks): Doc fix. + +2006-06-17 Andreas Seltenreich + + * gnus-srvr.el (gnus-browse-unsubscribe-group): Don't subscribe + unsubscribed groups as if they were killed ones. It causes duplicate + entries in gnus-newsrc-alist. + +2006-06-16 Katsumi Yamaoka + + * message.el (message-syntax-checks): Doc fix. + (message-send-mail): Add check for continuation headers. + (message-check-news-header-syntax): Fix regexp used to check for + continuation headers. + +2006-06-14 Katsumi Yamaoka + + * gnus-art.el (gnus-display-mime): Make sure body ends with newline. + +2006-06-11 Reiner Steib + + * gnus-art.el (gnus-article-toggle-truncate-lines): Fix code. + +2006-06-11 Katsumi Yamaoka + + * gnus-art.el (gnus-article-truncate-lines): Default to the value of + default-truncate-lines. + +2006-06-06 Katsumi Yamaoka + + * mm-util.el (mm-mime-mule-charset-alist): Use unicode-precedence-list + to fill the utf-8 entry. + + * lpath.el: Fbind unicode-precedence-list. + +2006-06-01 Andreas Seltenreich + + * nnweb.el (nnweb-google-parse-1): Update regexp for author and date. + +2006-05-30 Kevin Greiner + + * gnus-agent.el (directory-files-and-attributes): Move all the way + forward (the third and final move). + (gnus-agent-read-agentview): Trap reconstruction errors due to + nonexistant directory. Handle by returning nil. + +2006-05-30 Didier Verna + + * message.el (message-dont-reply-to-names): Update the custom type. + * message.el (message-dont-reply-to-names): New defsubst: potentially + convert a list of regexps into a single one. + * message.el (message-get-reply-headers): Use it. + * nnmail.el (nnmail-fancy-expiry-target): Ditto. + +2006-05-30 Katsumi Yamaoka + + * gnus-agent.el (directory-files-and-attributes): Move forward. + +2006-05-29 Reiner Steib + + * gnus-ml.el (gnus-mailing-list-subscribe) + (gnus-mailing-list-unsubscribe, gnus-mailing-list-owner) + (gnus-mailing-list-message): Fix doc strings. + +2006-05-29 Andreas Seltenreich + + * gnus-ml.el (gnus-mailing-list-message): Use gnus-url-mailto instead + of doing it manually. + +2006-05-29 Reiner Steib + + * gnus-art.el (gnus-article-toggle-truncate-lines): Fix typo in + comment. + +2006-05-29 Kevin Greiner + + * gnus-agent.el (Added gnus-agent-flush*) to purge agent info. + (gnus-agent-read-agentview): Fixed handling of end-of-file error. + (gnus-agent-read-local): All symbols allocated in my-obarray + (gnus-agent-set-local): Skip invalid entries (min and/or max is nil). + (gnus-agent-regenerate-group): Check numeric names to see if they are + messages or groups. + (gnus-agent-total-fetched-for): Ignore 'dummy.group' (there should be a + better way of do this...) + + * gnus-cache.el (gnus-agent-total-fetched-for): Ignore + 'dummy.group' (there should be a better way of do this...) + +2006-05-29 Katsumi Yamaoka + + * gnus-art.el (gnus-save-all-headers): Mention it might be overridden. + (gnus-saved-headers): Ditto. + (gnus-default-article-saver): Mention functions may have properties. + (gnus-article-save): Override gnus-save-all-headers and + gnus-saved-headers by :headers property which saver function may have. + (gnus-summary-save-in-file): Add :headers property. + (gnus-summary-write-to-file): Ditto. + + * gnus-sum.el (gnus-summary-save-article): Bind + gnus-prompt-before-saving to t when saving many articles in a file; + always show all headers. + + * dgnushack.el: Autoload toggle-truncate-lines for XEmacs. + +2006-05-26 Reiner Steib + + * deuglify.el (gnus-outlook-rearrange-article): Add missing citation + marks. + + * message.el (message-indent-citation): Add optional arguments to allow + using it outside of message buffers. + + * gnus-art.el (gnus-article-unfold-long-headers): New variable. + (gnus-article-treat-unfold-headers): Use it. + (gnus-article-truncate-lines): New variable. + (gnus-article-mode): Use it. + (gnus-article-toggle-truncate-lines): New function. + + * gnus-sum.el (gnus-summary-wash-map, gnus-summary-make-menu-bar): Add + gnus-article-toggle-truncate-lines. + + * uudecode.el (uudecode-decode-region-external): nil isn't a valid + coding system in XEmacs, use binary. + +2006-05-26 Katsumi Yamaoka + + * mm-util.el (mm-enrich-utf-8-by-mule-ucs): Don't edit + after-load-alist. + + * gnus-art.el (gnus-summary-save-in-file): Use property to specify + this function should save decoded articles. + (gnus-summary-write-to-file): Use property to specify this function + should save decoded articles and specify gnus-summary-save-in-file + should be used to save articles other than the first one when saving + many articles. + (gnus-summary-save-body-in-file): Use property to specify this + function should save decoded articles. + (gnus-summary-write-body-to-file): Use property to specify this + function should save decoded articles and specify + gnus-summary-save-body-in-file should be used to save articles other + than the first one when saving many articles. + + * gnus-sum.el (gnus-summary-save-article): Simplify. + +2006-05-25 Katsumi Yamaoka + + * gnus-art.el (gnus-default-article-saver): Add + gnus-summary-write-body-to-file. + (gnus-article-save-coding-system): Don't use coding system object + in XEmacs. + (gnus-read-save-file-name): Add optional `dir-var' argument which + specifies directory in which files are saved; work even if optional + `variable' argument is not specified. + (gnus-summary-write-to-file): Read file name. + (gnus-summary-save-body-in-file): Add optional `overwrite' argument. + (gnus-summary-write-body-to-file): New function. + + * gnus-sum.el (gnus-newsgroup-last-directory): New variable. + (gnus-summary-local-variables): Add it. + (gnus-summary-save-map): Add gnus-summary-write-article-body-file. + (gnus-summary-save-article): Remove optional `decode' argument; + determine whether to decode articles by the value of + gnus-default-article-saver; when saving many files using + gnus-summary-write-to-file or gnus-summary-write-body-to-file, use + it first and use gnus-summary-save-in-file or + gnus-summary-save-body-in-file thereafter unless + gnus-prompt-before-saving is always; move point to article which + will be saved. + (gnus-summary-save-article-file): Revert. + (gnus-summary-write-article-file): Revert. + (gnus-summary-save-article-body-file): Revert. + (gnus-summary-write-article-body-file): New function. + +2006-05-24 Katsumi Yamaoka + + * gnus-art.el (gnus-default-article-saver): Doc fix. + (gnus-article-save-coding-system): Move from gnus-sum.el, rename + from gnus-summary-save-article-coding-system, and default to a + certain coding system. + (gnus-output-to-file): Add coding cookie and encode text according + to gnus-article-save-coding-system; don't use mm-append-to-file. + + * gnus-sum.el (gnus-summary-save-article-coding-system): Move to + gnus-art.el and rename to gnus-article-save-coding-system. + (gnus-summary-save-article): Require gnus-art; don't show all + headers if it decodes articles; don't add coding cookie here; + don't bind mm-text-coding-system-for-write. + (gnus-summary-save-article-file): Save decoded articles. + (gnus-summary-write-article-file): When saving many files, use + gnus-summary-write-to-file first and gnus-summary-save-in-file + thereafter unless gnus-prompt-before-saving is always. + (gnus-summary-save-article-body-file): Save decoded articles. + + * lpath.el: Fbind select-safe-coding-system for XEmacs. + +2006-05-23 Reiner Steib + + * nnrss.el (nnrss-check-group): Bind hash-index. + +2006-05-23 Michael Cadilhac + + * nnrss.el (nnrss-check-group): Use the md5sum of the whole RSS item as + its hash index. Store this hash in `nnrss-group-data'. + (nnrss-read-group-data): Update accordingly. + +2006-05-23 Reiner Steib + + * gnus-art.el (gnus-button-alist): Improve gnus-button-handle-symbol + entry. + + * gnus-sum.el (gnus-summary-make-menu-bar): Add + gnus-article-browse-html-article. + +2006-05-23 Hynek Schlawack + + * gnus-sum.el (gnus-summary-mime-map): Add + gnus-article-browse-html-article. + + * gnus-art.el (gnus-article-browse-html-article): Remove comment. + +2006-05-23 Reiner Steib + + * gnus-sum.el (gnus-summary-save-article-coding-system): Offer some + suitable coding systems in customize. + +2006-05-22 Reiner Steib + + * mail-source.el (mail-sources): Fix custom type. + +2006-05-18 Reiner Steib + + * gnus-sum.el (gnus-summary-save-article-mail): Clarify doc string. + (gnus-summary-expire-articles-now): Shorten prompt. + + * gmm-utils.el (wid-edit): Require. + (defun-gmm): Renamed from `gmm-defun-compat'. + (gmm-image-search-load-path): Use it. + (gmm-image-load-path-for-library): Use it. Sync with `mh-compat.el'. + +2006-05-17 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-save-article-coding-system): New + variable. + (gnus-summary-save-article): Add optional `decode' argument. If + it is set and gnus-summary-save-article-coding-system is non-nil, + save decoded article. + (gnus-summary-write-article-file): Save decoded article if + gnus-summary-save-article-coding-system is non-nil. + + * ecomplete.el (ecomplete-database-file-coding-system): Fix custom + type. + +2006-05-16 Katsumi Yamaoka + + * gnus-art.el (easy-menu-define): Use :active instead of :enable. + +2006-05-12 Katsumi Yamaoka + + * gnus-art.el (gnus-article-setup-buffer): Go to summary buffer + first to test gnus-single-article-buffer which may be buffer-local. + + * gnus-sum.el (gnus-summary-setup-buffer): Make + gnus-single-article-buffer buffer-local and nil in ephemeral + group; make gnus-article-buffer, gnus-article-current, and + gnus-original-article-buffer always buffer-local. + (gnus-summary-exit): Kill article buffer belonging to ephemeral + group. + (gnus-handle-ephemeral-exit): Don't move to next summary line. + +2006-05-08 Reiner Steib + + * nnml.el (nnml-request-compact-group): Compressed files might not + have .gz extension. + +2006-05-04 Stefan Monnier + + * mm-decode.el (mm-dissect-buffer): Remove spurious double assignment. + (mm-copy-to-buffer): Use with-current-buffer. + (mm-display-part): Simplify. + (mm-inlinable-p): Add optional arg `type'. + +2006-05-03 Stefan Monnier + + * gnus-art.el (gnus-mime-view-part-as-type): Add optional PRED arg. + (gnus-mime-view-part-externally, gnus-mime-view-part-internally): + Try harder to show the attachment internally or externally using + gnus-mime-view-part-as-type. + +2006-05-02 Reiner Steib + + * message.el (message-from-style, message-signature-separator) + (message-user-organization-file, message-send-mail-function) + (message-citation-line-function, message-yank-prefix) + (message-indent-citation-function, message-signature) + (message-signature-file, message-signature-insert-empty-line): + Remove autoloads. + + * gnus-art.el (gnus-buttonized-mime-types): Remove + "multipart/signed". Revert 2006-04-26 change. + 2006-05-01 Lars Magne Ingebrigtsen * gnus.el (gnus-version-number): Bump version. -2006-05-01 Lars Magne Ingebrigtsen +2006-05-01 Lars Magne Ingebrigtsen * gnus.el: No Gnus v0.5 is released. @@ -16,7 +1776,7 @@ * message.el (hashcash): Require hashcash as normal. * ecomplete.el (ecomplete-highlight-match-line): Use - point-at-eol. + point-at-eol. (ecomplete-highlight-match-line): Use `highlight', because that face exists in both Emacs and XEmacs. @@ -36,7 +1796,7 @@ * mm-util.el: Require timer/timer-funcs. -2006-04-23 Andreas Seltenreich (tiny change) +2006-04-23 Andreas Seltenreich * mm-url.el (mm-url-insert-file-contents): Don't set Connection: Close. @@ -140,7 +1900,7 @@ * mm-decode.el (mm-automatic-display): Don't make application/pgp element match to application/pgp-*. -2006-04-23 Andreas Seltenreich (tiny change) +2006-04-23 Andreas Seltenreich * nnweb.el (nnweb-google-wash-article): Sync up to new Google HTML. @@ -183,13 +1943,13 @@ 2006-04-20 Reiner Steib - * gnus-util.el (gnus-replace-in-string): Prefer - replace-regexp-in-string over of replace-in-string. + * gnus-util.el (gnus-replace-in-string): + Prefer replace-regexp-in-string over of replace-in-string. 2006-04-20 Katsumi Yamaoka - * gnus-util.el (gnus-select-frame-set-input-focus): Use - select-frame-set-input-focus if it is available in XEmacs; use + * gnus-util.el (gnus-select-frame-set-input-focus): + Use select-frame-set-input-focus if it is available in XEmacs; use definition defined in Emacs 22 for old Emacsen. * dgnushack.el: Autoload unmorse-region for XEmacs. @@ -203,8 +1963,8 @@ 2006-04-18 Teodor Zlatanov - * gnus-registry.el (gnus-registry-cache-save): remove text - properties when saving via the temp buffer + * gnus-registry.el (gnus-registry-cache-save): Remove text + properties when saving via the temp buffer. 2006-04-18 Reiner Steib @@ -257,9 +2017,9 @@ (rfc2231-parse-string): Allow concatanation of parameters that aren't contiguous. The test case is (mail-header-parse-content-type "message/external-body; - name*0*=us-ascii''~%2ffoo%2fbar%2fbaz%2fxyzzy%2f; - access-type=LOCAL-FILE; - name*1*=plugh%2fhello-sailor%2fbing.pdf") + name*0*=us-ascii''~%2ffoo%2fbar%2fbaz%2fxyzzy%2f; + access-type=LOCAL-FILE; + name*1*=plugh%2fhello-sailor%2fbing.pdf") 2006-04-17 Stefan Monnier @@ -388,6 +2148,8 @@ 2006-04-13 Romain Francoise + TODO: Backport to v5-10! + * gnus-util.el (gnus-alist-to-hashtable, gnus-hashtable-to-alist): Moved here (and renamed) from gnus-registry.el. @@ -547,8 +2309,8 @@ 2006-04-04 Andreas Seltenreich - * nnweb.el (nnweb-google-create-mapping): Update regexp. Some - whitespace was matched into the url, which broke browsing hits + * nnweb.el (nnweb-google-create-mapping): Update regexp. + Some whitespace was matched into the url, which broke browsing hits > 100 when mm-url-use-external was nil. 2006-04-04 Reiner Steib @@ -579,8 +2341,7 @@ 2006-03-31 Reiner Steib - * gnus-group.el (gnus-group-update-tool-bar): Add :initialize and - :set. + * gnus-group.el (gnus-group-update-tool-bar): Add :initialize and :set. 2006-03-29 Daiki Ueno @@ -609,8 +2370,7 @@ 2006-03-26 Andreas Seltenreich - * message.el (message-resend): Bind message-generate-hashcash to - to nil. + * message.el (message-resend): Bind message-generate-hashcash to nil. 2006-03-26 Andreas Seltenreich @@ -680,8 +2440,8 @@ * gnus-agent.el (gnus-agent-queue-mail): Fix custom tag for `t'. - * spam.el (spam-mark-new-messages-in-spam-group-as-spam): Add - comment on version. + * spam.el (spam-mark-new-messages-in-spam-group-as-spam): + Add comment on version. 2006-03-20 Reiner Steib @@ -724,10 +2484,10 @@ 2006-03-15 Andreas Seltenreich - * gnus-art.el (gnus-article-only-boring-p): Bind - inhibit-point-motion-hooks to avoid infinite loop when entering - intangible text. Reported by Ralf Wachinger - . + * gnus-art.el (gnus-article-only-boring-p): + Bind inhibit-point-motion-hooks to avoid infinite loop when entering + intangible text. + Reported by Ralf Wachinger . 2006-03-14 Reiner Steib @@ -737,8 +2497,8 @@ 2006-03-14 Simon Josefsson * message.el (message-unique-id): Don't use message-number-base36 - if (user-uid) is a float. Reported by Bjorn Solberg - . + if (user-uid) is a float. + Reported by Bjorn Solberg . 2006-03-13 Katsumi Yamaoka @@ -831,7 +2591,7 @@ handle is multipart when calling it recursively. (mm-w3m-cid-retrieve): Display warning if retrieving fails. -2006-03-03 Daniel Pittman +2006-03-03 Daniel Pittman * nnimap.el (nnimap-request-update-info-internal): Optimize. Don't `gnus-uncompress-range' to avoid excessive memory usage. @@ -854,8 +2614,7 @@ 2006-03-03 Katsumi Yamaoka - * mm-decode.el (mm-get-part): Don't use - mm-with-unibyte-current-buffer. + * mm-decode.el (mm-get-part): Don't use mm-with-unibyte-current-buffer. * gnus-sum.el (gnus-summary-set-display-table): Don't nix out characters 160 through 255 in Emacs 23. @@ -1084,7 +2843,7 @@ LIBRARY, IMAGE and PATH. Don't modify paths. Don't use *-image-load-path-called-flag. -2006-02-21 Milan Zamazal +2006-02-21 Milan Zamazal * mm-view.el (mm-view-pkcs7-verify): Implement using smime.el. @@ -1276,8 +3035,8 @@ 2006-02-06 Reiner Steib - * spam-report.el (spam-report-gmane-use-article-number): Improve - doc string. + * spam-report.el (spam-report-gmane-use-article-number): + Improve doc string. (spam-report-gmane-internal): Check if a suitable header was found in the article. @@ -1312,21 +3071,18 @@ * nnweb.el (nnweb-group-alist): Use defvar instead of defvoo, there's only one active file for all servers. (nnweb-request-scan): Make sure nnweb-articles is initialized on - solid groups. Gnus might have used a FAST request to select the - group. + solid groups. Gnus might have used a FAST request to select the group. (nnweb-request-group, nnweb-google-parse-1): Don't keep nnweb-type and nnweb-search redundantly in the active file. - (nnweb-request-list): Don't list bogus groups. There can only be - one. + (nnweb-request-list): Don't list bogus groups. There can only be one. (nnweb-request-create-group): Don't use ARGS. (nnweb-possibly-change-server, nnweb-request-group): Remove some initialisations. Let nnoo do the work. 2006-01-31 Katsumi Yamaoka - * mm-uu.el (mm-uu-emacs-sources-extract): Say the part has been - decoded. - (mm-uu-diff-extract): Ditto. + * mm-uu.el (mm-uu-emacs-sources-extract, mm-uu-diff-extract): + Say the part has been decoded. * mm-view.el (mm-display-inline-fontify): Get decoded part rightly. @@ -1932,7 +3688,7 @@ * flow-fill.el (fill-flowed): Bind adaptive-fill-mode to nil. -2005-11-16 Boris Samorodov (tiny patch) +2005-11-16 Boris Samorodov (tiny change) * imap.el (imap-kerberos4-open): Ignore SSL stuff. @@ -2151,7 +3907,7 @@ whitespace removed in revision 7.8. Use concatenated string to protect trailing whitespace. -2005-10-27 Jouni K Seppanen (tiny change) +2005-10-27 Jouni K. Sepp,Ad(Bnen * nnimap.el (nnimap-search-uids-not-since-is-evil): Add variable. (nnimap-request-expire-articles): Use it to avoid sending 'UID @@ -2519,13 +4275,13 @@ 2005-09-21 Teodor Zlatanov * spam.el (spam-use-gmane, spam-report-gmane-register-routine) - (spam-report-gmane-unregister-routine): added support for gmane - unregistration + (spam-report-gmane-unregister-routine): Add support for gmane + unregistration. * spam-report.el (spam-report-gmane-unspam) - (spam-report-gmane-spam): new wrappers around spam-report-gmane - (spam-report-gmane): changed to take a single article and do - unspam registration + (spam-report-gmane-spam): Add new wrappers around spam-report-gmane. + (spam-report-gmane): Change to take a single article and do unspam + registration. 2005-09-19 Reiner Steib @@ -2540,12 +4296,12 @@ 2005-09-20 Teodor Zlatanov - * gnus-start.el (gnus-activate-group): if the server is nil, don't - fail hard + * gnus-start.el (gnus-activate-group): If the server is nil, don't + fail hard. - * spam-report.el: better Keywords line + * spam-report.el: Add better Keywords line. - * spam.el: added Maintainer and better Keywords line + * spam.el: Add Maintainer and better Keywords line. 2005-09-19 Reiner Steib @@ -2799,7 +4555,7 @@ (gnus-decode-header-function, gnus-newsgroup-name): * spam-stat.el (gnus-original-article-buffer): Add defvars. -2005-08-22 Karl Chen (tiny change) +2005-08-22 Karl Chen * gnus-art.el (gnus-treatment-function-alist): Move date-lapsed to the end of the date treatments. @@ -3314,7 +5070,7 @@ process-kill-without-query. (starttls-open-stream): Ditto. -2005-05-31 Ulf Stegemann (tiny change) +2005-05-31 Ulf Stegemann (tiny change) * smime.el (smime-cert-by-ldap-1): Don't use replace-regexp-in-string. @@ -3534,7 +5290,7 @@ * nntp.el: Autoload format-spec instead of format; use eval-and-compile to evaluate autoload forms. -2005-05-09 Georg C. F. Greve (tiny change) +2005-05-09 Georg C. F. Greve (tiny change) * pgg-gpg.el (pgg-gpg-possibly-cache-passphrase): Fix PIN caching. @@ -3542,7 +5298,7 @@ * gnus.el (gnus-version-number): Bump version. -2005-05-01 Lars Magne Ingebrigtsen +2005-05-01 Lars Magne Ingebrigtsen * gnus.el: No Gnus v0.3 is released. @@ -3599,9 +5355,9 @@ 2005-04-14 Teodor Zlatanov - * message.el (message-kill-buffer-query-if-modified): new variable - so the user can kill a modified message buffer quickly - (message-kill-buffer): use it. + * message.el (message-kill-buffer-query-if-modified): Add new variable + so the user can kill a modified message buffer quickly. + (message-kill-buffer): Use it. 2005-04-13 Katsumi Yamaoka @@ -3644,15 +5400,15 @@ * gnus-registry.el (gnus-registry-clean-empty-function) (gnus-registry-trim, gnus-registry-fetch-groups) - (gnus-registry-delete-group): now groups that match - `gnus-registry-ignored-groups' will be removed from the registry + (gnus-registry-delete-group): Groups that match + `gnus-registry-ignored-groups' are removed from the registry entries, not just ignored for splitting. This helps clean up the registry. Also, `gnus-registry-fetch-groups' is a convenient way to get all the groups a message ID is in. * spam-stat.el (spam-stat-split-fancy-spam-threshold) - (spam-stat-split-fancy): changed "threshhold" to "threshold" - (spam-stat-score-buffer-user-functions): added :number custom type + (spam-stat-split-fancy): Change "threshhold" to "threshold" + (spam-stat-score-buffer-user-functions): Add :number custom type. 2005-04-06 Katsumi Yamaoka @@ -3827,37 +5583,45 @@ 2005-03-03 Teodor Zlatanov - * gnus-sum.el (gnus-summary-move-article): pass move-is-internal + * gnus-sum.el (gnus-summary-move-article): Pass move-is-internal parameter to invoked gnus-request-move-article; remove the redundant gnus-sum-hint-move-is-internal variable; apply the marks - all at once instead of once per article - (gnus-summary-remove-process-mark): accept a list of articles as - well as a single article for processing + all at once instead of once per article. + (gnus-summary-remove-process-mark): Accept a list of articles as + well as a single article for processing. - * gnus-int.el (gnus-request-move-article): add move-is-internal parameter + * gnus-int.el (gnus-request-move-article): Add move-is-internal + parameter. - * nnml.el (nnml-request-move-article): add move-is-internal parameter + * nnml.el (nnml-request-move-article): Add move-is-internal parameter. - * nnmh.el (nnmh-request-move-article): add move-is-internal parameter + * nnmh.el (nnmh-request-move-article): Add move-is-internal parameter. - * nnmbox.el (nnmbox-request-move-article): add move-is-internal parameter + * nnmbox.el (nnmbox-request-move-article): Add move-is-internal + parameter. - * nnmaildir.el (nnmaildir-request-move-article): add move-is-internal parameter + * nnmaildir.el (nnmaildir-request-move-article): Add move-is-internal + parameter. - * nnimap.el (nnimap-request-move-article): add move-is-internal - parameter and remove the gnus-sum-hint-move-is-internal variable + * nnimap.el (nnimap-request-move-article): Add move-is-internal + parameter and remove the gnus-sum-hint-move-is-internal variable. - * nnfolder.el (nnfolder-request-move-article): add move-is-internal parameter + * nnfolder.el (nnfolder-request-move-article): Add move-is-internal + parameter. - * nndraft.el (nndraft-request-move-article): add move-is-internal parameter + * nndraft.el (nndraft-request-move-article): Add move-is-internal + parameter. - * nndiary.el (nndiary-request-move-article): add move-is-internal parameter + * nndiary.el (nndiary-request-move-article): Add move-is-internal + parameter. - * nndb.el (nndb-request-move-article): add move-is-internal parameter + * nndb.el (nndb-request-move-article): Add move-is-internal parameter. - * nnbabyl.el (nnbabyl-request-move-article): add move-is-internal parameter + * nnbabyl.el (nnbabyl-request-move-article): Add move-is-internal + parameter. - * nnagent.el (nnagent-request-move-article): add move-is-internal parameter + * nnagent.el (nnagent-request-move-article): Add move-is-internal + parameter. 2005-03-01 Stefan Monnier @@ -3880,14 +5644,14 @@ 2005-02-25 Teodor Zlatanov - * gnus-sum.el (gnus-summary-move-article): set + * gnus-sum.el (gnus-summary-move-article): Set gnus-sum-hint-move-is-internal for gnus-request-move-article and whatever it calls (right now, only nnimap-request-move article - respects it) + respects it). - * nnimap.el (nnimap-request-move-article): when + * nnimap.el (nnimap-request-move-article): When gnus-sum-hint-move-is-internal is set, don't do the extra - nnimap-request-article + nnimap-request-article. 2005-02-24 Reiner Steib @@ -3962,9 +5726,9 @@ 2005-02-16 Teodor Zlatanov - * gnus-registry.el (gnus-registry-delete-group): Minor bug fix. + * gnus-registry.el (gnus-registry-delete-group): Add minor bug fix. - * gnus.el (gnus-install-group-spam-parameters): Doc fix. + * gnus.el (gnus-install-group-spam-parameters): Add minor doc fix. 2005-02-15 Simon Josefsson @@ -3978,8 +5742,8 @@ 2005-02-14 Teodor Zlatanov - * gnus.el (spam-contents): improve docs for spam-contents - parameter in its variable incarnation + * gnus.el (spam-contents): Improve docs for spam-contents + parameter in its variable incarnation. 2005-02-14 Simon Josefsson @@ -4018,7 +5782,7 @@ * gnus.el (gnus-group-startup-message): Search for gnus images in etc/images/gnus. - * mm-util.el (mm-find-charset-region): Likewise. + * mm-util.el (mm-image-load-path): Likewise. * smiley.el (smiley-data-directory): Search for smilies in etc/images/smilies. @@ -4039,8 +5803,8 @@ 2005-02-11 Teodor Zlatanov - * gnus-registry.el (gnus-registry-delete-group): small bug leaves - an ID in the registry even if it has no groups + * gnus-registry.el (gnus-registry-delete-group): Fix bug: leaves + an ID in the registry even if it has no groups. 2005-02-10 Katsumi Yamaoka @@ -4340,8 +6104,8 @@ 2004-12-23 Teodor Zlatanov - * spam.el (spam-check-BBDB): don't get the symbol-value of an - imaginary variable + * spam.el (spam-check-BBDB): Don't get the symbol-value of an + imaginary variable. 2004-12-22 Katsumi Yamaoka @@ -4350,9 +6114,9 @@ 2004-12-21 Teodor Zlatanov - * spam.el (spam-check-BBDB): fix the BBDB caching code to use + * spam.el (spam-check-BBDB): Fix the BBDB caching code to use downcased symbol names; make a new cache instead of reusing - bbdb-hashtable + bbdb-hashtable. 2004-12-21 Katsumi Yamaoka @@ -4501,14 +6265,14 @@ 2004-12-01 Teodor Zlatanov - * spam.el (spam-summary-prepare-exit): remove the + * spam.el (spam-summary-prepare-exit): Remove the gnus-summary-limit pop for now, it has problems with ham marks for - me + me. 2004-11-29 Teodor Zlatanov - * spam.el (spam-summary-prepare-exit): use gnus-summary-limit - correctly + * spam.el (spam-summary-prepare-exit): Use gnus-summary-limit + correctly. 2004-11-28 Carl Henrik Lunde (tiny change) @@ -4516,10 +6280,10 @@ 2004-11-26 Teodor Zlatanov - * gnus-art.el (gnus-split-methods): reformat comments + * gnus-art.el (gnus-split-methods): Reformat comments. - * spam.el (spam-summary-prepare-exit): remove article limits - before exiting the summary buffer + * spam.el (spam-summary-prepare-exit): Remove article limits + before exiting the summary buffer. 2004-11-26 Katsumi Yamaoka @@ -4579,10 +6343,14 @@ 2004-11-25 Katsumi Yamaoka * message.el (message-hidden-headers): Default to "^References:". - From Reiner Steib ; improve customization type. - (message-strip-forbidden-properties): Remove check for obsolete - `message-hidden' text property, hidden headers are not accessible - in the buffer anymore. From Romain Francoise on January 11, 2004. + Improve customization type. Suggested by Reiner Steib + . + +2004-11-25 Romain Francoise + + * message.el (message-strip-forbidden-properties): Remove check for + obsolete `message-hidden' text property, hidden headers are not + accessible in the buffer anymore. 2004-11-22 Romain Francoise @@ -4621,7 +6389,7 @@ 2004-11-15 Jesper Harder * pop3.el (pop3-leave-mail-on-server): Don't quote nil in - docstrings. + doc string. Improve doc string. 2004-11-15 Katsumi Yamaoka @@ -4703,10 +6471,9 @@ "Args out of range" error. Reported by Arnaud Giersch . -2004-11-07 Jesper Harder +2004-11-07 Stefan Wiens (tiny change) * gnus-sum.el (gnus-summary-clear-local-variables): Use symbolp. - From Stefan Wiens . 2004-11-04 Richard M. Stallman @@ -4816,22 +6583,23 @@ checkdoc cleanup. (html2text-get-attr, html2text-fix-paragraph): Simplify code. -2004-11-01 Alfred M. Szmidt (tiny change) +2004-11-01 Alfred M. Szmidt (tiny change) * html2text.el (html2text-format-tag-list): Add "strong" and "em". 2004-10-29 Teodor Zlatanov - * gnus-registry.el (gnus-registry-hashtb): create the registry - when package is loaded + * gnus-registry.el (gnus-registry-hashtb): Create the registry + when package is loaded. - * spam.el (spam-summary-score-preferred-header): global preference + * spam.el (spam-summary-score-preferred-header): Add global preference for people who want to override the default SpamAssassin over - Bogofilter preference (when both are set) - (spam-necessary-extra-headers): add spam-use-bogofilter as an option - (spam-user-format-function-S): check spam-summary-score-preferred-header - (spam-extra-header-to-number): add X-Bogosity header parsing - (spam-user-format-function-S): format the score correctly + Bogofilter preference (when both are set). + (spam-necessary-extra-headers): Add spam-use-bogofilter as an option. + (spam-user-format-function-S): Check + spam-summary-score-preferred-header. + (spam-extra-header-to-number): Add X-Bogosity header parsing. + (spam-user-format-function-S): Format the score correctly. 2004-10-29 Katsumi Yamaoka @@ -4861,7 +6629,7 @@ 2004-10-26 Teodor Zlatanov - * nnimap.el (nnimap-open-connection): fixed prog1/prog2 bug + * nnimap.el (nnimap-open-connection): Fix prog1/prog2 bug. 2004-10-26 Katsumi Yamaoka @@ -4888,11 +6656,11 @@ 2004-10-25 Teodor Zlatanov - * nnimap.el (nnimap-remove-server-from-buffer-alist): new function - to remove a server from the nnimap-server-buffer-alist - (nnimap-open-connection, nnimap-close-server): use it + * nnimap.el (nnimap-remove-server-from-buffer-alist): Add function + to remove a server from the nnimap-server-buffer-alist. + (nnimap-open-connection, nnimap-close-server): Use it. - * gnus-encrypt.el: removed in favor of encrypt.el + * gnus-encrypt.el: Remove file in favor of encrypt.el. 2004-10-21 Katsumi Yamaoka @@ -4911,15 +6679,15 @@ 2004-10-18 Teodor Zlatanov - * gnus-util.el (gnus-split-references): accept a nil references - string and go on blissfully + * gnus-util.el (gnus-split-references): Accept a nil references + string and go on blissfully. - * gnus-registry.el (gnus-registry-split-fancy-with-parent): catch - cases where the references string is non-nil but has no references + * gnus-registry.el (gnus-registry-split-fancy-with-parent): Catch + cases where the references string is non-nil but has no references. - * encrypt.el: add autoload tags + * encrypt.el: Add autoload tags. - * spam.el (spam-resolve-registrations-routine): remove article + * spam.el (spam-resolve-registrations-routine): Remove article from unregistration list too. Reported by David Hanak @@ -4936,20 +6704,20 @@ 2004-10-15 Teodor Zlatanov - * encrypt.el: add autoload cookies + * encrypt.el: Add autoload cookies. * spam.el (spam-backend-article-list-property) (spam-backend-get-article-todo-list) (spam-backend-put-article-todo-list, ) (spam-summary-prepare-exit, spam-resolve-registrations-routine): - resolve registrations separately - (spam-register-routine): format comments - (spam-unregister-routine, spam-register-routine): always call with - specific-articles, no default list - (spam-summary-prepare-exit): use the spam-classifications function + Resolve registrations separately. + (spam-register-routine): Format comments. + (spam-unregister-routine, spam-register-routine): Always call with + specific-articles, no default list. + (spam-summary-prepare-exit): Use the spam-classifications function. - * netrc.el (autoload, netrc-parse): use encrypt.el instead of - gnus-encrypt.el + * netrc.el (autoload, netrc-parse): Use encrypt.el instead of + gnus-encrypt.el. * encrypt.el: copied from gnus-encrypt.el @@ -4971,15 +6739,15 @@ 2004-10-14 Teodor Zlatanov - * spam.el (spam-register-routine): move comment - (spam-verify-bogofilter): we use 'unknown for the initial - spam-bogofilter-valid state, not 'never + * spam.el (spam-register-routine): Move comment. + (spam-verify-bogofilter): Use 'unknown for the initial + spam-bogofilter-valid state, not 'never. - * netrc.el (netrc-machine-user-or-password): convenience wrapper - for netrc-machine + * netrc.el (netrc-machine-user-or-password): Add convenience wrapper + for netrc-machine. - * nnimap.el (nnimap-open-connection): use - netrc-machine-user-or-password + * nnimap.el (nnimap-open-connection): Use + netrc-machine-user-or-password. 2004-10-17 Richard M. Stallman @@ -5011,7 +6779,7 @@ 2004-10-12 Simon Josefsson - * net/tls.el (tls-certtool-program): New variable. + * tls.el (tls-certtool-program): New variable. (tls-certificate-information): New function, based on ssl-certificate-information. @@ -5210,7 +6978,7 @@ 2004-09-29 Teodor Zlatanov - * spam.el (spam-verify-bogofilter): -V, not -sV option + * spam.el (spam-verify-bogofilter): Use -V, not -sV option. 2004-09-28 Kevin Greiner @@ -5222,10 +6990,10 @@ 2004-09-28 Teodor Zlatanov - * spam.el (spam-verify-bogofilter): new function + * spam.el (spam-verify-bogofilter): Add new function. (spam-check-bogofilter) - (spam-bogofilter-register-with-bogofilter): use it - (spam-verify-bogofilter): small fixes + (spam-bogofilter-register-with-bogofilter): Use it. + (spam-verify-bogofilter): Add small fixes. 2004-09-28 Simon Josefsson @@ -5233,18 +7001,18 @@ 2004-09-28 Teodor Zlatanov - * gnus-registry.el (gnus-registry-split-fancy-with-parent): use - gnus-extract-references instead of gnus-split-references + * gnus-registry.el (gnus-registry-split-fancy-with-parent): Use + gnus-extract-references instead of gnus-split-references. - * gnus-util.el (gnus-extract-references): new function, analogous + * gnus-util.el (gnus-extract-references): Add new function, analogous to gnus-split-references but extracts only the message-ID without - anything extra + anything extra. * hashcash.el (hashcash-generate-payment) - (hashcash-check-payment): do the right thing if hashcash-path is - nil (because the hashcash program could not be found) + (hashcash-check-payment): Do the right thing if hashcash-path is + nil (because the hashcash program could not be found). - * spam.el (spam-use-hashcash): remove comment + * spam.el (spam-use-hashcash): Remove comment. 2004-09-27 Jesper Harder @@ -5523,8 +7291,8 @@ 2004-09-10 Teodor Zlatanov - * gnus-registry.el (gnus-registry-trim): watch out for negatives - in gnus-registry-trim + * gnus-registry.el (gnus-registry-trim): Watch out for negatives + in gnus-registry-trim. 2004-09-13 Simon Josefsson @@ -5676,7 +7444,7 @@ * nnimap.el (nnimap-authinfo-file, nnimap-prune-cache): Add :group 'nnimap. -2004-08-30 Andreas Schwab +2004-08-30 Andreas Schwab * rfc2231.el (rfc2231-parse-string): Restore whitespace syntax for ?* and ?\;. @@ -5712,12 +7480,12 @@ * gnus-sum.el (gnus-summary-make-menu-bar): Avoid the "Unrecognized menu descriptor" error in XEmacs. -2004-08-26 Stefan Wiens (tiny change) +2004-08-26 Stefan Wiens (tiny change) * gnus-sum.el (gnus-read-header): Don't remove a header for the parent article of a sparse article in the thread hashtb. -2004-08-26 David Hedbor (tiny change) +2004-08-26 David Hedbor (tiny change) * nnmail.el (nnmail-split-lowercase-expanded): New user option. (nnmail-expand-newtext): Lowercase expanded entries if @@ -5803,11 +7571,10 @@ * gnus-art.el (gnus-button-alist): Improve `gnus-button-handle-library' entry. -2004-08-19 Paul Jarc +2004-08-19 Sebastian Freundt (tiny change) * nnmaildir.el (nnmaildir--emlink-p, nnmaildir--enoent-p): Use downcase, since XEmacs capitalizes error messages differently. - From Sebastian Freundt . 2004-08-18 Jesper Harder @@ -5823,8 +7590,8 @@ 2004-08-17 Teodor Zlatanov - * nnimap.el (nnimap-open-connection): add 'imaps' synonym to - 'imap' for netrc parsing + * nnimap.el (nnimap-open-connection): Add 'imaps' synonym to + 'imap' for netrc parsing. 2004-08-16 Reiner Steib @@ -5845,7 +7612,7 @@ 2004-08-06 Teodor Zlatanov * gnus-encrypt.el (gnus-encrypt-insert-file-contents) - (gnus-encrypt-write-file-contents): the password key is the file + (gnus-encrypt-write-file-contents): Make the password key the file name PLUS the cipher, not just the cipher. Also remove failed passwords from the cache. @@ -5861,18 +7628,18 @@ 2004-08-04 Teodor Zlatanov - * gnus-registry.el (gnus-registry-split-fancy-with-parent): try - to append in-reply-to: data to the references: header + * gnus-registry.el (gnus-registry-split-fancy-with-parent): Try + to append in-reply-to: data to the references: header. - * netrc.el: removed old encryption support, autoload gnus-encrypt.el - (netrc-parse): use gnus-encrypt.el functions + * netrc.el: Remove old encryption support, autoload gnus-encrypt.el + (netrc-parse): Use gnus-encrypt.el functions. - * gnus-encrypt.el: new file for encryption support; currently - does only a few GPG ciphers and an internal XOR cipher + * gnus-encrypt.el: Add new file for encryption support; currently + does only a few GPG ciphers and an internal XOR cipher. - * password.el: add comments on using password-read-and-add - (password-read-and-add): new function to read and add the - password to the cache at once + * password.el: Add comments on using password-read-and-add. + (password-read-and-add): Add function to read and add the + password to the cache at once. 2004-07-28 Simon Josefsson @@ -5961,10 +7728,10 @@ 2004-07-06 Dan Christensen - * gnus-sum.el (gnus-summary-read-group-1): When summary - is unthreaded, respect display group parameter. - (gnus-articles-to-read): Remove unused reference to - display group parameter. + * gnus-sum.el (gnus-summary-read-group-1): When summary is unthreaded, + respect display group parameter and gnus-summary-expunge-below. + (gnus-articles-to-read): Remove unused reference to display group + parameter. 2004-07-03 Lars Magne Ingebrigtsen @@ -5985,8 +7752,8 @@ 2004-06-30 Teodor Zlatanov - * gnus-registry.el (gnus-registry-trim): don't allow a negative - trim value + * gnus-registry.el (gnus-registry-trim): Don't allow a negative + trim value. 2004-01-25 Paul Jarc @@ -6071,29 +7838,29 @@ 2004-06-21 Teodor Zlatanov - * spam.el: section markers changed, TODO list revised - (spam-backends): new master list of all installed backends - (spam-summary-exit-behavior): new variable to determine how - messages moves are done at summary exit + * spam.el: Change section markers, revise TODO list. + (spam-backends): Make new master list of all installed backends. + (spam-summary-exit-behavior): Add new variable to determine how + messages moves are done at summary exit. (spam-move-spam-nonspam-groups-only) (spam-process-ham-in-nonham-groups) - (spam-process-ham-in-spam-groups): variables removed, the + (spam-process-ham-in-spam-groups): Remove variables, the spam-summary-exit-behavior variable should be used to manage this - behavior - (spam-old-ham-articles, spam-old-spam-articles): removed - (spam-old-articles): new variable, replacing spam-old-ham-articles - and spam-old-spam-articles + behavior. + (spam-old-ham-articles, spam-old-spam-articles): Remove. + (spam-old-articles): Add variable, replacing spam-old-ham-articles + and spam-old-spam-articles. (spam-use-copy, spam-use-move, spam-use-gmane, spam-use-resend): - empty variables, placeholders for the backends they represent - (spam-set-difference): moved, unchanged - (spam-list-of-processors): variable OBSOLETE, not used anymore - unless the user has a processor variable + Add empty variables, placeholders for the backends they represent. + (spam-set-difference): Move, unchanged. + (spam-list-of-processors): Declare OBSOLETE, not used anymore + unless the user has a processor variable. (spam-classifications, spam-classification-valid-p) (spam-backend-properties, spam-backend-property-valid-p) (spam-backend-function-type-valid-p) - (spam-process-type-valid-p, spam-list-articles): helper functions + (spam-process-type-valid-p, spam-list-articles): Add helper functions. (spam-report-articles-gmane, spam-report-articles-resend): - functions removed, they are not needed + Remove functions, they are not needed. (spam-install-backend-super, spam-backend-list) (spam-backend-check, spam-backend-valid-p, spam-backend-info) (spam-backend-function, spam-backend-ham-registration-function) @@ -6104,43 +7871,43 @@ (spam-install-backend-alias, spam-install-checkonly-backend) (spam-install-mover-backend, spam-install-nocheck-backend) (spam-install-backend, spam-install-statistical-backend) - (spam-install-statistical-checkonly-backend): backend installation - support - (spam-summary-prepare-exit): rewritten to use the new backend code - (spam-group-processor-p): use the new backend code and respect the - summary exit behavior - (spam-mark-spam-as-expired-and-move-routine): removed - (spam-summary-prepare): changed to use the new spam-old-articles - variable + (spam-install-statistical-checkonly-backend): Add backend installation + support. + (spam-summary-prepare-exit): Rewrite to use the new backend code. + (spam-group-processor-p): Use the new backend code and respect the + summary exit behavior. + (spam-mark-spam-as-expired-and-move-routine): Remove. + (spam-summary-prepare): Change to use the new spam-old-articles + variable. (spam-copy-or-move-routine, spam-copy-spam-routine) (spam-move-spam-routine, spam-copy-ham-routine) - (spam-move-ham-routine): new code to copy/move ham or spam - (spam-fetch-field-fast): doc and code improved, plus it allows the - 'number request - (spam-list-of-checks, spam-list-of-statistical-checks): variables - removed, no longer used - (spam-split, spam-find-spam): use the new backend code - (spam-registration-functions): variable removed, no longer used - (spam-unregister-routine): convenience wrapper + (spam-move-ham-routine): Add code to copy/move ham or spam. + (spam-fetch-field-fast): Improve doc and code, plus allow the + 'number request. + (spam-list-of-checks, spam-list-of-statistical-checks): Remove + variables. + (spam-split, spam-find-spam): Use the new backend code. + (spam-registration-functions): Remove variable. + (spam-unregister-routine): Add convenience wrapper. (spam-log-undo-registration, spam-register-routine) (spam-log-processing-to-registry) - (spam-log-unregistration-needed-p): renamed "check" to "backend" - where possible + (spam-log-unregistration-needed-p): Rename "check" to "backend" + where possible. (spam-check-gmane-xref, spam-check-regex-headers) - (spam-check-blackholes, spam-check-stat, spam-check-ifile, spam-check-BBDB) - (spam-check-whitelist, spam-check-blacklist) + (spam-check-blackholes, spam-check-stat, spam-check-ifile) + (spam-check-BBDB, spam-check-whitelist, spam-check-blacklist) (spam-check-bogofilter-headers, spam-check-spamoracle) (spam-check-spamassassin-headers, spam-check-bsfilter-headers) - (spam-check-crm114-headers): use the spam-split-group that - spam-split prepares, no need to determine it every time + (spam-check-crm114-headers): Use the spam-split-group that + spam-split prepares, no need to determine it every time. - * nnimap.el (nnimap-retrieve-headers-progress): add the message number to - the nnheader-parse-naked-head call + * nnimap.el (nnimap-retrieve-headers-progress): Add the message number + to the nnheader-parse-naked-head call. - * nnheader.el (nnheader-generate-fake-message-id): fix indentation + * nnheader.el (nnheader-generate-fake-message-id): Fix indentation. - * gnus-sum.el (gnus-nov-parse-line): add the message number to - the nnheader-nov-read-message-id call + * gnus-sum.el (gnus-nov-parse-line): Add the message number to + the nnheader-nov-read-message-id call. 2004-06-21 Katsumi Yamaoka @@ -6190,14 +7957,14 @@ 2004-06-14 Teodor Zlatanov - * nnheader.el (nnheader-generate-fake-message-id): accept a + * nnheader.el (nnheader-generate-fake-message-id): Accept a number and build a fake message ID localized to a group and - article number (so it's repeatable from that point on) - (nnheader-fake-message-id-p): change regex to accomodate new fake - ID format + article number (so it's repeatable from that point on). + (nnheader-fake-message-id-p): Change regex to accomodate new fake + ID format. - * gnus-sum.el (gnus-get-newsgroup-headers): call - nnheader-generate-fake-message-id with the article number + * gnus-sum.el (gnus-get-newsgroup-headers): Call + nnheader-generate-fake-message-id with the article number. 2004-06-12 YAGI Tatsuya (tiny change) @@ -6258,16 +8025,16 @@ 2004-06-07 Teodor Zlatanov * spam.el (spam-report-articles-resend) - (spam-report-resend-register-routine): allow ham reporting - (spam-report-resend-register-ham-routine): simple wrapper - (spam-registration-functions): add ham resending functions - (spam-list-of-processors): add ham resend processor + (spam-report-resend-register-routine): Allow ham reporting. + (spam-report-resend-register-ham-routine): Add wrapper. + (spam-registration-functions): Add ham resending functions. + (spam-list-of-processors): Add ham resend processor. - * gnus.el (ham-resend-to): new group parameter - (spam-process): add ham resend option + * gnus.el (ham-resend-to): Add new group parameter. + (spam-process): Add ham resend option. - * spam-report.el (spam-report-resend): allow reporting ham - (spam-report-resend-ham): simple wrapper + * spam-report.el (spam-report-resend): Allow reporting ham. + (spam-report-resend-ham): Add wrapper. 2004-06-06 Lars Magne Ingebrigtsen @@ -6287,12 +8054,12 @@ 2004-06-03 Teodor Zlatanov - * assistant.el (assistant-node-name): new convenience function - (assistant-render-text, assistant-render-node): error handling, - plus handle multiple next nodes - (assistant-find-next-node): commented out for now - (assistant-find-next-nodes): new function, returns list of next - nodes + * assistant.el (assistant-node-name): Add convenience function. + (assistant-render-text, assistant-render-node): Add error handling, + plus handle multiple next nodes. + (assistant-find-next-node): Comment out for now. + (assistant-find-next-nodes): Add function, returns list of next + nodes. 2004-06-02 Reiner Steib @@ -6300,7 +8067,7 @@ 2004-05-29 Teodor Zlatanov - * assistant.el (assistant-render-text, assistant-eval): add :set + * assistant.el (assistant-render-text, assistant-eval): Add :set widget type, which is different because it takes and returns a list. Much hilarity ensues. @@ -6319,21 +8086,21 @@ 2004-05-27 Teodor Zlatanov - * assistant.el (assistant-render-text): trying to add a :set - widget, more to come... + * assistant.el (assistant-render-text): Try to add a :set + widget, more to come. - * spam.el (spam-group-spam-contents-p): handle empty groupname - strings + * spam.el (spam-group-spam-contents-p): Handle empty groupname + strings. (spam-report-articles-resend) - (spam-register-routine): do registration iff any articles warrant + (spam-register-routine): Do registration iff any articles warrant it. - (spam-summary-prepare-exit): changed log message for nil group - destinations + (spam-summary-prepare-exit): Change log message for nil group + destinations. 2004-05-27 Daniel Pittman - * spam.el (spam-report-resend-register-routine): allow - spam-report-resend-to to be a group parameter or a global value + * spam.el (spam-report-resend-register-routine): Allow + spam-report-resend-to to be a group parameter or a global value. 2004-05-26 Simon Josefsson @@ -6360,7 +8127,7 @@ 2004-05-26 Teodor Zlatanov - * spam.el (spam-mark-new-messages-in-spam-group-as-spam): New + * spam.el (spam-mark-new-messages-in-spam-group-as-spam): Add variable. (spam-mark-junk-as-spam-routine): Use it. Allow to disable assigning the spam-mark to new messages. @@ -6377,15 +8144,15 @@ (rfc2047-decode): Treat the ascii coding-system as raw-text by default. -2004-05-25 Anand Mitra (tiny change) +2004-05-25 Anand Mitra (tiny change) * gnus-sum.el (gnus-summary-delete-article): invoke hook with correct data. 2004-05-24 Teodor Zlatanov - * spam.el (spam-list-of-processors): use nil for nonexistent processors - (spam-group-processor-p): fixed function so it works properly + * spam.el (spam-list-of-processors): Use nil for nonexistent processors. + (spam-group-processor-p): Fix function. (spam-group-processor-multiple-p) (spam-group-spam-processor-report-gmane-p) (spam-group-spam-processor-report-resend-p) @@ -6401,25 +8168,24 @@ (spam-group-ham-processor-whitelist-p) (spam-group-ham-processor-BBDB-p) (spam-group-ham-processor-spamoracle-p) - (spam-group-ham-processor-copy-p): functions removed with some - prejudice against unneeded code + (spam-group-ham-processor-copy-p): Remove functions with some + prejudice against unneeded code. (spam-report-articles-resend) - (spam-report-resend-register-routine): allow the group/topic - spam-resend-to value to override spam-report-resend-to - (spam-summary-prepare-exit): invoke spam-group-processor-p - properly now - - * spam-report.el (spam-report-resend-to, spam-report-resend): - start with resend-to set to nil, and then ask the user if - necessary. From Daniel Pittman . + (spam-report-resend-register-routine): Allow the group/topic + spam-resend-to value to override spam-report-resend-to. + (spam-summary-prepare-exit): Invoke spam-group-processor-p + properly now. - * gnus.el (spam-resend-to): new group/topic parameter - (spam-process): move the OBSOLETE processors to the end of the + * gnus.el (spam-resend-to): Add group/topic parameter. + (spam-process): Move the OBSOLETE processors to the end of the choices. - * spam-report.el (spam-report-resend): spam-report-resend takes a - list of articles, not separate article numbers. From Daniel - Pittman . +2004-05-24 Daniel Pittman + + * spam-report.el (spam-report-resend-to, spam-report-resend): Start + with resend-to set to nil, and then ask the user if necessary. + (spam-report-resend): spam-report-resend takes a list of articles, not + separate article numbers. 2004-05-23 Katsumi Yamaoka @@ -6464,7 +8230,7 @@ 2004-05-20 Danny Siu - * gnus-sum.el (gnus-summary-recenter): Summery buffer was not auto + * gnus-sum.el (gnus-summary-recenter): Summery buffer was not auto centered even when gnus-auto-center-summary is t 2004-05-22 Lars Magne Ingebrigtsen @@ -6506,24 +8272,24 @@ (spam-crm114-register-spam-routine) (spam-crm114-unregister-spam-routine) (spam-crm114-register-ham-routine) - (spam-crm114-unregister-ham-routine): add CRM114 support. From + (spam-crm114-unregister-ham-routine): Add CRM114 support. From asjo@koldfront.dk (Adam Sj,Ax(Bgren). - * gnus.el: added spam-use-crm114 + * gnus.el: Add spam-use-crm114. * spam.el (spam-list-of-processors, spam-registration-functions): - add spam-use-resend - (spam-group-spam-processor-report-resend-p): utility wrapper - (spam-report-articles-gmane): doc fix + Add spam-use-resend. + (spam-group-spam-processor-report-resend-p): Add utility wrapper. + (spam-report-articles-gmane): Add doc fix. (spam-report-articles-resend, - spam-report-resend-register-routine): wrappers around - spam-report-resend-to + spam-report-resend-register-routine): Add wrappers around + spam-report-resend-to. * spam-report.el (spam-report-resend-to, spam-report-resend): - support for resending spam - (spam-report-gmane): line length >80 fix + Add support for resending spam. + (spam-report-gmane): Fix line length >80. - * gnus.el (spam-process): add spam-use-resend + * gnus.el (spam-process): Add spam-use-resend. 2004-05-20 TSUCHIYA Masatoshi @@ -6673,8 +8439,8 @@ 2004-05-17 Teodor Zlatanov - * spam.el (spam-summary-prepare-exit): fix messages, so they show - only when there is spam or ham to be processed + * spam.el (spam-summary-prepare-exit): Fix messages, so they show + only when there is spam or ham to be processed. 2004-05-17 Lars Magne Ingebrigtsen @@ -6741,13 +8507,13 @@ 2004-05-15 Teodor Zlatanov - * spam.el (spam-summary-prepare-exit): oops, forgot (length) + * spam.el (spam-summary-prepare-exit): Fixed (length). 2004-05-14 Teodor Zlatanov - * spam.el (spam-summary-prepare-exit): only produce "marking spam + * spam.el (spam-summary-prepare-exit): Fix to produce "marking spam as expired without moving it" message when there are spam - messages left + messages left. 2004-05-14 Nelson Ferreira (tiny change) @@ -6822,7 +8588,7 @@ * gnus.el (gnus-version-number): Bump. -2004-05-01 Lars Magne Ingebrigtsen +2004-05-01 Lars Magne Ingebrigtsen * gnus.el: No Gnus v0.2 is released. @@ -6883,14 +8649,14 @@ * gnus-registry.el (gnus-registry-cache-whitespace) (gnus-registry-action, gnus-registry-spool-action) - (gnus-registry-split-fancy-with-parent): changed message levels - from 5 to 3 or 7, as needed + (gnus-registry-split-fancy-with-parent): Change message levels + from 5 to 3 or 7, as needed. * spam.el (spam-summary-prepare-exit) (spam-mark-junk-as-spam-routine, spam-fetch-field-fast) (spam-split, spam-find-spam, spam-log-undo-registration) - (spam-check-blackholes, spam-enter-ham-BBDB): changed message - level from 5 to 6 + (spam-check-blackholes, spam-enter-ham-BBDB): Changed message + level from 5 to 6. 2004-04-26 Katsumi Yamaoka @@ -6948,25 +8714,29 @@ 2004-04-22 Teodor Zlatanov + FIXME: Make separate entries for each person. + From Dan Christensen , asjo@koldfront.dk (Adam Sj,Ax(Bgren), Wes Hardaker , and Michael Shields : - * spam.el (spam-necessary-extra-headers): get the extra headers we - may need for spam sorting and scoring - (spam-user-format-function-S): a user format function suitable for - general use - (spam-article-sort-by-spam-status): sorting function for summary - sorting - (spam-extra-header-to-number): get a score from a header - (spam-summary-score): get a numeric score from the headers - (spam-generic-score): oops, function doc in wrong place - (spam-initialize): take symbols when it's run, and install the - extra headers that spam-necessary-extra-headers thinks we need + * spam.el (spam-necessary-extra-headers): Get the extra headers we + may need for spam sorting and scoring. + (spam-user-format-function-S): Add user format function suitable for + general use. + (spam-article-sort-by-spam-status): Add sorting function for summary + sorting. + (spam-extra-header-to-number): Add function to get a score from a + header. + (spam-summary-score): Add function to get a numeric score from the + headers. + (spam-generic-score): Fixed function doc, was in wrong place. + (spam-initialize): Take symbols when it's run, and install the + extra headers that spam-necessary-extra-headers thinks we need. 2004-04-21 Teodor Zlatanov - * spam.el (spam-summary-prepare-exit): logic and message fix. + * spam.el (spam-summary-prepare-exit): Add logic and message fix. Reported by bojohan+news@dd.chalmers.se (Johan Bockg,Ae(Brd). 2004-04-17 Jesper Harder @@ -6981,13 +8751,13 @@ 2004-04-16 Teodor Zlatanov - * spam.el (spam-summary-prepare-exit): simplified logic - (spam-fetch-article-header): read the article header if it's not - available - (spam-list-articles): simplified logic - (spam-filelist-register-routine): found bug with unregister-list + * spam.el (spam-summary-prepare-exit): Simplify logic. + (spam-fetch-article-header): Read the article header if it's not + available. + (spam-list-articles): Simplify logic. + (spam-filelist-register-routine): Fix bug with unregister-list. - * gnus-registry.el: clarified comments at beginning + * gnus-registry.el: Fix comments at beginning. 2004-04-16 Jesper Harder @@ -7025,18 +8795,18 @@ * spam.el (spam-fetch-field-fast, spam-generate-fake-headers) (spam-find-spam, spam-log-processing-to-registry) (spam-log-registered-p, spam-log-unregistration-needed-p) - (spam-log-undo-registration): use gnus-message instead of - gnus-error, none of these errors are fatal + (spam-log-undo-registration): Use gnus-message instead of + gnus-error, none of these errors are fatal. * gnus-registry.el (gnus-registry-clean-empty-function) - (gnus-registry-clean-empty): remove only empty entries without - extra data + (gnus-registry-clean-empty): Remove only empty entries without + extra data. 2004-04-12 Teodor Zlatanov * spam-stat.el (spam-stat-buffer-change-to-spam) - (spam-stat-buffer-change-to-non-spam): change (error) to - (gnus-message 8) invocation + (spam-stat-buffer-change-to-non-spam): Change (error) to + (gnus-message 8) invocation. 2004-04-12 Katsumi Yamaoka @@ -7163,15 +8933,15 @@ 2004-04-02 Teodor Zlatanov - * spam.el (spam-set-difference): new function to replace - gnus-set-difference in spam.el - (spam-summary-prepare-exit): use spam-set-difference + * spam.el (spam-set-difference): Add function to replace + gnus-set-difference in spam.el. + (spam-summary-prepare-exit): Use spam-set-difference. 2004-03-29 Teodor Zlatanov - * gnus-registry.el (gnus-registry-cache-file): updated to use - gnus-dribble-directory OR gnus-home-directory OR ~ - (gnus-registry-split-fancy-with-parent): fixed doc + * gnus-registry.el (gnus-registry-cache-file): Update to use + gnus-dribble-directory OR gnus-home-directory OR ~. + (gnus-registry-split-fancy-with-parent): Fix doc. 2004-03-27 Katsumi Yamaoka @@ -7360,18 +9130,18 @@ 2004-03-04 Teodor Zlatanov - * spam.el (spam-use-gmane-xref): new backend - (spam-gmane-xref-spam-group): variable to control the name of the - Gmane spam group + * spam.el (spam-use-gmane-xref): Add new backend. + (spam-gmane-xref-spam-group): Add variable to control the name of the + Gmane spam group. (spam-blackhole-servers, spam-blackhole-good-server-regex) (spam-regex-headers-spam, spam-regex-headers-ham) - (spam-regex-body-spam, spam-regex-body-ham): clarified docs - (spam-list-of-checks): added spam-use-gmane-xref to list of - backends and checks - (spam-check-gmane-xref): function for spam-use-gmane-xref + (spam-regex-body-spam, spam-regex-body-ham): Clarify docs. + (spam-list-of-checks): Add spam-use-gmane-xref to list of + backends and checks. + (spam-check-gmane-xref): Add function for spam-use-gmane-xref. - * gnus.el (spam-autodetect-methods): add spam-use-gmane-xref as - an autodetect method + * gnus.el (spam-autodetect-methods): Add spam-use-gmane-xref as + an autodetect method. 2004-03-04 Kevin Greiner @@ -7542,10 +9312,10 @@ 2004-02-26 Teodor Zlatanov - * spam.el (spam-summary-prepare-exit): gnus-set-difference needs - to be run with new-articles as LIST1, not LIST2 - (spam-registration-functions): add spam-use-ham-copy as a nil - registration backend + * spam.el (spam-summary-prepare-exit): Fix gnus-set-difference: needs + to be run with new-articles as LIST1, not LIST2. + (spam-registration-functions): Add spam-use-ham-copy as a nil + registration backend. 2004-02-26 Jesper Harder @@ -7661,11 +9431,11 @@ * spam-report.el (spam-report-unplug-agent) (spam-report-plug-agent, spam-report-deagentize) (spam-report-agentize, spam-report-url-ping-temp-agent-function): - support for the Agent in spam-report: when unplugged, report to a - file; when plugged, submit all the requests + Add support for the Agent in spam-report: when unplugged, report to a + file; when plugged, submit all the requests. - * spam.el (spam-register-routine): improved message about - registration + * spam.el (spam-register-routine): Fix message about + registration. 2004-02-09 Jesper Harder @@ -7721,7 +9491,7 @@ * spam.el (spam-register-routine) (spam-log-processing-to-registry, spam-log-registered-p) (spam-log-unregistration-needed-p, spam-log-undo-registration): - change "check" to "spam-check" for semi-clarity + Change "check" to "spam-check" for semi-clarity. 2004-02-05 Jesper Harder @@ -7772,7 +9542,7 @@ 2004-02-03 Teodor Zlatanov - * spam.el (spam-list-of-processors): fixed spamassassin variable names + * spam.el (spam-list-of-processors): Fix spamassassin variable names. 2004-02-03 Jesper Harder @@ -7791,8 +9561,8 @@ 2004-02-02 Teodor Zlatanov - * spam.el (spam-list-of-checks): added spam-use-BBDB-eclusive to - the list of checks + * spam.el (spam-list-of-checks): Add spam-use-BBDB-eclusive to + the list of checks. 2004-01-31 Jesper Harder @@ -7807,7 +9577,7 @@ 2004-01-27 Teodor Zlatanov * spam.el (spam-spamassassin-register-ham-routine) - (spam-spamassassin-register-spam-routine): fixed function names + (spam-spamassassin-register-spam-routine): Fix function names. 2004-01-27 Katsumi Yamaoka @@ -7821,11 +9591,10 @@ cache if there's the grouplens stuff. (gnus-parse-simple-format): Replace %l with the empty string. -2004-01-27 Steve Youngs +2004-01-27 Jerry James (tiny change) * gnus-spec.el (gnus-parse-simple-format): Fix setq value omission. - From Jerry James 2004-01-26 Katsumi Yamaoka @@ -7988,15 +9757,7 @@ (spam-stat-buffer-words-with-scores): Don't narrow and change syntax table here. Reported by Andrew Cohen . -2004-01-20 Teodor Zlatanov - - * spam.el (gnus-summary-mode-map): make spam-generic-score the - default scoring function - (spam-generic-score): calls spam-spamassassin-score if - spam-use-spamassassin or spam-use-spamassassin-headers is on; - spam-bogofilter-score otherwise. - - From Hubert Chan : +2004-01-20 Hubert Chan : * spam.el (spam-use-spamassassin, spam-use-spamassassin-headers) (spam-install-hooks, spam-spamassassin, spam-spamassassin-path) @@ -8017,12 +9778,21 @@ (spam-assassin-register-ham-routine): add SpamAssassin support (spam-bogofilter-score): fix to show article before scoring - * gnus.el (spam-process, spam-autodetect-methods): add - spamassassin and spamassassin-headers +2004-01-20 Teodor Zlatanov + + * spam.el (gnus-summary-mode-map): Make spam-generic-score the + default scoring function. + (spam-generic-score): Call spam-spamassassin-score if + spam-use-spamassassin or spam-use-spamassassin-headers is on; + spam-bogofilter-score otherwise. + + * gnus.el (spam-process, spam-autodetect-methods): Add + spamassassin and spamassassin-headers. + +2004-01-20 Nevin Kapur * gnus-registry.el (gnus-registry-split-fancy-with-parent): - Suppress unnecessary messages. From Nevin Kapur - . + Suppress unnecessary messages. 2004-01-20 Jesper Harder @@ -8074,11 +9844,13 @@ Suggested by ARISAWA Akihiro . (mm-w3m-cid-retrieve): Simplify. -2004-01-14 Kai Grossjohann +2004-01-14 Vasily Korytov * message.el (message-kill-to-signature): Allow prefix arg to - specify number of lines to keep before signature. From Vasily - Korytov. + specify number of lines to keep before signature. + +2004-01-14 Kai Grossjohann + (message-kill-to-signature): Change docstring. 2004-01-14 Katsumi Yamaoka @@ -8119,9 +9891,9 @@ 2004-01-12 Teodor Zlatanov - * spam.el (spam-get-article-as-string): updated to use - gnus-request-article-this-buffer, much simpler - (spam-get-article-as-buffer): removed + * spam.el (spam-get-article-as-string): Update to use + gnus-request-article-this-buffer, much simpler. + (spam-get-article-as-buffer): Remove. 2004-01-12 Kai Grossjohann @@ -8216,13 +9988,13 @@ 2004-01-09 Teodor Zlatanov - * spam.el (spam-generate-fake-headers): rewrite to be simpler, - also under 80 char limit, and call gnus-error if needed - (spam-fetch-article-header): finally fixed - it was a - buffer-local variable (gnus-newsgroup-data) - (spam-find-spam): use spam-generate-fake-headers, forget about - spam-insert-fake-headers - (spam-insert-fake-headers): removed + * spam.el (spam-generate-fake-headers): Rewrite to be simpler, + also under 80 char limit, and call gnus-error if needed. + (spam-fetch-article-header): Fix - it was a + buffer-local variable (gnus-newsgroup-data). + (spam-find-spam): Use spam-generate-fake-headers, forget about + spam-insert-fake-headers. + (spam-insert-fake-headers): Remove. 2004-01-09 Jesper Harder @@ -8238,9 +10010,9 @@ * spam.el (spam-fetch-field-fast, spam-fetch-field-from-fast) (spam-fetch-field-subject-fast) (spam-fetch-field-message-id-fast, spam-generate-fake-headers) - (spam-fetch-article-header): new functions to deal with Gnus - internals for fast retrieval of article header data - (spam-initialize): put spam-find-spam in the gnus-summary-prepared-hook + (spam-fetch-article-header): Add functions to deal with Gnus + internals for fast retrieval of article header data. + (spam-initialize): Put spam-find-spam in the gnus-summary-prepared-hook. 2004-01-09 Jesper Harder @@ -8298,17 +10070,17 @@ (spam-group-ham-mark-p, spam-group-spam-mark-p) (spam-group-ham-marks, spam-group-spam-marks) (spam-group-spam-contents-p, spam-group-ham-contents-p) - (spam-list-of-processors, spam-list-of-statistical-checks): doc - fix, also add spam-use-blackholes to the statistical checks - (spam-fetch-field-fast): new interface to fetching fields, may - become a macro + (spam-list-of-processors, spam-list-of-statistical-checks): Fix doc, + also add spam-use-blackholes to the statistical checks. + (spam-fetch-field-fast): Add interface to fetching fields, may + become a macro. (spam-fetch-field-from-fast, spam-fetch-field-subject-fast) - (spam-fetch-field-message-id-fast): use spam-fetch-field-fast - (spam-insert-fake-headers): fake an article when needed - (spam-find-spam): fake article when possible + (spam-fetch-field-message-id-fast): Use spam-fetch-field-fast. + (spam-insert-fake-headers): Fake an article when needed. + (spam-find-spam): Fake article when possible. (spam-check-blackholes, spam-check-BBDB, spam-from-listed-p) - (spam-check-bogofilter-headers): use message-fetch-field instead - of nnmail-fetch-field + (spam-check-bogofilter-headers): Use message-fetch-field instead + of nnmail-fetch-field. 2004-01-07 Reiner Steib @@ -8316,30 +10088,30 @@ 2004-01-07 Teodor Zlatanov - * spam.el (spam-split): do not require spam-use-CHECK to be + * spam.el (spam-split): Do not require spam-use-CHECK to be enabled if that check is passed to spam-split explicitly; also fix so 'spam doesn't get converted to spam-split-group when - spam-split-symbolic-return is t - (spam-find-spam): find registrations of the article and use those + spam-split-symbolic-return is t. + (spam-find-spam): Find registrations of the article and use those instead of re-running spam-split to find the spam/ham - classification of the article + classification of the article. (spam-log-processing-to-registry, spam-log-registered-p) (spam-log-unregistration-needed-p, spam-log-undo-registration): - use gnus-error instead of gnus-message - (spam-log-registration-type): new function to determine the + Use gnus-error instead of gnus-message. + (spam-log-registration-type): Add function to determine the classification of a message based on registry entries; will - return nil if both 'spam and 'ham are found - (spam-check-BBDB): expand all the BBDB macros here so we can have - a reasonably fast local cache without the loading errors - (spam-cache-lookups): set to t by default - (spam-find-spam): don't try to guess spam-cache-lookups - (spam-enter-whitelist, spam-enter-blacklist): also clear the - spam-caches entry - (spam-filelist-build-cache, spam-filelist-check-cache): better - caching of whitelist/blacklist entries - (spam-check-whitelist, spam-check-blacklist): invoke - spam-from-listed-p with a type, not a cache variable - (spam-from-listed-p): wrap around spam-filelist-check-cache + return nil if both 'spam and 'ham are found. + (spam-check-BBDB): Expand all the BBDB macros here so we can have + a reasonably fast local cache without the loading errors. + (spam-cache-lookups): Set to t by default. + (spam-find-spam): Don't try to guess spam-cache-lookups. + (spam-enter-whitelist, spam-enter-blacklist): Clear the + spam-caches entry. + (spam-filelist-build-cache, spam-filelist-check-cache): Fix + caching of whitelist/blacklist entries. + (spam-check-whitelist, spam-check-blacklist): Invoke + spam-from-listed-p with a type, not a cache variable. + (spam-from-listed-p): Wrap around spam-filelist-check-cache. 2004-01-07 Jesper Harder @@ -8407,14 +10179,13 @@ 2004-01-06 Teodor Zlatanov * spam.el (spam-cache-lookups, spam-caches, spam-clear-cache): - first attempt at some caching support (done for BBDB only now) - (spam-find-spam): set spam-cache-lookups if there are more than 2 - addresses to be checked - (spam-clear-cache-BBDB): new function, to be invoked by - bbdb-change-hook, and triggering spam-clear-cache of 'spam-use-BBDB - (spam-check-BBDB): check and use the caches, if - spam-cache-lookups is on - remove superfluous (provide) + Make attempt at some caching support (done for BBDB only now). + (spam-find-spam): Set spam-cache-lookups if there are more than 2 + addresses to be checked. + (spam-clear-cache-BBDB): Add function, to be invoked by + bbdb-change-hook, and triggering spam-clear-cache of 'spam-use-BBDB. + (spam-check-BBDB): Check and use the caches, if + spam-cache-lookups is on, remove superfluous (provide). 2004-01-06 Reiner Steib @@ -8530,20 +10301,20 @@ 2004-01-05 Teodor Zlatanov - * netrc.el: autoload password-read - (netrc): new configuration group - (netrc-encoding-method, netrc-openssl-path): configuration + * netrc.el: Autoload password-read. + (netrc): Add configuration group. + (netrc-encoding-method, netrc-openssl-path): Add variables for encoding and decoding of files with symmetric - ciphers - (netrc-encode): assistant function to encode a file with - netrc-encoding-method - (netrc-parse): added interactive parameter, added optional + ciphers. + (netrc-encode): Add assistant function to encode a file with + netrc-encoding-method. + (netrc-parse): Add interactive parameter, added optional decoding if netrc-encoding-method is non-nil but otherwise - behavior is standard + behavior is standard. (netrc-encrypting-method, netrc-encrypt, netrc-parse): - s/encode/encrypt/ everywhere + Do s/encode/encrypt/ everywhere. - * spam.el: remove executable-find autoload + * spam.el: Remove executable-find autoload. 2004-01-05 Jesper Harder @@ -8749,11 +10520,11 @@ * gnus.el (gnus-version-number): Bump version. -2004-01-04 Lars Magne Ingebrigtsen +2004-01-04 Lars Magne Ingebrigtsen * gnus.el: No Gnus v0.1 is released. -2004-01-04 Lars Magne Ingebrigtsen +2004-01-04 Lars Magne Ingebrigtsen * gnus.el: No Gnus v0.0 is released. @@ -8764,12 +10535,29 @@ See ChangeLog.2 for earlier changes. - Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. - Copying and distribution of this file, with or without modification, - are permitted provided the copyright notice and this notice are preserved. + Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + + This file is part of GNU Emacs. + + GNU Emacs is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU Emacs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU Emacs; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. ;; Local Variables: ;; coding: iso-2022-7bit +;; fill-column: 79 +;; add-log-time-zone-rule: t ;; End: ;;; arch-tag: 3f33a3e7-090d-492b-bedd-02a1417d32b4 Index: gnus/lisp/ChangeLog.1 diff -u gnus/lisp/ChangeLog.1:7.4 gnus/lisp/ChangeLog.1:7.5 --- gnus/lisp/ChangeLog.1:7.4 Sun Sep 12 20:07:31 2004 +++ gnus/lisp/ChangeLog.1 Fri Oct 13 13:11:25 2006 @@ -12,10 +12,10 @@ * rfc2231.el: Ditto. * smiley-ems.el: Ditto. * uudecode.el: Ditto. - + * smiley-ems.el (smiley-region): Use mapcar. -2000-10-27 Stefan Monnier +2000-10-27 Stefan Monnier * ietf-drums.el: Require cl when compiling. @@ -58,7 +58,7 @@ * rfc2047.el (rfc2047-q-encode-region): Don't break if a QP-word could be fitted in one line. -2000-10-25 Dirk Meyer +2000-10-25 Dirk Meyer * gnus-demon.el (gnus-demon-time-to-step): theHour was set to seconds instead of hour. @@ -71,7 +71,7 @@ * gnus-art.el (gnus-request-article-this-buffer): gnus-refer-article-method might be a single method. - * gnus-sum.el (gnus-refer-article-methods): The second could be + * gnus-sum.el (gnus-refer-article-methods): The second could be a named method. 2000-10-23 Simon Josefsson @@ -217,7 +217,7 @@ * gnus-audio.el: Don't require cl. (gnus-audio): New custom group. (gnus-audio-inline-sound): Change to work with Emacs. - (gnus-audio-directory, gnus-audio-directory) + (gnus-audio-directory, gnus-audio-directory) (gnus-audio-au-player): Customize. (gnus-audio-play): Try external player if play-sound-file fails. Use file-name-extension, not string-match. @@ -262,7 +262,7 @@ * gnus-util.el (gnus-kill-all-overlays): Move out. * gnus-sum.el (gnus-cache-write-active): Auto load. * lpath.el: Shut up. - * nnweb.el (nnweb-url-retrieve-asynch): url-retrieve is + * nnweb.el (nnweb-url-retrieve-asynch): url-retrieve is asynchronous in Exp version. 2000-10-08 08:57:13 ShengHuo ZHU @@ -277,7 +277,7 @@ (gnus-summary-select-article): Don't enable multibyte here. (gnus-summary-goto-article): Ditto. -2000-10-08 Christoph Conrad +2000-10-08 Christoph Conrad * gnus-draft.el (gnus-draft-send-message): Typo. @@ -313,7 +313,7 @@ * gnus-agent.el (gnus-agent-with-fetch): Bind it. * gnus-score.el (gnus-score-body): Don't score body when agent-fetching. - (gnus-score-followup): Don't score followup either. + (gnus-score-followup): Don't score followup either. 2000-10-07 08:19:17 ShengHuo ZHU @@ -328,7 +328,7 @@ * gnus-audio.el: Don't require cl. (gnus-audio): New custom group. (gnus-audio-inline-sound): Change to work with Emacs. - (gnus-audio-directory, gnus-audio-directory) + (gnus-audio-directory, gnus-audio-directory) (gnus-audio-au-player): Customize. (gnus-audio-play): Try external player if play-sound-file fails. Use file-name-extension, not string-match. @@ -372,7 +372,7 @@ * webmail.el (webmail-type-definition): Fix my-deja open url. -2000-10-06 Emerick Rogul +2000-10-06 Emerick Rogul * message.el (message-setup-fill-variables): New variable. (message-mode): Use it. @@ -406,7 +406,7 @@ * webmail.el (webmail-hotmail-list): Fix. -2000-10-05 Stefan Monnier +2000-10-05 Stefan Monnier * nnimap.el (require): cl. @@ -437,7 +437,7 @@ * gnus-art.el (gnus-mime-inline-part): Support prefix argument. -2000-10-03 Katsumi Yamaoka +2000-10-03 Katsumi Yamaoka * lpath.el: "." is in the load-path because dgnushack.el. @@ -456,11 +456,11 @@ * gnus-audio.el: removed unnecessary xemacs test * earcon.el: ditto - + 2000-10-03 19:55:55 Lars Magne Ingebrigtsen * nnweb.el (nnweb-decode-entities): Work for non-character - entities. + entities. 2000-09-26 09:20:08 Lars Magne Ingebrigtsen @@ -562,7 +562,7 @@ gnus-mailing-list-subscribe, gnus-mailing-list-help): Bind list-*. (gnus-mailing-list-menu): Define it. (turn-on-gnus-mailing-list-mode, gnus-mailing-list-mode): Autoload. - + * gnus-xmas.el (gnus-xmas-mailing-list-menu-add): Move here. 2000-09-30 18:52:51 ShengHuo ZHU @@ -574,15 +574,15 @@ * nnimap.el (nnimap-request-accept-article): Remove \n's from From_ lines. -2000-08-05 Simon Josefsson +2000-08-05 Simon Josefsson Make GCC to remote groups work when unplugged (postpone GCC until message is actually sent). * gnus-draft.el (gnus-draft-send): Call `gnus-agent-restore-gcc'. - * gnus-agent.el (gnus-agent-possibly-do-gcc): - (gnus-agent-restore-gcc): + * gnus-agent.el (gnus-agent-possibly-do-gcc): + (gnus-agent-restore-gcc): (gnus-agent-possibly-save-gcc): New functions. * gnus-msg.el (gnus-inews-add-send-actions): Use @@ -592,7 +592,7 @@ * gnus.el (gnus-agent-gcc-header): New variable. -2000-07-13 Simon Josefsson +2000-07-13 Simon Josefsson Asks the user to synch flags with server when you plug in. @@ -608,11 +608,11 @@ * starttls.el: New file, by Daiki Ueno. -2000-08-02 Stanislav Shalunov +2000-08-02 Stanislav Shalunov * message.el (message-make-in-reply-to): In-Reply-To is message-id (see DRUMS). - + 2000-09-29 Simon Josefsson * nntp.el (nntp-async-trigger): Fix authinfo in asynchronous @@ -637,7 +637,7 @@ * gnus-agent.el (gnus-agent-fetch-group-1): Reimplement Mike McEwan's proposal. - + 2000-09-29 12:06:40 ShengHuo ZHU * gnus-agent.el: Revoke Mike McEwan's 1998-09-05 patch due to @@ -651,14 +651,13 @@ * gnus-sum.el (gnus-summary-enter-digest-group): Decode to-address. -2000-09-28 Kai Gro,A_(Bjohann +2000-09-28 Andrei Elkin (tiny change) * gnus-art.el (article-strip-banner): Use gnus-group-find-parameter rather than gnus-group-get-parameter, to allow inheritance on the banner. - From elkin@tverd.astro.spbu.ru. -2000-09-26 Richard M. Alderson III +2000-09-26 Richard M. Alderson III * gnus-art.el (gnus-read-save-file-name): expand-file-name. @@ -720,14 +719,14 @@ * nnkiboze.el (nnkiboze-generate-group): Use it. Inhibit list groups. (nnkiboze-enter-nov): Fix it when there is no xref. (nnkiboze-generate-groups): List groups. - * gnus-group.el (gnus-group-make-kiboze-group): Use + * gnus-group.el (gnus-group-make-kiboze-group): Use nnkiboze-score-file. - + * nnkiboze.el (nnkiboze-request-article): Use gnus-cache-request-article. * gnus-group.el (gnus-group-make-kiboze-group): Fix prompt. -2000-07-16 Dmitry Bely +2000-07-16 Dmitry Bely * nnheader.el (nnheader-translate-file-chars): Path splitting on NT. @@ -788,8 +787,8 @@ smiley-toggle-extent-ems, smiley-toggle-extents-ems, smiley-toggle-buffer-ems): New functions for Emacs 21. Toggle functions are not implemented yet. - - * dgnushack.el (dgnushack-compile): Remove smiley.el and + + * dgnushack.el (dgnushack-compile): Remove smiley.el and x-overlay.el from the FSF Emacs black list. 2000-09-15 21:10:20 ShengHuo ZHU @@ -797,11 +796,11 @@ * mm-decode.el (mm-inlined-types): Add application/emacs-lisp. (mm-inline-media-tests): Ditto. (mm-automatic-display): Ditto. - * mm-view.el (mm-display-inline-fontify): Generalize from - mm-display-patch-inline. + * mm-view.el (mm-display-inline-fontify): Generalize from + mm-display-patch-inline. (mm-display-patch-inline): Use it. (mm-display-elisp-inline): Ditto. - + 2000-09-15 14:03:00 ShengHuo ZHU * gnus-topic.el (gnus-topic-find-groups): Add recursive parameter. @@ -818,10 +817,10 @@ * gnus-group.el (gnus-group-rename-group): Inhibit renaming of zombie or killed groups. - + 2000-09-15 00:09:56 ShengHuo ZHU - * mml.el (mml-preview): Reinsert unibyte content. + * mml.el (mml-preview): Reinsert unibyte content. (mml-parse-1): Remove with-unibyte-current-buffer. (mml-generate-mime-1): Ditto. * gnus-msg.el (gnus-summary-mail-forward): Ditto. @@ -845,7 +844,7 @@ (gnus-summary-save-parts-last-directory): New. (gnus-summary-save-parts): Save history. -2000-09-14 Ben Gertzfield +2000-09-14 Ben Gertzfield * gnus-sum.el (gnus-summary-save-parts-default-mime): New variable. @@ -899,7 +898,7 @@ `format'. (mm-content-transfer-encoding): Don't use cadar. - * uudecode.el (uudecode-decoder-program) + * uudecode.el (uudecode-decoder-program) (uudecode-decoder-switches): Customize. * gnus-score.el (gnus-home-score-file): Improve custom type. @@ -916,7 +915,7 @@ 2000-09-13 09:14:57 ShengHuo ZHU * nnmail.el (nnmail-get-new-mail): Don't test nnmail-spool-file. - + * gnus-cache.el (gnus-jog-cache): Temporarily disable mail-sources. * gnus-kill.el (gnus-batch-score): Ditto. * gnus-move.el (gnus-change-server): Ditto. @@ -950,7 +949,7 @@ getting the nnimap-server-buffer and once for letting n-c-s set the variables in that buffer. -2000-09-08 David Edmondson +2000-09-08 David Edmondson * gnus.el (gnus-short-group-name): Guess separator. @@ -959,7 +958,7 @@ * smiley.el (smiley-buffer, smiley-create-glyph): Work with GTK XEmacs as well. -2000-09-06 Francis Litterio +2000-09-06 Francis Litterio * gnus-group.el (gnus-group-insert-group-line): Fix. @@ -989,9 +988,12 @@ * gnus-agent.el (gnus-agent-union): new function. (gnus-agent-fetch-headers): Use it. + * gnus.el (gnus-group-startup-message): Modifications to last change. + +2000-08-29 Katsumi Yamaoka + * gnus.el (gnus-group-startup-message): Specify foreground and background for xpm image. Centre image vertically. - From Katsumi Yamaoka with mods. 2000-08-24 23:49:23 ShengHuo ZHU @@ -1047,9 +1049,9 @@ * nnimap.el (nnimap-before-find-minmax-bugworkaround): New function, thanks to Lloyd Zusman for debugging. - (nnimap-request-group): - (nnimap-request-list): - (nnimap-retrieve-groups): + (nnimap-request-group): + (nnimap-request-list): + (nnimap-retrieve-groups): (nnimap-request-newgroups): Use it. * nnimap.el (nnimap-request-article-part): Less verbose. @@ -1058,7 +1060,7 @@ * lpath.el ((string-match "XEmacs" emacs-version)): Remove subst-char-in-string since we test elsewhere whether it's bound. - + 2000-08-18 Dave Love * gnus-score.el (gnus-score-find-score-files-function): Fix doc, @@ -1070,7 +1072,7 @@ * nnheader.el (nnheader-replace-chars-in-string): Use subst-char-in-string if available. - * gnus-art.el (gnus-read-save-file-name, gnus-plain-save-name) + * gnus-art.el (gnus-read-save-file-name, gnus-plain-save-name) (gnus-request-article-this-buffer): Use expand-file-name. (gnus-mime-view-part-as-type): Simplify interactive spec. (gnus-mime-button-map): Define it all in defvar. @@ -1119,7 +1121,7 @@ * nnmail.el (nnmail-expiry-target-group): Fixed. -2000-08-14 Rod Whitby +2000-08-14 Rod Whitby * nnmail.el (nnmail-expiry-target-group): Fix the call to gnus-request-accept-article so that body encoding is *not* done. @@ -1127,7 +1129,7 @@ expired mail? -2000-08-14 Rod Whitby +2000-08-14 Rod Whitby * nnml.el (nnml-request-expire-articles): Fix the calls to nnml-request-article (the filename was being passed instead of the @@ -1135,10 +1137,10 @@ (nnml-current-directory is changed by nnml-request-accept-article, causing it to be incorrect for the next article to be expired). -2000-08-14 Rod Whitby +2000-08-14 Rod Whitby * gnus-sum.el (gnus-summary-expire-articles): Fix the handling of - expiry-target group parameters. + expiry-target group parameters. 2000-08-13 18:53:08 Lars Magne Ingebrigtsen @@ -1152,7 +1154,7 @@ 2000-08-12 21:48:00 John H. Palmieri * mail-source.el (mail-source-incoming-file-prefix): New - variable. + variable. 2000-08-12 20:29:53 Lars Magne Ingebrigtsen @@ -1162,7 +1164,7 @@ 2000-08-11 Florian Weimer - * message.el (message-syntax-checks): New check quotin-style: + * message.el (message-syntax-checks): New check quotin-style: Text must be written below quoted text. (message-check-news-body-syntax): Check it. @@ -1184,15 +1186,15 @@ list of unexpired articles. * gnus-group.el (gnus-group-expire-articles-1): Return the list of - un-expired articles. + un-expired articles. * gnus-sum.el (gnus-summary-reparent-thread): Narrow to the - headers. + headers. * gnus-topic.el (gnus-topic-kill-group): Move up one line so that - we update the right topic.. + we update the right topic.. - * mm-decode.el (mm-display-external): Put point at start. + * mm-decode.el (mm-display-external): Put point at start. 2000-08-10 Kai Gro,A_(Bjohann @@ -1200,7 +1202,7 @@ * gnus-cus.el (gnus-group-parameters): Add parameter `expiry-wait'. -2000-08-09 Simon Josefsson +2000-08-09 Simon Josefsson * imap.el (imap-parse-body): (imap-parse-string-list): Add bug workarounds for Stalker @@ -1221,7 +1223,7 @@ 2000-08-07 09:37:01 ShengHuo ZHU - * gnus-group.el (gnus-group-iterate): Uncompiled function should + * gnus-group.el (gnus-group-iterate): Uncompiled function should not use pop. 2000-07-19 Dave Love @@ -1231,7 +1233,7 @@ check. (gnus-article-display-xface): Special-case for dark backgrounds. -2000-07-19 Kim-Minh Kaplan +2000-07-19 Kim-Minh Kaplan * imap.el (imap-calculate-literal-size-first): New variable. (imap-local-variables): Add it. @@ -1261,15 +1263,15 @@ * gnus-cus.el (gnus-group-parameters, banner): Type is regexp. - * imap.el (imap): - (imap-kerberos4-program): - (imap-gssapi-program): + * imap.el (imap): + (imap-kerberos4-program): + (imap-gssapi-program): (imap-ssl-program): Customization. - (imap-shell-program): + (imap-shell-program): (imap-shell-host): New variables. - (imap-streams): + (imap-streams): (imap-stream-alist): Add shell. - (imap-shell-p): + (imap-shell-p): (imap-shell-open): New functions. (imap-open): Don't call authenticator if preauth. (imap-authenticate): Return t if already authenticated. @@ -1281,7 +1283,7 @@ 2000-07-14 12:40:51 ShengHuo ZHU - * gnus-agent.el (gnus-agent-fetch-group-1): mark-below, + * gnus-agent.el (gnus-agent-fetch-group-1): mark-below, expunge-below and orphan-score are "group variables". 2000-07-13 Simon Josefsson @@ -1330,7 +1332,7 @@ 2000-07-10 22:41:58 ShengHuo ZHU * nnslashdot.el (nnslashdot-threaded-retrieve-headers): Save point. - * webmail.el (webmail-fetch): Bind + * webmail.el (webmail-fetch): Bind url-http-silence-on-insecure-redirection. 2000-07-10 11:43:22 ShengHuo ZHU @@ -1340,9 +1342,9 @@ (nnslashdot-sane-retrieve-headers): Ditto. (nnslashdot-request-article): Ditto. -2000-07-10 11:12:32 William M. Perry +2000-07-10 11:12:32 William M. Perry - * mailcap.el (mailcap-parse-mimetype-file): + * mailcap.el (mailcap-parse-mimetype-file): 2000-07-07 23:46:22 ShengHuo ZHU @@ -1389,7 +1391,7 @@ * nnslashdot.el (nnslashdot-sid-strip): To strip or not to strip? -2000-07-03 Stainless Steel Rat +2000-07-03 Stainless Steel Rat * gnus-sum.el (gnus-recenter): Fix horizontal recenter. @@ -1406,19 +1408,19 @@ (nnimap-split-find-rule): Fix. (nnimap-open-connection): Look for nnimap-server-address in authinfo. -2000-07-03 Paul Stodghill +2000-07-03 Paul Stodghill * message.el (message-unquote-tokens): Remove all quotes. 2000-07-03 00:29:08 Julien Gilles - * gnus-ml.el: New file. + * gnus-ml.el: New file. 2000-07-02 16:11:25 Lars Magne Ingebrigtsen * nnultimate.el (nnultimate-request-close): New function. - * gnus-start.el (gnus-clear-system): Clear nnmail-split-history. + * gnus-start.el (gnus-clear-system): Clear nnmail-split-history. 2000-06-18 Norbert Koch @@ -1453,13 +1455,13 @@ * gnus-util.el (gnus-netrc-machine): Add defaultport parameter, document port and defaultport. -2000-06-27 Paul Stodghill +2000-06-27 Paul Stodghill * gnus-agent.el (gnus-agent-synchronize): Kill flags buffer. 2000-06-26 Dave Love - * mm-decode.el (mm-image-fit-p): Use `image-size' in Emacs. + * mm-decode.el (mm-image-fit-p): Use `image-size' in Emacs. * message.el: Remove unnecessary `require'ments. Defvar gnus-list-identifiers when compiling. Don't try to autoload @@ -1489,7 +1491,7 @@ * nnimap.el (nnimap-request-post): Fix parenthesis. -2000-06-26 Paul Stodghill +2000-06-26 Paul Stodghill * message.el (message-unquote-tokens): New function. @@ -1531,7 +1533,7 @@ * gnus-cus.el (gnus-extra-group-parameters): Add uidvalidity. -2000-06-08 12:34:26 Urban Engberg +2000-06-08 12:34:26 Urban Engberg * gnus-demon.el (gnus-demon-scan-mail): Bind nnmail-fetched-sources. @@ -1605,7 +1607,7 @@ * gnus-start.el (gnus-get-unread-articles): If `gnus-activate-group' and/or `gnus-check-server' return nil, don't try to do anything on that server. - + 2000-05-25 Simon Josefsson * gnus-group.el (gnus-group-nnimap-edit-acl): Help text updated @@ -1655,7 +1657,7 @@ * gnus-group.el (gnus-group-mode-map): Add M-SPACE. * mml.el (mml-mode-map): Comment out mml-narrow-to-part. -2000-05-17 21:13:38 Jim Davidson +2000-05-17 21:13:38 Jim Davidson * gnus-sum.el (gnus-summary-save-article-rmail): Use gnus-summary-save-in-rmail. @@ -1673,7 +1675,7 @@ * gnus-msg.el (gnus-post-news): Decode group name. (gnus-inews-do-gcc): Encode group name. -2000-05-17 10:16:32 Karl Kleinpaste +2000-05-17 10:16:32 Karl Kleinpaste * gnus-art.el (gnus-emphasize-whitespace-regexp): New variable. * gnus-util.el (gnus-put-text-property-excluding-newlines): Use it. @@ -1722,7 +1724,7 @@ (gnus-group-edit-group): Use it. * gnus-cus.el (gnus-group-customize): Use it. -2000-05-16 17:55:57 Karl Kleinpaste +2000-05-16 17:55:57 Karl Kleinpaste * gnus-util.el (gnus-put-text-property-excluding-newlines): Improve. @@ -1803,7 +1805,7 @@ * webmail.el: Translate   to SP. -2000-05-13 13:00:17 Robin S. Socha +2000-05-13 13:00:17 Robin S. Socha * message.el (message-bounce): Doc typo. @@ -2106,7 +2108,7 @@ * message.el (message-send-mail-partially-limit): Change the default value. -2000-04-27 21:53:32 Erik Toubro Nielsen +2000-04-27 21:53:32 Erik Toubro Nielsen * gnus-util.el (gnus-extract-address-components): Name might be "". @@ -2183,7 +2185,7 @@ * gnus-draft.el (gnus-draft-send): Move gnus-draft-setup inside of let. -2000-04-26 12:26:10 Pavel Janik ml. +2000-04-26 12:26:10 Pavel Janik ml. * gnus-draft.el (gnus-draft-setup): Fix comments. @@ -2584,7 +2586,7 @@ password provided in mail-sources; use webmail:subtype:user as the key. -2000-04-10 20:35:46 John Wiegley +2000-04-10 20:35:46 John Wiegley * mail-source.el (mail-source-fetch-webmail): Use mail-source-password-cache. @@ -2652,7 +2654,7 @@ * nnimap.el (nnimap-retrieve-headers-progress): Fold continuation lines and turn TAB into SPC before parsing. -2000-03-15 Simon Josefsson +2000-03-15 Simon Josefsson * nnheader.el (nnheader-group-pathname): Make sure to return a directory. @@ -2811,12 +2813,12 @@ * mailcap.el (mailcap-mime-extensions): Add .diff. -2000-01-06 00:06:40 Kim-Minh Kaplan +2000-01-06 00:06:40 Kim-Minh Kaplan * mm-decode.el (mm-mailcap-command): handle "%%" and the case where there is no "%s" in the method. -2000-01-08 21:01:04 Kim-Minh Kaplan +2000-01-08 21:01:04 Kim-Minh Kaplan * gnus-sum.el (gnus-summary-select-article): Return 'old. @@ -3186,7 +3188,7 @@ * nnslashdot.el: Use nnweb-decode-entities-string. (nnslashdot-decode-entities): Remove. -1999-12-13 10:40:56 Eric Marsden +1999-12-13 10:40:56 Eric Marsden * nnslashdot.el: Decode entities. @@ -3614,7 +3616,7 @@ * nnweb.el (nnweb-dejanews-create-mapping): Set a default date in case matching failed. -1999-12-02 John Wiegley +1999-12-02 John Wiegley * mail-source.el (mail-source-keyword-map): Add backslash to Delete-flag. @@ -4020,7 +4022,7 @@ * mm-util.el (mm-find-mime-charset-region): Use UTF-8 if it's available and makes sense. -1999-11-12 19:56:23 Fabrice POPINEAU +1999-11-12 19:56:23 Fabrice POPINEAU * gnus-score.el (gnus-score-save): Translate score file. @@ -4238,7 +4240,7 @@ * emacs-mime.texi (Customization): Document mm-inline-override-types -1999-10-26 Katsumi Yamaoka +1999-10-26 Katsumi Yamaoka * smiley.el (gnus-smiley-display): Use `smiley-toggle-buffer'. (smiley-toggle-buffer): New function. @@ -4263,12 +4265,12 @@ * gnus-uu.el (gnus-uu-mark-thread): Don't move point around. -1999-10-07 Katsumi Yamaoka +1999-10-07 Katsumi Yamaoka * gnus-art.el (gnus-treat-predicate): Examine whether the argument is list or not before condition. -1999-10-07 Yoshiki Hayashi +1999-10-07 Yoshiki Hayashi * gnus-art.el (gnus-treat-predicate): Work for (typep "something"). @@ -4635,7 +4637,7 @@ * nnmail.el (nnmail-process-maildir-mail-format): Typo. -1999-09-09 Jens-Ulrik Petersen +1999-09-09 Jens-Ulrik Petersen * gnus-msg.el (gnus-configure-posting-styles): Let `gnus-posting-styles' have its say in posting-style: local @@ -4703,7 +4705,7 @@ * gnus-art.el (gnus-treat-predicate): Work for (not 5). -1999-08-27 Peter von der Ahe +1999-08-27 Peter von der Ahe * message.el (message-send): More helpful error message if sending fails @@ -5042,7 +5044,7 @@ start with gnus-group-split. * gnus.el: Adjust autoload entries. -1999-07-07 ??:??:?? Alexandre Oliva +1999-07-07 Alexandre Oliva * gnus-mlspl.el: Removed trailing t from comment and provide. Renamed functions and variables to start with gnus-mlsplit. @@ -6458,7 +6460,7 @@ * mail-source.el (mail-source-fetch-pop): Instead use :authentication. -1999-02-01 Tatsuya Ichikawa +1999-02-01 Tatsuya Ichikawa * lisp/mail-source.el : Support APOP authentication scheme. @@ -6932,7 +6934,7 @@ * gnus-agent.el (gnus-category-write): Make directory. -1998-09-26 19:39:31 Simon Josefsson +1998-09-26 19:39:31 Simon Josefsson * gnus-sum.el (gnus-update-read-articles): (gnus-update-marks): Request backend update of mark. @@ -8841,7 +8843,7 @@ * gnus-draft.el (gnus-draft-send): Allow mail. -1998-10-10 -SL Baur +1998-10-10 SL Baur * message.el (message-check): Move message-check macro above where it is first used. @@ -9375,7 +9377,7 @@ * gnus.el: Pterodactyl Gnus v0.27 is released. -1998-09-11 12:42:07 Lars Magne Ingebrigtsen- +1998-09-11 12:42:07 Lars Magne Ingebrigtsen * mm-decode.el (mm-alternative-precedence): New variable. (mm-preferred-alternative): New function. @@ -10098,7 +10100,7 @@ Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted provided the copyright notice and this notice are preserved. - + ;; Local Variables: ;; coding: iso-2022-7bit ;; End: Index: gnus/lisp/ChangeLog.2 diff -u gnus/lisp/ChangeLog.2:7.7 gnus/lisp/ChangeLog.2:7.15 --- gnus/lisp/ChangeLog.2:7.7 Wed Oct 5 00:52:26 2005 +++ gnus/lisp/ChangeLog.2 Mon Mar 12 01:39:28 2007 @@ -1,4 +1,4 @@ -2004-01-04 Lars Magne Ingebrigtsen +2004-01-04 Lars Magne Ingebrigtsen * gnus.el: Gnus v5.10.6 is released. @@ -10,7 +10,7 @@ * gnus.el (gnus-version-number): Bump. -2004-01-04 Lars Magne Ingebrigtsen +2004-01-04 Lars Magne Ingebrigtsen * gnus.el: Gnus v5.10.5 is released. @@ -58,7 +58,7 @@ * gnus.el (gnus-version-number): Bump. -2004-01-03 Lars Magne Ingebrigtsen +2004-01-03 Lars Magne Ingebrigtsen * gnus.el: Gnus v5.10.4 is released. @@ -76,15 +76,14 @@ * smime.el (smime-crl-check): Doc fix. -2004-01-02 Edwin Steiner +2004-01-02 Edwin Steiner (tiny change) * gnus-nocem.el (gnus-nocem-enter-article): Use the real group - hashtb (tiny patch). + hashtb. -2004-01-02 Kai Grossjohann +2004-01-02 Michael Albinus - * nnml.el (nnml-save-mail): Grok compressed articles. From - Michael Albinus . + * nnml.el (nnml-save-mail): Grok compressed articles. 2004-01-02 Teodor Zlatanov @@ -144,20 +143,16 @@ (gnus-summary-goto-article): Allow `%40'. (gnus-summary-refer-article): Convert `%40' to `@'. -2003-12-30 Simon Josefsson +2003-12-30 Arne J,Ax(Brgensen * smime.el (smime-crl-check): New. - (smime-verify-region): Use it. From Arne J,Ax(Brgensen - in <87llpk9v5q.fsf@seamus.arnested.dk> (tiny - change). + (smime-verify-region): Use it. 2003-12-30 Reiner Steib - * gnus-score.el (gnus-score-edit-file-at-point): Consider the - whole match element. From Karl Pfl,Ad(Bsterer . - (gnus-score-find-trace): Use it. Added `f' and `t' commands, - added quick help. With some suggestions from Karl Pfl,Ad(Bsterer - . + (gnus-score-find-trace): Use gnus-score-edit-file-at-point. Added + `f' and `t' commands, added quick help. With some suggestions + from Karl Pfl,Ad(Bsterer . * gnus-util.el (gnus-emacs-version): Added doc-string. @@ -165,6 +160,11 @@ (mml-attach-file): Use it. (mml-preview): Added MIME preview to gnus-buffers. +2003-12-30 Karl Pfl,Ad(Bsterer + + * gnus-score.el (gnus-score-edit-file-at-point): Consider the + whole match element. + 2003-12-30 Jesper Harder * gnus-sum.el (gnus-summary-make-menu-bar): Add ellipses. @@ -179,7 +179,7 @@ (gnus-secondary-method-p): Extend servers to methods before comparing. (gnus-secondary-method-p): Revert. -2003-12-30 Lars Magne Ingebrigtsen +2003-12-30 Lars Magne Ingebrigtsen * gnus.el: Gnus v5.10.3 is released. @@ -189,7 +189,7 @@ Suggested by Steinar Bang . (gnus-agent-auto-agentize-methods): Customize. -2003-12-29 Kevin Greiner +2003-12-29 Kevin Greiner * gnus.el (gnus-server-to-method): Fixed bug in 2003-12-22 check-in. @@ -210,10 +210,9 @@ * mml1991.el (mml1991-pgg-encrypt): Decode according to CTE before encrypting. -2003-12-28 Jesper Harder +2003-12-28 Ivan Boldyrev (tiny change). * mml1991.el (mml1991-pgg-sign): Use unibyte when re-encoding. - From Ivan Boldyrev (tiny change). 2003-12-26 Katsumi Yamaoka @@ -243,7 +242,7 @@ * dgnushack.el (dgnushack-compile): Increase the value for max-specpdl-size when compiling Gnus with Emacs 20. -2003-12-22 Kevin Greiner +2003-12-22 Kevin Greiner * gnus-int.el (gnus-open-server): Fixed the server status such that an agentized server, when opened offline, has a status of offline. Also fixes bug whereby the agent's backend was called @@ -268,7 +267,7 @@ * gnus-agent.el (gnus-agent-read-agentview): Use car-less-than-car. -2003-12-20 Artem Chuprina (tiny change) +2003-12-20 Artem Chuprina (tiny change) * message.el (message-yank-buffer): Bind message-reply-buffer to a buffer rather than a string. @@ -379,7 +378,7 @@ * pgg.el (pgg-run-at-time): Ditto. -2003-12-11 Kevin Greiner +2003-12-11 Kevin Greiner * gnus-agent.el (gnus-agent-possibly-alter-active): New Function. (gnus-agent-regenerate-group): When necessary, alter the group's @@ -401,17 +400,14 @@ * message.el (message-get-reply-headers): Narrow to headers. -2003-12-10 Teodor Zlatanov +2003-12-10 L,Bu(Brentey K,Ba(Broly - * spam.el (spam-disable-spam-split-during-ham-respool): new - variable. From lorentey@elte.hu (L,Bu(Brentey K,Ba(Broly) - (spam-ham-copy-or-move-routine): respect - spam-disable-spam-split-during-ham-respool. From - lorentey@elte.hu (L,Bu(Brentey K,Ba(Broly) - (spam-split-disabled): new variable. From - lorentey@elte.hu (L,Bu(Brentey K,Ba(Broly) - (spam-split): respect spam-split-disabled. From - lorentey@elte.hu (L,Bu(Brentey K,Ba(Broly) + * spam.el (spam-disable-spam-split-during-ham-respool): New + variable. + (spam-ham-copy-or-move-routine): Respect + spam-disable-spam-split-during-ham-respool. + (spam-split-disabled): New variable. + (spam-split): Respect spam-split-disabled. 2003-12-10 Katsumi Yamaoka @@ -427,19 +423,21 @@ input. (pgg-decode-armor-region): Don't parse packet if decoding fail. -2003-12-09 Teodor Zlatanov +2003-12-09 L,Bu(Brentey K,Ba(Broly * spam.el (spam-check-bogofilter): run in the correct buffer. - From lorentey@elte.hu (L,Bu(Brentey K,Ba(Broly). - (spam-bogofilter-database-directory): correct customization - group. From Xavier Maillard . + +2003-12-09 Xavier Maillard + + * spam.el (spam-bogofilter-database-directory): correct + customization group. 2003-12-09 Per Abrahamsen * nnmail.el (nnmail-lazy, nnmail-split-fancy): New widgets. (nnmail-split-fancy): Use it. -2003-12-08 Joel Ray Holveck (tiny change) +2003-12-08 Joel Ray Holveck (tiny change) * gnus-sum.el (gnus-summary-save-parts-1): Consider the "name" parameter of Content-Type. @@ -465,12 +463,15 @@ * mml-smime.el (mml-smime-sign): Replace CRLF with LF in OpenSSL output. Reported by Arne J,Ax(Brgensen . -2003-12-07 Simon Josefsson +2003-12-07 Lloyd Zusman (tiny change) * pgg-gpg.el (pgg-gpg-recipient-arg): Add. - (pgg-gpg-encrypt-region): Use it. Tiny patch from Lloyd Zusman - . - (pgg-gpg-recipient-argument): Doc fix. Renamed fro p-g-r-a. + (pgg-gpg-encrypt-region): Use it. + +2003-12-07 Simon Josefsson + + * pgg-gpg.el (pgg-gpg-recipient-argument): Doc fix. + Renamed from p-g-r-a. (pgg-gpg-encrypt-region): Update. 2003-12-07 Jesper Harder @@ -509,32 +510,32 @@ * gnus-util.el: Require alist and provide tm-view when compiling with XEmacs. -2003-12-03 Steve Youngs +2003-12-03 Jerry James (tiny change) * gnus-xmas.el: Add autoloads for macros defined in gnus.el. - From Jerry James . * gnus-util.el: Get rmail definitions when compiling. - From Jerry James . * dns.el: Require gnus-xmas at compile time instead of trying to autoload `gnus-xmas-open-network-stream' because it wasn't picking up the macro. - From Jerry James . -2003-12-01 Kevin Greiner +2003-12-01 Kevin Greiner + * gnus-agent.el (gnus-agent-consider-all-articles): Updated docstring. (gnus-predicate-implies-unread, gnus-predicate-implies-unread-1): Fixed implementation such that the predicate `true' no longer evaluates to t. -2003-12-01 Teodor Zlatanov +2003-12-01 Adrian Lanz (tiny change) * spam.el (spam-check-bogofilter): check the bogofilter headers - AFTER the save-excursion scope is over. From Adrian Lanz - . - (spam-fetch-field-message-id-fast): doc fix + AFTER the save-excursion scope is over. + +2003-12-01 Teodor Zlatanov + + * spam.el (spam-fetch-field-message-id-fast): Doc fix 2003-12-01 Simon Josefsson @@ -549,24 +550,26 @@ (gnus-agent-expire-group-1): Only print a message for an article when there actually was something done to it. + * gnus-agent.el (gnus-agent-expire-unagentized-dirs): Custom fix. + +2003-11-30 Kenichi Handa + * mm-util.el (mm-enable-multibyte): Call set-buffer-multibyte with 'to argument. Fixes something or other in Emacs 22, and is - backwards compatible. From Kenichi Handa . - - * gnus-agent.el (gnus-agent-expire-unagentized-dirs): Custom fix. + backwards compatible. 2003-11-30 Lars Magne Ingebrigtsen * gnus-agent.el (gnus-agent-covered-methods): Remove nil methods. -2003-11-29 Kevin Greiner +2003-11-29 Kevin Greiner * gnus-start.el (gnus-activate-group): The active range of the group must include the articles known to the agent. * gnus.el (gnus-agent-method-p): Accept a server name as the method being tested. -2003-11-29 Alexander Kreuzer (tiny change) +2003-11-29 Alexander Kreuzer (tiny change) * nnrss.el (nnrss-check-group): Set xml when nnrss-use-local is t. @@ -669,7 +672,7 @@ * dgnushack.el (mapc): Add the compiler macro for Emacs 20. -2003-11-24 Kevin Greiner +2003-11-24 Kevin Greiner * gnus-srvr.el (gnus-server-insert-server-line): The server names used in gnus-agent are different (for example, the native server uses the alias "native") from the names in gnus-srvr. @@ -681,7 +684,7 @@ new gnus-server-named-server function to get gnus-agent compatible names from the server buffer. -2003-11-20 Kevin Greiner +2003-11-20 Kevin Greiner * gnus.el (gnus-agent-covered-methods): Documented use of named servers, not methods, to identity agentized groups. @@ -762,12 +765,12 @@ * gnus-score.el (gnus-decay-score): Return a surely smaller value than the argument in XEmacs. -2003-11-18 Reiner Steib +2003-11-18 Sam Steingold * message.el (message-insert-to): Don't use `gnus-message'. (message-header-synonyms): New variable. (message-carefully-insert-headers): Use it (check for synonyms). - Added doc-string. From Sam Steingold . + Added doc-string. 2003-11-17 Lars Magne Ingebrigtsen @@ -848,13 +851,16 @@ 2003-11-10 Reiner Steib - * message.el (message-insert-to): Do error out when the user - requested no Cc. Don't insert empty To. Can be added to - `message-setup-hook' now. From Sam Steingold . - (message-mode-field-menu): Moved some entries, added + * message.el (message-mode-field-menu): Moved some entries, added `message-insert-wide-reply'. (message-change-subject): Fixed comment. +2003-11-10 Sam Steingold + + * message.el (message-insert-to): Do error out when the user + requested no Cc. Don't insert empty To. Can be added to + `message-setup-hook' now. + 2003-11-10 Simon Josefsson * pgg-def.el (pgg-encrypt-for-me): Change default from nil to t. @@ -865,13 +871,12 @@ key id too (for decryption). (pgg-gpg-sign-region): Likewise. -2003-11-09 Simon Josefsson +2003-11-09 Satyaki Das * pgg-gpg.el (pgg-gpg-all-secret-keys): New variable. (pgg-gpg-lookup-all-secret-keys): New function. (pgg-gpg-select-matching-key): Likewise. - (pgg-gpg-decrypt-region): Use new functions. From Satyaki Das - . + (pgg-gpg-decrypt-region): Use new functions. 2003-11-07 Teodor Zlatanov @@ -905,10 +910,10 @@ * spam.el (spam-spamoracle): doc change, suggested by Jean-Marc Lasgouttes -2003-11-04 Katsumi Yamaoka +2003-11-04 Norbert Koch (tiny change) * gnus-score.el (gnus-decay-score): Protect against arithmetic - errors. Tiny patch from Norbert Koch . + errors. 2003-10-31 Teodor Zlatanov @@ -925,12 +930,14 @@ (spam-spamoracle-learn-ham, spam-spamoracle-learn-spam): change spam-log-processing-to-registry invocations appropriately -2003-10-31 Simon Josefsson +2003-10-31 Derek Atkins (tiny change) * imap.el (imap-kerberos4-open): Ignore output from ATHENA imtest. - Tiny patch from Derek Atkins . - (imap-process-connection-type): Improve docstring. Suggested by - Derek Atkins . + +2003-10-31 Simon Josefsson + + * imap.el (imap-process-connection-type): Improve docstring. + Suggested by Derek Atkins . 2003-10-31 Teodor Zlatanov @@ -962,11 +969,14 @@ * message.el (message-forward-make-body-plain): Fix ARG=1 mode after separating m-f-m-b. -2003-10-29 Simon Josefsson +2003-10-29 Andre Srinivasan (tiny change) * message.el (message-forward-make-body-plain): Remove ignored - headers. Tiny patch from Andre Srinivasan . - (message-forward-make-body-plain): Fix ARG=1. + headers. + +2003-10-29 Simon Josefsson + + * message.el (message-forward-make-body-plain): Fix ARG=1. 2003-10-28 Jesper Harder @@ -1322,8 +1332,9 @@ * gnus-sum.el (gnus-summary-respool-query): Don't narrow to head, it's done by nnmail-article-group. +2003-10-12 Mark Hood (tiny change) + * gnus-uu.el (gnus-uu-grab-articles): Fix misplaced parens. - From Mark Hood (tiny change) 2003-10-10 Jesper Harder @@ -1387,10 +1398,10 @@ * spam.el (spam-install-hooks-function): Added Autoload cookie. -2003-10-02 Jesper Harder +2003-10-02 Michael Shields * pgg-def.el (pgg-default-keyserver-address): Change to - subkeys.pgp.net. From Michael Shields + subkeys.pgp.net. 2003-10-01 Simon Josefsson @@ -1464,19 +1475,21 @@ * gnus.el (gnus-group-charter-alist): Update. +2003-09-10 Eric Knauel + + * spam-report.el: Use mm-url.el functions for external URL loading + when the built-in HTTP GET is insufficient (e.g. proxies are in + the way). + 2003-09-10 Teodor Zlatanov - * spam-report.el: use mm-url.el functions for external URL - loading when the built-in HTTP GET is insufficient (e.g. proxies - are in the way). From Eric Knauel - . - (spam-report-url-ping-function): new option, defaults to the - built-in HTTP GET (spam-report-url-ping-plain) - (spam-report-url-ping): calls spam-report-url-ping-function now - (spam-report-url-ping-plain): new function, does what - spam-report-url-ping used to do - (spam-report-url-ping-mm-url): function that delegates to - mm-url.el (autoloaded) + * spam-report.el (spam-report-url-ping-function): New option, + defaults to the built-in HTTP GET (spam-report-url-ping-plain). + (spam-report-url-ping): Call spam-report-url-ping-function. + (spam-report-url-ping-plain): New function, does what + spam-report-url-ping used to do. + (spam-report-url-ping-mm-url): Function that delegates to + mm-url.el (autoloaded). 2003-09-08 Teodor Zlatanov @@ -1577,12 +1590,11 @@ (mml-insert-mime-headers): Use it. Based on (tiny) patch from Lars Balker Rasmussen . -2003-08-30 Simon Josefsson +2003-08-30 Gaute B Strokkenes (tiny change) * mail-source.el (mail-source-fetch-imap): Pass correct buffer to imap-open, reverts 2003-03-17 change. Reverse remove before - calling gnus-compress-sequence. From Gaute Strokkenes - (tiny change). + calling gnus-compress-sequence. 2003-08-29 Simon Josefsson @@ -1602,11 +1614,10 @@ the files it may be using. Reported by David Coe . -2003-08-27 Jesper Harder +2003-08-27 Vagn Johansen (tiny change) * gnus-cache.el (gnus-cache-generate-active): Fix bug in - replacement. From Vagn Johansen (tiny - change). + replacement. 2003-08-25 Katsumi Yamaoka @@ -1653,13 +1664,12 @@ * gnus-art.el (gnus-article-edit-done, gnus-article-edit-exit): Redisplay article after editing. -2003-08-20 Simon Josefsson +2003-08-20 Jari Aalto * gnus.el (gnus-read-group): Added check to ask confirmation if Group name contains invalid character. You can use '/' in IMAP, but not in filenames. G m cannot know what the user is creating, so let user decide. See thread m2oeysiev3.fsf@naima.lensflare.org. - Tiny patch from letters@hotpop.com (Jari Aalto+mail.linux). 2003-08-13 Reiner Steib @@ -1712,10 +1722,9 @@ * gnus.el (gnus-refer-article-method): Ditto. * message.el (message-courtesy-message): Ditto. -2003-08-06 Jesper Harder +2003-08-06 Chunyu Wang (tiny change) * gnus-art.el (gnus-header-face-alist): Fix "Newsgroups" entry. - From Chunyu Wang (tiny patch) 2003-08-05 Katsumi Yamaoka @@ -1752,11 +1761,10 @@ * gnus-registry.el (gnus-registry-install): add an initial registry read to the loading when gnus-registry-install is set -2003-07-26 Kai Gro,A_(Bjohann +2003-07-26 Mark Thomas (tiny change) * flow-fill.el (fill-flowed): Empty lines separate paragraphs - even if the preceding line ends with a soft break. Tiny patch - from Mark Thomas . + even if the preceding line ends with a soft break. 2003-07-25 Teodor Zlatanov @@ -1841,8 +1849,7 @@ * imap.el (imap-arrival-filter): Fix test for missing process buffer. -2003-07-09 Kai Gro,A_(Bjohann - From Gaute B Strokkenes (tiny patch). +2003-07-09 Gaute B Strokkenes (tiny change) * imap.el (imap-wait-for-tag): Clarify comment. Use timeout zero for second, after-process-has-died, accept-process-output. @@ -1898,25 +1905,25 @@ (message-canlock-generate) (message-generate-new-buffer-clone-locals): Docstring fixes. -2003-07-07 Kai Gro,A_(Bjohann +2003-07-07 Gaute B Strokkenes (tiny change) * imap.el (imap-wait-for-tag): After the process has died, look - for more output still pending. From Gaute B Strokkenes - (tiny patch). + for more output still pending. 2003-07-07 Teodor Zlatanov * spam.el (spam-bogofilter-score): redisplay article normally after spam-bogofilter-score is called +2003-07-06 Michael Piotrowski (tiny change) + + * gnus-sum.el (gnus-print-buffer): Apply emphasis. + 2003-07-06 Jesper Harder * message.el (message-send-mail-with-sendmail): Handle non-numeric return values. - * gnus-sum.el (gnus-print-buffer): Apply emphasis. - From Michael Piotrowski (tiny change). - * gnus-start.el (gnus-clear-system): Revert change from 2003-06-19. @@ -2013,11 +2020,13 @@ 2003-06-20 Jesper Harder - * gnus-msg.el (gnus-configure-posting-styles): Remove unused - variable. From Jan Rychter . - * spam.el (spam-spamoracle-learn): insert-string is obsolete. +2003-06-20 Jan Rychter + + * gnus-msg.el (gnus-configure-posting-styles): Remove unused + variable. + 2003-06-19 Teodor Zlatanov * spam.el (spam-enter-list): do not enter duplicate addresses into @@ -2050,11 +2059,10 @@ * gnus-util.el (gnus-extract-address-components): Added doc-string. -2003-06-16 Kai Gro,A_(Bjohann +2003-06-16 Michael Albinus * nnml.el (nnml-current-group-article-to-file-alist): Don't read - overview when using compressed files. From Michael Albinus - . + overview when using compressed files. 2003-06-16 Katsumi Yamaoka @@ -2072,8 +2080,7 @@ * gnus-sum.el (gnus-summary-force-verify-and-decrypt): Bind `gnus-article-emulate-mime'. -2003-06-15 Kai Gro,A_(Bjohann - From Tommi Vainikainen . +2003-06-15 Tommi Vainikainen * message.el (message-is-yours-p): New function. Separated common code from message-cancel-news and message-supersede. Added @@ -2081,10 +2088,10 @@ resort. (message-cancel-news, message-supersede): Use message-is-yours-p. -2003-06-13 Kai Gro,A_(Bjohann +2003-06-13 Niklas Morberg * nnimap.el (nnimap-split-articles): Narrow the right buffer to - the headers. From Niklas Morberg . + the headers. 2003-06-12 Dave Love @@ -2101,9 +2108,7 @@ * spam.el (spam-check-bogofilter-headers): fix for when the score is requested but the message is not spam -2003-06-09 Teodor Zlatanov - From Eric - +2003-06-09 Eric Knauel * spam.el (spam-use-spamoracle): new variable (spam-install-hooks): add spamoracle to the list of conditions @@ -2146,8 +2151,7 @@ * gnus-srvr.el (gnus-browse-foreign-server): Parse garbage NNTP groups correctly. -2003-06-06 Kai Gro,A_(Bjohann - From Benjamin Rutt . +2003-06-06 Benjamin Rutt . * message.el (message-fetch-field): Augment documentation to state the narrowed-to-headers restriction. @@ -2173,11 +2177,9 @@ * rfc2047.el (rfc2047-encode-region): Don't error out on invalid strings. -2003-06-04 Jesper Harder +2003-06-04 Ivan Boldyrev (tiny change) * mml1991.el (mml1991-pgg-sign): Insert pgg output as unibyte. - From: Ivan Boldyrev (tiny - change) 2003-06-03 Dave Love @@ -2204,11 +2206,10 @@ * message.el (message-fetch-field): Mention narrow-to-headers requirement. -2003-06-03 Jesper Harder +2003-06-03 Eric Eide * gnus-xmas.el (gnus-xmas-create-image): Use - insert-file-contents-literally. From: Eric Eide - + insert-file-contents-literally. 2003-06-02 Teodor Zlatanov @@ -2313,7 +2314,7 @@ * dgnushack.el (assq-delete-all): Removed the compiler macro. -2003-05-14 Kevin Greiner +2003-05-14 Kevin Greiner * gnus-agent.el (gnus-agentize): Updated documentation to match usage. @@ -2326,7 +2327,7 @@ * gnus.el (gnus-version-number): Bump. -2003-05-14 Lars Magne Ingebrigtsen +2003-05-14 Lars Magne Ingebrigtsen * gnus.el: Gnus v5.10.2 is released. @@ -2385,7 +2386,7 @@ in message. Suggested by Yoichi NAKAYAMA . * pop3.el (pop3-movemail): Ditto. -2003-05-12 Colin Marquardt (tiny change) +2003-05-12 Colin Marquardt (tiny change) * gnus.el (gnus-agent): Docstring fix. @@ -2397,7 +2398,7 @@ (gnus-registry-add-group): add a modification timestamp to each entry (gnus-registry-install-hooks): new function -2003-05-12 Kevin Greiner +2003-05-12 Kevin Greiner * gnus-agent.el (gnus-agent-cat-name): Eval macro while compiling. (gnus-agent-cat-disable-undownloaded-faces): New function. @@ -2426,11 +2427,10 @@ (rfc2047-syntax-table): Fix building table to work in Emacs 22. (rfc2047-unfold-region): Delete unused var `leading'. -2003-05-12 Simon Josefsson +2003-05-12 Ville Skytt,Ad(B (tiny change) * pgg.el (pgg-temp-buffer-show-function): Reuse existing visible - output window if one is available. Tiny patch from Ville Skytt,Ad(B - . + output window if one is available. 2003-05-11 Lars Magne Ingebrigtsen @@ -2495,13 +2495,15 @@ * gnus-registry.el (gnus-registry-cache-file): new file variable (gnus-registry-cache-read, gnus-registry-cache-save): new functions - (gnus-registry-cache-whitespace): new function. From Dan - Christensen (gnus-registry-save, gnus-registry-read): use the new gnus-registry-cache-{read|save} functions, and change the name from gnus-registry-translate-{from|to}-alist (gnus-registry-clear): fixed so it doesn't refer to old function name +2003-05-09 Dan Christensen + + * gnus-registry.el (gnus-registry-cache-whitespace): new function. + 2003-05-09 Jesper Harder * gnus-picon.el (gnus-picon-transform-address): Parse the encoded @@ -2516,8 +2518,9 @@ nnmail-split-fancy-with-parent-ignore-groups can be a single regex in addition to a list of regexes. - * spam.el (spam-use-regex-headers): docstring fix. From Niklas - Morberg +2003-05-08 Niklas Morberg + + * spam.el (spam-use-regex-headers): docstring fix. 2003-05-08 Kai Gro,A_(Bjohann @@ -2588,7 +2591,7 @@ * mm-bodies.el (mm-decode-coding-region-safely): Remove. (mm-decode-body): Don't use mm-decode-coding-region-safely. -2003-05-03 Vasily Korytov (tiny change) +2003-05-03 Vasily Korytov (tiny change) * gnus-util.el (gnus-multiple-choice): Add ", ?". @@ -2705,13 +2708,13 @@ * gnus.el (gnus-version-number): Bump. -2003-05-01 Teodor Zlatanov +2003-05-01 Jon Ericson (tiny change) - * spam-report.el (spam-report-gmane-regex): docstring fix. From - Jon Ericson (tiny change) + * spam-report.el (spam-report-gmane-regex): docstring fix. * gnus.el (gnus-install-group-spam-parameters): docstring fix. - From Jon Ericson (tiny change) + +2003-05-01 Teodor Zlatanov * gnus-registry.el (gnus-registry-fetch-extra) (gnus-registry-store-extra, gnus-registry-group-count): new functions @@ -2719,11 +2722,11 @@ (gnus-registry-add-group): changed to work with extra data element if present -2003-05-01 Lars Magne Ingebrigtsen +2003-05-01 Lars Magne Ingebrigtsen * gnus.el: Gnus v5.10.1 is released. -2003-05-01 Lars Magne Ingebrigtsen +2003-05-01 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.24 is released. @@ -2742,7 +2745,7 @@ * gnus.el: Update copyright for several files. -2003-05-01 Lars Magne Ingebrigtsen +2003-05-01 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.23 is released. @@ -2750,7 +2753,7 @@ * spam-stat.el (spam-stat-test-directory): Compare against zero. -2003-05-01 Trey Jackson (tiny change) +2003-05-01 Trey Jackson (tiny change) * spam-stat.el (spam-stat-test-directory): Skip 0 length files. @@ -2767,11 +2770,11 @@ * gnus.el (gnus-version-number): Bump. -2003-05-01 Lars Magne Ingebrigtsen +2003-05-01 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.22 is released. -2003-05-01 Lars Magne Ingebrigtsen +2003-05-01 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.21 is released. @@ -2779,7 +2782,7 @@ * gnus.el (gnus-version-number): Bump. -2003-05-01 Lars Magne Ingebrigtsen +2003-05-01 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.20 is released. @@ -2872,7 +2875,7 @@ * mm-util.el (mm-charset-to-coding-system): Use user specified charset unless coding-system-get is fboundp. -2003-04-30 Kevin Greiner +2003-04-30 Kevin Greiner * gnus-agent.el (gnus-agent-cat-defaccessor, gnus-agent-cat-name): Wrapped in eval-when-compile. @@ -2978,7 +2981,7 @@ (gnus-mime-display-multipart-related-as-mixed): Added doc-strings, allow customization. -2003-04-27 Kevin Greiner +2003-04-27 Kevin Greiner * dgnushack.el (dgnushack-compile-verbosely): New function. Not currently called (See source for explanation). @@ -2991,11 +2994,11 @@ * gnus.el (gnus-version-number): Bump. -2003-04-27 06:47:31 Lars Magne Ingebrigtsen +2003-04-27 06:47:31 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.19 is released. -2003-04-27 Kevin Greiner +2003-04-27 Kevin Greiner * gnus-registry.el (gnus-register-spool-action): Replaced literal carriage-return character with its escape sequence. @@ -3141,11 +3144,10 @@ * smime.el (smime-decrypt-region): Insert From header. -2003-04-21 Kai Gro,A_(Bjohann +2003-04-21 Gaute B Strokkenes (tiny change) * gnus-fun.el (gnus-face-from-file, gnus-convert-png-to-face): - Max length of header is 726, not 740. From Gaute B Strokkenes - . + Max length of header is 726, not 740. 2003-04-20 Jesper Harder @@ -3270,7 +3272,7 @@ (spam-summary-prepare-exit): check the report-gmane spam processor and run spam-report-gmane-register-routine if it's active - From John Wiegley +2003-04-16 John Wiegley * spam.el (spam-bogofilter-score): check bogofilter headers before checking bogofilter itself @@ -3303,7 +3305,7 @@ * nndiary.el (nndiary-compute-reminders): Don't use setf with nthcdr. -2003-04-16 Kevin Greiner +2003-04-16 Kevin Greiner * gnus-agent.el (gnus-agent-make-cat): Added optional parameter to specify a predicate other than false. @@ -3321,13 +3323,11 @@ * spam.el (spam-split): added save-restriction to save-excursion -2003-04-15 Reiner Steib - From Julien Avarre +2003-04-15 Julien Avarre * gnus-fun.el: Fixed autoload cookie. -2003-04-15 Paul Jarc - From Remi Letot +2003-04-15 Remi Letot * nnmaildir.el (nnmaildir-request-scan): Use gnus-remove-if instead of remove-if. @@ -3381,7 +3381,7 @@ * gnus.el (gnus-group-prefixed-name): Clean up. -2003-04-13 Kevin Greiner +2003-04-13 Kevin Greiner * gnus-agent.el (gnus-agent-group-pathname): Bind gnus-command-method so that gnus-agent-directory will always @@ -3397,7 +3397,7 @@ * gnus.el (gnus-version-number): Bump. -2003-04-13 01:12:01 Lars Magne Ingebrigtsen +2003-04-13 01:12:01 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.18 is released. @@ -3452,7 +3452,7 @@ (mm-encode-body): Don't corrupt UTF-16. (mm-body-encoding): Pay attention to mm-body-charset-encoding-alist. -2003-04-10 Kevin Greiner +2003-04-10 Kevin Greiner * gnus-agent.el (gnus-agent-get-undownloaded-list): Articles in the CACHE are now detected and handled the same as an article @@ -3478,7 +3478,7 @@ * gnus-sum.el (gnus-summary-make-menu-bar): Disable "Import file" and "Create article" items in non-editable groups. -2003-04-09 Kevin Greiner +2003-04-09 Kevin Greiner * gnus-agent.el (gnus-agent-write-active): Added option of replacing, rather than updating, the agent's active file. Do NOT @@ -3591,7 +3591,7 @@ * gnus-sum.el: XEmacs doesn't support the 5th arg to 'load', so don't use it when loading gnus-sum.el if we're in XEmacs. -2003-04-05 Kevin Greiner +2003-04-05 Kevin Greiner * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound print-escape-nonascii to fix more characters in compiled format @@ -3602,7 +3602,7 @@ * gnus-audio.el (gnus-audio-au-player, gnus-audio-wav-player): Fix customization type. -2003-04-04 Kevin Greiner +2003-04-04 Kevin Greiner * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound print-quoted, print-readably, print-escape-multibyte, and @@ -3662,7 +3662,7 @@ * nntp.el (nntp-via-rlogin-command-switches): Doc fix. (nntp-open-via-rlogin-and-telnet): Disable the telnet linemode. -2003-03-31 Kevin Greiner +2003-03-31 Kevin Greiner * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound print-escape-newlines to print escape sequences rather than @@ -3685,7 +3685,7 @@ * gnus.el (gnus-version-number): Bump. -2003-03-31 20:08:19 Lars Magne Ingebrigtsen +2003-03-31 20:08:19 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.17 is released. @@ -3768,20 +3768,24 @@ (gnus-read-newsrc-el-file): call the gnus-read-newsrc-el-hook * gnus-registry.el (gnus-registry-translate-to-alist) - (gnus-registry-translate-from-alist, alist-to-hashtable) - (hashtable-to-alist): new functions + (gnus-registry-translate-from-alist: new functions (gnus-register-spool-action): add a spool item to the registry * gnus.el (gnus-variable-list): added gnus-registry-alist to the list of saved variables (gnus-registry-alist): new variable +2003-03-28 Andreas Fuchs + + * gnus-registry.el (alist-to-hashtable, hashtable-to-alist): New + functions. + 2003-03-27 Simon Josefsson * gnus-art.el (article-decode-group-name): Be correct instead of smart. -2003-03-27 Katsumi Yamaoka +2003-03-27 Katsumi Yamaoka * lpath.el: Bind url-current-object for Emacs; bind gnus-agent-expire-current-dirs for XEmacs; fbind open-ssl-stream @@ -3796,7 +3800,7 @@ * gnus-msg.el (gnus-mailing-list-groups): Fix customize type and doc string. -2003-03-26 Kevin Ryde +2003-03-26 Kevin Ryde * gnus-sum.el (gnus-summary-find-for-reselect): Renamed from gnus-summary-find-uncancelled, skip temporary articles inserted by @@ -3806,7 +3810,7 @@ * smiley.el (smiley-buffer): New function. -2003-03-26 Kevin Greiner +2003-03-26 Kevin Greiner * gnus-agent.el (gnus-agent-fetch-selected-article): Replaced gnus-summary-update-line (which updated the article's face) with @@ -3814,7 +3818,7 @@ face by calling gnus-summary-update-line AND updates the download mark to show that the article was fetched). -2003-03-23 Kevin Greiner +2003-03-23 Kevin Greiner * gnus-agent.el (gnus-agent-expire-unagentized-dirs): Provides option of deleting agent directories for groups/servers that are @@ -3879,7 +3883,7 @@ * gnus-art.el (gnus-treat-display-xface): Don't enable if icontopbm isn't available. -2003-03-21 Kevin Greiner +2003-03-21 Kevin Greiner * gnus-int.el (gnus-open-server): Catch errors in backend's open-server method. Returns nil rather than crashing startup. @@ -3906,7 +3910,7 @@ * message.el (message-split-line): New function. (message-mode-map): Remap split-line to message-split-line. -2003-03-20 Katsumi Yamaoka +2003-03-20 Katsumi Yamaoka * message.el (message-make-overlay): Defalias it to make-overlay. (message-delete-overlay): Defalias it to delete-overlay. @@ -3930,7 +3934,7 @@ * nnrss.el (nnrss-fetch): Fetch the local stuff. (nnrss-check-group): Use it. -2003-03-20 Mark A. Hershberger +2003-03-20 Mark A. Hershberger * nnrss.el: Primitive XML Name-space support. This means that RSS feeds like Kevin Burton's[1] can now be read in Gnus. @@ -3957,7 +3961,7 @@ * gnus-group.el (gnus-group-make-rss-group): New function. -2003-03-20 Katsumi Yamaoka +2003-03-20 Katsumi Yamaoka * message.el (message-idna-to-ascii-rhs-1): Don't use replace-* for highlight overlays. @@ -4054,7 +4058,7 @@ * gnus.el (gnus-version-number): Bump. -2003-03-18 00:38:22 Lars Magne Ingebrigtsen +2003-03-18 00:38:22 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.16 is released. @@ -4511,7 +4515,6 @@ * spam.el: Fix typo. 2003-03-01 Satyaki Das - (Trivial patch.) * pgg-gpg.el (pgg-gpg-process-region): Insert process status into errors-buffer. This produces a nicer error message in case of @@ -4535,7 +4538,7 @@ * message.el (message-make-fqdn): Protect against nil user-mail. -2003-02-28 Vasily Korytov +2003-02-28 Vasily Korytov * gnus-art.el (gnus-boring-article-headers): New values: 'to-list and 'cc-list. @@ -4617,10 +4620,11 @@ * gnus-start.el (gnus-backup-startup-file): Fixed custom type. -2003-02-24 Ted Zlatanov +2003-02-24 Ted Zlatanov + * spam.el: disabled spam-get-article-as-filename - From Michael Shields +2003-02-24 Michael Shields * gnus-group.el (gnus-group-is-exiting-without-update-p): New. * gnus-sum.el (gnus-summary-exit-no-update): Use it. @@ -4634,8 +4638,7 @@ no spam. * spam.el (spam-ham-move-routine): New `copy' argument. -2003-02-24 Kai Gro,A_(Bjohann - From Martin Thornquist +2003-02-24 Martin Thornquist * gnus-topic.el (gnus-topic-select-group): Select last group if after last group. @@ -4752,16 +4755,19 @@ * gnus-start.el (gnus-get-unread-articles-in-group): Make sure the entry for the group exists before we alter it. -2003-02-22 Kai Gro,A_(Bjohann +2003-02-22 David S. Goldberg (tiny change) - * message.el (message-mode): MML tags separate paragraphs. Small - change from David S Goldberg . + * message.el (message-mode): MML tags separate paragraphs. + +2003-02-22 Kai Gro,A_(Bjohann * gnus-agent.el (gnus-agent-get-undownloaded-list): Sort `gnus-newsgroup-headers'. +2003-02-22 Karl Pfl,Ad(Bsterer + * gnus-art.el (gnus-article-refer-article): Grok more message id - formats. From Karl Pfl,Ad(Bsterer . + formats. 2003-02-22 Jesper Harder @@ -4778,8 +4784,7 @@ (gnus-register-spool-action): added hashtable of message ID keys with message motion data -2003-02-21 Florian Weimer - From Reiner Steib . +2003-02-21 Reiner Steib * gnus-art.el (gnus-button-mid-or-mail-heuristic-alist): New variable, used in `gnus-button-mid-or-mail-heuristic'. @@ -4909,11 +4914,11 @@ (spam-mark-spam-as-expired-and-move-routine): made the article move conditional, so it's not called even if there's nothing to move -2003-02-13 Kai Gro,A_(Bjohann +2003-02-13 Kurt B. Kaiser * message.el (message-unix-mail-delimiter): Accept any whitespace after the email address and before the date; do not require the - space character. From Kurt B. Kaiser . + space character. 2003-02-13 Katsumi Yamaoka @@ -5021,7 +5026,7 @@ * gnus.el (gnus-version-number): Bumped. -2003-02-08 23:23:27 Lars Magne Ingebrigtsen +2003-02-08 23:23:27 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.15 is released. @@ -5036,8 +5041,9 @@ * gnus-sum.el (gnus-summary-select-article): Remove blink removal code that only worked under Emacs. - * pgg-gpg.el (pgg-gpg-process-region): Don't blink. From Satyaki - Das . +2003-02-08 Satyaki Das + + * pgg-gpg.el (pgg-gpg-process-region): Don't blink. 2003-02-08 Jesper Harder @@ -5367,15 +5373,14 @@ * gnus.el (gnus-version-number): Bumped. -2003-01-24 20:32:44 Lars Magne Ingebrigtsen +2003-01-24 20:32:44 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.14 is released. -2003-01-24 Kai Gro,A_(Bjohann +2003-01-24 Mark Thomas (tiny change) * gnus-sum.el (gnus-summary-prepare-threads): Reset state for %B - before beginning. Tiny patch from Mark Thomas - . + before beginning. 2003-01-24 Teodor Zlatanov @@ -5491,7 +5496,7 @@ * gnus.el (gnus-version-number): Bumped version number. -2003-01-21 07:15:41 Lars Magne Ingebrigtsen +2003-01-21 07:15:41 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.13 is released. @@ -5672,7 +5677,7 @@ * gnus-audio.el (gnus-audio-au-player): Use executable-find. -2003-01-13 Jhair Tocancipa Triana +2003-01-13 Jhair Tocancipa Triana * gnus-audio.el (gnus-audio-au-player, gnus-audio-wav-player): Use /usr/bin/play as default player. @@ -5754,7 +5759,7 @@ * gnus.el (gnus-version-number): Bumped version. (gnus-summary-line-format): Doc fix. -2003-01-12 22:02:49 Lars Magne Ingebrigtsen +2003-01-12 22:02:49 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.12 is released. @@ -5801,7 +5806,7 @@ * gnus.el (gnus-version-number): Bumped version number. -2003-01-12 13:46:20 Lars Magne Ingebrigtsen +2003-01-12 13:46:20 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.11 is released. @@ -6277,7 +6282,7 @@ * gnus.el (gnus-version-number): Bump version number. -2003-01-05 01:53:30 Lars Magne Ingebrigtsen +2003-01-05 01:53:30 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.10 is released. @@ -6285,7 +6290,7 @@ * gnus.el (gnus-version-number): Fix version number. -2003-01-05 01:40:09 Lars Magne Ingebrigtsen +2003-01-05 01:40:09 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.08 is released. @@ -6789,11 +6794,10 @@ * binhex.el (binhex-decoder-program): Fix docstring. -2002-12-21 Kai Gro,A_(Bjohann +2002-12-21 Laurent Martelli * mm-decode.el (mm-mailcap-command): Do not backslash-quote special chars if the mailcap file uses single quotes around %s. - From Laurent Martelli . 2002-12-19 Paul Jarc @@ -6834,7 +6838,7 @@ * nntp.el (nntp-with-open-group-first-pass): Do not wrap in eval-when-compile. Suggested by Kevin Greiner. -2002-12-13 Kevin Greiner +2002-12-13 Kevin Greiner * gnus-agent.el (gnus-agent-max-fetch-size): New, defcustom. (gnus-agent-fetch-headers): Initialize gnus-agent-overview-buffer @@ -6846,13 +6850,13 @@ Multiple chunks in the same group may perform arbitrarily large updates. -2002-12-12 Kevin Greiner +2002-12-12 Kevin Greiner * gnus-agent.el (gnus-agent-fetch-selected-article): Added call to gnus-summary-update-download-mark to update the article in the summary. -2002-12-11 Kevin Greiner +2002-12-11 Kevin Greiner * gnus.el (gnus-summary-high-uncached-face, gnus-summary-normal-uncached-face, gnus-summary-low-uncached-face) @@ -7070,7 +7074,7 @@ * gnus-sum.el (gnus-summary-insert-old-articles): No longer passes compressed range to gnus-summary-insert-articles. -2002-11-26 Kevin Ryde +2002-11-26 Kevin Ryde * gnus-art.el (gnus-mime-copy-part): Look for filename parameter under content-disposition, not content-type. @@ -7108,7 +7112,7 @@ * gnus-agent.el (gnus-agent-check-overview-buffer): Make debugger print message on entry. - From Kevin Greiner . +2002-11-25 Kevin Greiner . * gnus-range.el (gnus-range-difference): New function. * gnus-sum.el (gnus-summary-insert-old-articles): Use it. @@ -7119,8 +7123,7 @@ gnus-remove-from-range instead of gnus-range-difference which doesn't exist. -2002-11-23 Kai Gro,A_(Bjohann - From Kevin Greiner . +2002-11-23 Kevin Greiner * gnus-agent.el (gnus-agent-downloaded-article-face): New face, used for showing which articles have been downloaded. @@ -7230,7 +7233,7 @@ * nnimap.el (nnimap-request-expire-articles): Compress sequence before storing \Deleted mark on expired articles. -2002-11-17 Shenghuo Zhu +2002-11-17 Shenghuo Zhu Trivial patch from Markus Rost * gnus-sum.el (gnus-summary-goto-unread): Doc fix - escape open @@ -7320,19 +7323,18 @@ * gnus-group.el (gnus-group-delete-group): gnus-cache-active-hashtb might be void. -2002-11-02 Simon Josefsson +2002-11-02 Raymond Scholz * pgg-gpg.el (pgg-gpg-encrypt-region): Makes PGG respect the - setting of the default user ID. From Raymond Scholz - . + setting of the default user ID. 2002-11-01 Jesper Harder * mm-bodies.el (mm-body-encoding): Don't return 8bit for 7bit charset. -2002-10-31 Ted Zlatanov - From Alex Schroeder +2002-10-31 Alex Schroeder + * spam-stat.el (spam-stat-process-directory): add dir to message (spam-stat-reduce-size): No longer remove words with values close to 0.5, because the default value is 0.2. @@ -7395,8 +7397,7 @@ * mml.el (mml-mode-map): Fixed keybindings for mml-secure-* functions. -2002-10-28 Katsumi Yamaoka - From mah@everybody.org (Mark A. Hershberger). +2002-10-28 Mark A. Hershberger * mm-url.el (mm-url-insert-file-contents): Make it return the same type values ("url" size) regardless of the values of @@ -7644,7 +7645,7 @@ * gnus-spec.el (gnus-pad-form): Use gnus-string-width-function. -2002-10-11 Ted Zlatanov +2002-10-11 Ted Zlatanov * spam.el (spam-check-ifile): added ifile as a spam checking backend, and spam-use-ifle as the variable to toggle that check. @@ -7654,7 +7655,7 @@ * message.el (message-beginning-of-line): New variable. (message-beginning-of-line): Use it. -2002-10-11 Ted Zlatanov +2002-10-11 Ted Zlatanov * spam.el: more compilation fixes for BBDB @@ -7690,7 +7691,7 @@ (mml2015-unabbrev-trust-alist): New. (mml2015-gpg-extract-signature-details): Use it. -2002-10-10 Ted Zlatanov +2002-10-10 Ted Zlatanov * spam.el: compilation fixes, spam-check-bbdb function is nil if no BBDB installed @@ -7818,7 +7819,7 @@ * pgg.el, pgg-gpg.el, pgg-pgp5.el: Don't depend on luna.el. -2002-09-29 Daiki Ueno +2002-09-29 Daiki Ueno * pgg.el: Remove dependency on calist.el. @@ -7859,13 +7860,12 @@ * message.el (message-required-mail-headers): Remove Lines:. -2002-10-03 Kai Gro,A_(Bjohann - From Jesper Harder. +2002-10-03 Jesper Harder * gnus-group.el (gnus-group-fetch-charter, gnus-group-fetch-control): Prompt for group if given a prefix argument. - * gnus-sum.el (t): Add gnus-group-fetch-charter and + * gnus-sum.el: Add gnus-group-fetch-charter and gnus-group-fetch-control to summary key map and menu. 2002-10-03 Paul Jarc @@ -7880,13 +7880,12 @@ (gnus-agent-fetch-selected-article): New function for gnus-select-article-hook or gnus-mark-article-hook. -2002-10-02 Katsumi Yamaoka - From Peter von der Ahe . +2002-10-02 Peter von der Ahe * gnus-ems.el (gnus-x-splash): Set coding-system-for-read to raw-text. -2002-09-30 Ted Zlatanov +2002-09-30 Ted Zlatanov * spam.el: merged changes from pinard@iro.umontreal.ca (Fran,Ag(Bois Pinard). @@ -7927,8 +7926,7 @@ * nnimap.el (nnimap-fixup-unread-after-getting-new-news): Remove. -2002-09-27 Katsumi Yamaoka - From Mats Lidell . +2002-09-27 Mats Lidell * gnus-art.el (gnus-article-mode-syntax-table): Replace "-" to " ". @@ -8079,20 +8077,19 @@ * nnmaildir.el (nnmaildir--grp-add-art): fix minimum article number when article 1 does not exist. -2002-09-25 Kai Gro,b_(Bjohann +2002-09-25 Reiner Steib * gnus-art.el (gnus-button-handle-apropos-variable): Fall back to apropos if apropos-variable does not exist. (gnus-button-guessed-mid-regexp) (gnus-button-handle-describe-prefix, gnus-button-alist): Better - regexes. From Reiner Steib. + regexes. (gnus-button-handle-describe-function) - (gnus-button-handle-describe-variable): Doc fix. From Reiner Steib. + (gnus-button-handle-describe-variable): Doc fix. (gnus-button-handle-describe-key, gnus-button-handle-apropos) - (gnus-button-handle-apropos-command): Doc fix. From Reiner Steib. + (gnus-button-handle-apropos-command): Doc fix. -2002-09-25 Mark A. Hershberger - Trivial patch. +2002-09-25 Mark A. Hershberger (tiny change) * nnrss.el (nnrss-save-server-data): Save nnrss-group-alist in the file. @@ -8114,22 +8111,19 @@ (mml2015-pgg-encrypt): New functions. (defvar, autoload): Prevent byte-compile warnings. -2002-09-24 Katsumi Yamaoka - From TSUCHIYA Masatoshi . +2002-09-24 TSUCHIYA Masatoshi . * gnus-art.el (article-strip-banner): Check for the existence of from header. -2002-09-23 Kai Gro,b_(Bjohann +2002-09-23 Reiner Steib * gnus-art.el (gnus-button-guessed-mid-regexp): Improved regexp. (gnus-button-alist): Improved regexp for gnus-button-handle-mid-or-mail (false positives), fixed gnus-button-handle-man entries. - From Reiner Steib. -2002-09-23 Paul Jarc - From Josh Huber. +2002-09-23 Josh Huber * nnmaildir.el (nnmaildir--update-nov): fix wrong-type error when nnmail-extra-headers is non-nil. @@ -8158,8 +8152,7 @@ * gnus-sum.el (gnus-summary-next-group): Switch to the summary buffer. -2002-09-20 Kai Gro,b_(Bjohann - From Reiner Steib. +2002-09-20 Reiner Steib * gnus-art.el (gnus-button-handle-custom, gnus-button-handle-mid-or-mail, @@ -8185,10 +8178,10 @@ * message.el (message-completion-alist): Add Reply-To, From, etc. -2002-09-18 Simon Josefsson +2002-09-18 Nevin Kapur * nnimap.el (nnimap-request-expire-articles): Make flag setting - conditional. From Nevin Kapur . + conditional. 2002-09-17 Simon Josefsson @@ -8198,8 +8191,7 @@ when articles are found. Suggested by Nevin Kapur . -2002-09-17 Kai Gro,A_(Bjohann - From Reiner Steib . +2002-09-17 Reiner Steib * message.el (message-strip-subject-trailing-was) (message-change-subject, message-add-archive-header) @@ -8252,8 +8244,7 @@ * gnus-sum.el (gnus-summary-next-group): Semi-exit only when needed. -2002-09-12 Katsumi Yamaoka - From John Paul Wallington . +2002-09-12 John Paul Wallington . * gnus.el (gnus-visual, gnus-meta): Fix typo. @@ -8267,8 +8258,7 @@ (nnimap-split-rule): Doc fix. (nnimap-request-expire-articles): Cleanup code. -2002-09-11 Katsumi Yamaoka - From TSUCHIYA Masatoshi . +2002-09-11 TSUCHIYA Masatoshi . * gnus-art.el (gnus-article-address-banner-alist): New option. (article-strip-banner): Refer the above option to split banners of @@ -8348,10 +8338,10 @@ * gnus-util.el (gnus-frame-or-window-display-name): Exclude invalid display names. -2002-08-30 Simon Josefsson +2002-08-30 Reiner Steib * gnus-group.el (gnus-group-fetch-control): Fix typo in last - commit. From Reiner Steib <4uce.02.r.steib@gmx.net>. + commit. 2002-08-26 Jesper Harder @@ -8362,10 +8352,9 @@ (gnus-group-fetch-control): New function. Add them to the keymap and menu. Require mm-url. -2002-08-30 Katsumi Yamaoka +2002-08-30 Alex Schroeder . * gnus-mlspl.el (gnus-group-split-fancy): Doc fix. - From Alex Schroeder . 2002-08-29 Jesper Harder @@ -8413,10 +8402,10 @@ * lpath.el: Fbind `frame-parameter', `make-frame-on-display', `device-connection' and `dfw-device'. -2002-08-22 Kai Gro,b_(Bjohann +2002-08-22 Jochen Hein (tiny change) * gnus-art.el (gnus-emphasis-alist): Strikethru had a lot of false - positives, make it stricter. From Jochen Hein (trivial change). + positives, make it stricter. 2002-08-21 Katsumi Yamaoka @@ -8433,8 +8422,7 @@ * lpath.el: Fbind w32-focus-frame and x-focus-frame. -2002-08-20 Katsumi Yamaoka - From $B>.4X(B $B5HB'(B (KOSEKI Yoshinori) . +2002-08-20 $B>.4X(B $B5HB'(B (KOSEKI Yoshinori) . * message.el (message-set-auto-save-file-name): Add support for the Cygwin Emacs; the system-type is `cygwin'. @@ -8544,7 +8532,7 @@ * gnus.el (gnus-version-number): Bumped version number. -2002-08-04 01:48:57 Lars Magne Ingebrigtsen +2002-08-04 01:48:57 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.07 is released. @@ -8556,18 +8544,17 @@ (gnus-article-sort-by-random): New function. (gnus-thread-sort-by-random): New function. -2002-08-02 Simon Josefsson +2002-08-02 Scott A Crosby * gnus-logic.el (gnus-advanced-integer): Swap arguments in - funcall. From Scott A Crosby . + funcall. 2002-07-31 Danny Siu * nnimap.el (nnimap-split-articles): do not call nnmail-fetch-field when splitting malformed messages without message-id -2002-07-28 Kai Gro,b_(Bjohann - From Niklas Morberg . +2002-07-28 Niklas Morberg . * nnweb.el (nnweb-type, nnweb-type-definition) (nnweb-gmane-create-mapping, nnweb-gmane-wash-article) @@ -8611,21 +8598,18 @@ nnmail-expiry-target to 'delete, so that absolute deletion happens when absolute deletion is requested. -2002-07-21 Kai Gro,b_(Bjohann - From Nevin Kapur . +2002-07-21 Nevin Kapur . * nnmail.el (nnmail-fancy-expiry-target): Treat nonexisting headers as empty headers. -2002-07-21 Kai Gro,b_(Bjohann - From Jochen Hein . +2002-07-21 Jochen Hein . * gnus-art.el (gnus-emphasis-alist): Add strikethrough and correct typo. (gnus-emphasis-strikethru): New face. -2002-07-20 Kai Gro,b_(Bjohann - From Jason Merrill . +2002-07-20 Jason Merrill . * nnfolder.el (nnfolder-retrieve-headers): Avoid searching the entire file for each of a sequence of missing articles. @@ -8636,8 +8620,7 @@ * gnus-sum.el (gnus-summary-insert-new-articles): Count down to avoid nreverse. -2002-07-14 Kai Gro,b_(Bjohann - From Ted Zlatanov . +2002-07-14 Ted Zlatanov * gnus-sum.el (gnus-auto-expirable-marks): Remove `spam'. (gnus-summary-mode-line-format-alist): Add %h for number of @@ -8652,25 +8635,24 @@ (gnus-mark-article-as-read, gnus-mark-article-as-unread) (gnus-mark-article-as-unread, gnus-summary-catchup): Grok spam. -2002-07-10 Simon Josefsson +2002-07-10 KANEMATSU Daiji * nnimap.el (nnimap-split-to-groups): Allow group string to be a - function. From KANEMATSU Daiji . + function. 2002-07-09 Nevin Kapur * gnus-sum.el (gnus-summary-delete-article): Respect group parameters while expiring. -2002-07-08 Simon Josefsson +2002-07-08 Henrik Enberg - * gnus-art.el (article-make-date-line): Fix string. From Henrik - Enberg. + * gnus-art.el (article-make-date-line): Fix string. -2002-07-08 Kai Gro,b_(Bjohann +2002-07-08 Niklas Morberg * gnus-art.el (article-unsplit-urls): Only display MIME when this - function is called interactively. From Niklas Morberg. + function is called interactively. 2002-07-06 ShengHuo ZHU @@ -8692,10 +8674,10 @@ * nnmail.el (nnmail-split-methods): fix custom type. -2002-07-02 Kai Gro,b_(Bjohann +2002-07-02 Niklas Morberg * gnus-art.el (article-unsplit-urls): Keep URL buttonized after - unsplitting. From Niklas Morberg . + unsplitting. 2002-07-01 Kai Gro,b_(Bjohann @@ -8707,13 +8689,12 @@ * nntp.el (nntp-via-rlogin-command-switches): New variable. (nntp-open-via-rlogin-and-telnet): Re-revert; use the var above. -2002-06-28 Kai Gro,b_(Bjohann +2002-06-28 Katsumi Yamaoka * message.el (message-font-lock-keywords): Don't fontify headers in the message body, only in the header. (message-font-lock-make-header-matcher): New function, used by message-font-lock-keywords. - From Katsumi Yamaoka . 2002-06-28 Katsumi Yamaoka @@ -8766,24 +8747,22 @@ (last, coerce, subseq): Remove compiler macros for those built-in or unused functions. -2002-06-17 Kai Gro,b_(Bjohann +2002-06-17 Simon Josefsson * gnus-start.el (gnus-clear-system, gnus-read-newsrc-file): Make sure to write byte-compiled versions of gnus-*-format-alist to - .newsrc.eld. From Simon Josefsson. + .newsrc.eld. -2002-06-16 Kai Gro,b_(Bjohann +2002-06-16 Bj,Ax(Brn Mork * gnus-agent.el (gnus-agent-read-servers) (gnus-agent-write-servers): Put server name (string like "nnchoke:frumple") in the file instead of a server specification (Lisp expression like (nnchoke "frumple" ...parameters...)). - From Bj,Ax(Brn Mork . -2002-06-16 Simon Josefsson +2002-06-16 Reiner Steib - * gnus-cache.el (gnus-cache-remove-article): n is &optional. From - Reiner Steib <4uce.02.r.steib@gmx.net>. + * gnus-cache.el (gnus-cache-remove-article): n is &optional. 2002-06-15 ShengHuo ZHU @@ -8819,8 +8798,10 @@ * gnus-int.el (gnus-request-move-article): Agent expire article if successfuly moved. +2002-06-11 Niklas Morberg + * nnweb.el (nnweb-google-create-mapping): Honors the value of - nnweb-max-hits. From Niklas Morberg . + nnweb-max-hits. 2002-06-10 Simon Josefsson @@ -8869,11 +8850,10 @@ * nnmail.el (nnmail-mail-splitting-decodes): New variable. (nnmail-article-group): Use it. -2002-05-30 Kai Gro,b_(Bjohann +2002-05-30 Jesper Harder * gnus-msg.el (gnus-inews-yank-articles): Merge split header lines - so that code reading them won't be surprised. From Jesper Harder - . + so that code reading them won't be surprised. 2002-05-29 Simon Josefsson @@ -8890,11 +8870,10 @@ * gnus-group.el (gnus-group-line-format): Doc fix. -2002-05-28 Kai Gro,b_(Bjohann +2002-05-28 Jesper Harder * gnus-msg.el (gnus-inews-yank-articles): Unfold headers of - original article before yanking. From Jesper Harder - . + original article before yanking. 2002-05-26 Simon Josefsson @@ -8920,22 +8899,23 @@ (gnus-summary-prepare-threads): Avoid simplifying every Subject twice by saving the simplified subject string in simp-subject. -2002-05-23 Simon Josefsson +2002-05-23 Benjamin Rutt (tiny change) - * gnus-msg.el (gnus-confirm-mail-reply-to-news): Typo. Trivial - change from Benjamin Rutt . + * gnus-msg.el (gnus-confirm-mail-reply-to-news): Typo. - * nnweb.el (nnweb-type): Remove dejanewsold. Trivial change from - Niklas Morberg . +2002-05-23 Niklas Morberg (tiny change) + + * nnweb.el (nnweb-type): Remove dejanewsold. 2002-05-22 Simon Josefsson * sieve.el (sieve-change-region): Define it before it is used. +2002-05-22 Benjamin Rutt + * gnus-msg.el (gnus-confirm-mail-reply-to-news) (gnus-summary-reply): Ask for confirmation when replying to news. - Defaults to not ask. From Benjamin Rutt - . + Defaults to not ask. * nnimap.el (nnimap-nov-is-evil): Improve doc. @@ -8990,10 +8970,13 @@ * nnmail.el (nnmail-cache-insert): Change group to required, removed code which tried to figure out the group. -2002-05-13 Josh Huber +2002-05-13 Hans de Graaff * mml.el (mml-generate-mime-1): Fix mml generation for signed only - messages. From Hans de Graaff . + messages. + +2002-05-13 Josh Huber + * nnml.el (nnml-request-accept-article): Pass in the group name to nnmail-cache-insert, since it's available. @@ -9001,8 +8984,7 @@ * nndoc.el (nndoc-mime-digest-type-p): Set proper file-end. -2002-05-08 Kai Gro,b_(Bjohann - From Florian Weimer . +2002-05-08 Florian Weimer * gnus.el (subscribed): New group parameter. (gnus-find-subscribed-addresses): Use it. @@ -9022,16 +9004,15 @@ parenthesis for "<" and ">". Suggested by Andreas Schwab . -2002-05-07 Kai Gro,b_(Bjohann +2002-05-07 Josh Huber * nnmail.el (nnmail-cache-insert): Prefer group-art over group - when intuiting the group the message is written to. From Josh - Huber . + when intuiting the group the message is written to. -2002-05-06 Simon Josefsson +2002-05-06 Matt Armstrong * gnus-topic.el (gnus-group-topic-parameters): Work when group - buffer doesn't show group. From Matt Armstrong . + buffer doesn't show group. 2002-05-06 Josh Huber @@ -9078,7 +9059,7 @@ server. (nnimap-mailbox-info): defvar instead of defvoo. -2002-05-01 20:09:21 Lars Magne Ingebrigtsen +2002-05-01 20:09:21 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.06 is released. @@ -9188,8 +9169,7 @@ * gnus-art.el (article-unsplit-urls): Allow trailing SPC. -2002-04-24 Kai Gro,b_(Bjohann - From Dan Christensen . +2002-04-24 Dan Christensen * nndoc.el (nndoc-type-alist, nndoc-lanl-gov-announce-type-p) (nndoc-transform-lanl-gov-announce, nndoc-generate-lanl-gov-head): @@ -9211,11 +9191,10 @@ (gnus-netrc-get, gnus-netrc-machine, gnus-parse-netrc): Aliased to new code in netrc.el. -2002-04-23 Kai Gro,b_(Bjohann +2002-04-23 Matthieu Moy * gnus-msg.el (gnus-summary-resend-message-edit): Remove - message-ignored-resent-headers, too. From Matthieu Moy - . + message-ignored-resent-headers, too. 2002-04-22 Bj,Av(Brn Torkelsson @@ -9280,8 +9259,7 @@ * message.el (message-gen-unsubscribed-mft): accept a prefix argument so CC can be included with C-u C-c C-f C-a -2002-04-17 Kai Gro,b_(Bjohann - From Ted Zlatanov . +2002-04-17 Ted Zlatanov * spam.el (spam-whitelist, spam-blacklist, spam-enter-whitelist): Improve docstring. @@ -9318,11 +9296,10 @@ * nnml.el (nnml-save-nov, nnml-generate-nov-file): * pop3.el (pop3-md5): Don't hardcode point-min == 1. -2002-04-12 Katsumi Yamaoka +2002-04-12 Daiki Ueno * gnus-srvr.el (gnus-server-set-info): Clear `gnus-server-method-cache' when `gnus-server-alist' is changed. - From Daiki Ueno . 2002-04-11 Simon Josefsson @@ -9476,20 +9453,18 @@ * message.el (message-mode): Fix doc. -2002-03-25 Simon Josefsson +2002-03-25 Matthieu Moy - * message.el (message-subject-re-regexp): Skip Re[42]: junk. From - Matthieu Moy . + * message.el (message-subject-re-regexp): Skip Re[42]: junk. 2002-03-24 Jesper Harder * mml-sec.el (mml-unsecure-message): Add docstring. -2002-03-23 ShengHuo ZHU +2002-03-23 Andre Srinivasan (tiny change) * nnmail.el (nnmail-large-newsgroup): Fix doc, allow non-numeric value. - Trivial change from andre@slamdunknetworks.com 2002-03-22 Josh Huber @@ -9517,8 +9492,9 @@ * message.el (message-font-lock-keywords): Support multi-line MML tags. +2002-03-21 L,Bu(Brentey K,Ba(Broly + * gnus-sum.el (gnus-print-buffer): Remove gnus-decoration. - Trivial change from lorentey@elte.hu (L,Bu(Brentey K,Aa(Broly) 2002-03-20 Katsumi Yamaoka @@ -9542,30 +9518,28 @@ (gnus-sum-thread-tree-leaf-with-other) (gnus-sum-thread-tree-single-leaf): Make customizable. -2002-03-16 Simon Josefsson +2002-03-16 Francis Litterio * gnus-util.el (gnus-extract-address-components): Don't break on - names such as James "Kibo" Parry. From Francis Litterio - . + names such as James "Kibo" Parry. -2002-03-13 Simon Josefsson +2002-03-13 Pavel Jan,Am(Bk - * pop3.el (pop3-open-server): Revert multibyte change. From - Pavel@Janik.cz (Pavel Jan,Am(Bk). + * pop3.el (pop3-open-server): Revert multibyte change. - * message.el (message-send-mail-with-qmail): Make it work. From - Pavel@Janik.cz (Pavel Jan,Am(Bk). + * message.el (message-send-mail-with-qmail): Make it work. 2002-03-13 Josh Huber * message.el (message-make-mft): Set case-fold-search while generating the MFT. Also, a little cleanup in the MFT code. -2002-03-12 Simon Josefsson +2002-03-12 Faried Nawaz (tiny change) - * message.el (message-qmail-inject-args): May be function. - (message-send-mail-with-qmail): Call function if m-q-i-a is - function. From fn@hungry.org (Faried Nawaz). + * message.el (message-qmail-inject-args): May be function. Adjust + doc string and custom type. + (message-send-mail-with-qmail): Call function if m-q-i-a is a + function. 2002-03-12 ShengHuo ZHU @@ -9587,26 +9561,26 @@ * nnslashdot.el (nnslashdot-request-article): Remove javascript too. -2002-03-09 ShengHuo ZHU +2002-03-09 Andre Srinivasan (tiny change) * gnus-sum.el (gnus-summary-save-parts-default-mime): Remove duplication. (gnus-summary-save-parts-type-history): Ditto. (gnus-summary-save-parts-last-directory): Ditto. - Trivial change from andre@slamdunknetworks.com 2002-03-09 Paul Jarc * gnus-start.el (gnus-auto-subscribed-groups): Include nnmaildir. +2002-03-06 Matthieu Moy + + * gnus-msg.el (gnus-summary-resend-message-edit): New function. + 2002-03-06 ShengHuo ZHU * nnslashdot.el (nnslashdot-request-article): Use "" as the end of the first article. - * gnus-msg.el (gnus-summary-resend-message-edit): New function. - From Matthieu Moy - * message.el (message-add-action): Use add-to-list. (message-delete-action): New function. @@ -9668,17 +9642,15 @@ completing-read. (mm-view-pkcs7-decrypt): CRLF->LF. -2002-03-04 Paul Jarc +2002-03-04 Teodor Zlatanov * message.el (message-hierarchical-addresses): New variable. (message-get-reply-headers): Use it. - From Ted Zlatanov -2002-03-03 ShengHuo ZHU +2002-03-03 Geoff Greene (tiny change) * message.el (message-mode): If buffer-file-name, don't set auto save file name. - Trivial change from Geoff Greene 2002-03-02 ShengHuo ZHU @@ -9725,11 +9697,12 @@ * gnus-sum.el (gnus-articles-to-read): Use large-newsgroup-initial. (gnus-summary-insert-old-articles): Ditto. -2002-02-26 ShengHuo ZHU +2002-02-26 TSUCHIYA Masatoshi * gnus-sum.el (gnus-articles-to-read): `gnus-large-newsgroup' is used as the default answer of the question, "How many articles?". - From TSUCHIYA Masatoshi + +2002-02-26 ShengHuo ZHU * nnagent.el (nnagent-retrieve-headers): Remove articles with small numbers. @@ -9738,14 +9711,15 @@ * deuglify.el: Fix comments. +2002-02-23 Andre Srinivasan (tiny change) + + * mml.el (mml-generate-mime-1): Add cdr. + 2002-02-23 ShengHuo ZHU * html2text.el (html2text-clean-anchor): If there is no HREF, insert nothing. - * mml.el (mml-generate-mime-1): Add cdr. - From: andre@slamdunknetworks.com - * mm-view.el (mm-text-html-renderer-alist): Add html2text. (mm-text-html-washer-alist): Ditto. @@ -9761,11 +9735,15 @@ * deuglify.el: Change copy right. Add autoload. Add coding-system. - * deuglify.el: New file. The original file name is - gnus-outlook-deuglify.el from Raymond Scholz . +2002-02-22 Raymond Scholz + + * deuglify.el: New file. The original file name is + gnus-outlook-deuglify.el. + +2002-02-22 Andre Srinivasan (tiny change) * mm-decode.el (mm-display-external): Use - mm-file-name-rewrite-functions. From + mm-file-name-rewrite-functions. 2002-02-22 Paul Jarc @@ -9801,17 +9779,19 @@ * gnus-art.el (gnus-article-edit-done): Widen the buffer. + * message.el (message-send-mail): Be talkative. + +2002-02-20 TSUCHIYA Masatoshi + * gnus-group.el (gnus-group-name-decode): Don't test multibyte-string, because it breaks XEmacs. - From: TSUCHIYA Masatoshi - * message.el (message-send-mail): Be talkative. +2002-02-20 Reiner Steib * mm-decode.el (mm-inlined-types): Add application/x-emacs-lisp. (mm-automatic-display): Ditto. * mailcap.el (mailcap-mime-data): Ditto. - From: Reiner Steib <4uce.02.r.steib@gmx.net> 2002-02-20 Katsumi Yamaoka @@ -9853,10 +9833,10 @@ * nnultimate.el (nnultimate-retrieve-headers): Clean up. -2002-02-18 Paul Jarc +2002-02-18 Mark Thomas * gnus-util.el (gnus-parent-id): Ignore trailing whitespace in the - References header field. From Mark Thomas . + References header field. 2002-02-18 ShengHuo ZHU @@ -9970,8 +9950,9 @@ * message-utils.el: Adopt the file. +2002-02-15 Holger Schauer + * message-utils.el: New file. - From Holger Schauer 2002-02-14 ShengHuo ZHU @@ -10079,9 +10060,6 @@ gnus-decoration property. * gnus-msg.el (gnus-copy-article-buffer): Remove gnus-decoration. - * message.el (message-mode): Set local-abbrev-table. - From Matt Armstrong . - * gnus-art.el (gnus-article-treat-unfold-headers): Don't remove too many spaces. @@ -10089,8 +10067,13 @@ (rfc2047-decode-region): Don't unfold. Let gnus-article-treat-unfold-headers do it. +2002-02-07 Matt Armstrong . + + * message.el (message-mode): Set local-abbrev-table. + +2002-02-07 Jesper Harder + * gnus-sum.el (gnus-dependencies-add-header): Fix typo. - From: Jesper Harder 2002-02-06 Lars Magne Ingebrigtsen @@ -10117,16 +10100,18 @@ * nnweb.el (nnweb-google-parse-1): Use a correct format of date. - * gnus-agent.el (gnus-agent-summary-make-menu-bar): Fix typo. - From Stefan Reich,Av(Br . - * nnagent.el (nnagent-request-expire-articles): Don't delete files. -2002-02-05 ShengHuo ZHU +2002-02-06 Stefan Reich,Av(Br + + * gnus-agent.el (gnus-agent-summary-make-menu-bar): Fix typo. + +2002-02-05 Sriram Karra * message.el (message-gen-unsubscribed-mft): New function. - From Sriram Karra . + +2002-02-05 ShengHuo ZHU * gnus.el (gnus-article-unpropagated-mark-lists): Backslash the open parenthesis. @@ -10168,17 +10153,17 @@ * gnus-art.el (gnus-treatment-function-alist): Move hide-citation, highlight-citation after emphasize. -2002-02-04 Simon Josefsson +2002-02-04 David Edmondson - * nnfolder.el (nnfolder-open-marks): + * nnfolder.el (nnfolder-open-marks): Message when done. - * nnml.el (nnml-open-marks): Message when done. From David - Edmondson . + * nnml.el (nnml-open-marks): Ditto. -2002-02-03 ShengHuo ZHU +2002-02-03 Steinar Bang * imap.el (imap-anonymous-auth): Fix typo. - From: Steinar Bang + +2002-02-03 ShengHuo ZHU * gnus-cache.el (gnus-cache-braid-nov): Use set-buffer instead of save-excursion. @@ -10232,14 +10217,15 @@ * gnus.el (gnus-agent): Make it customizable. - * gnus-dired.el: New file. - From Benjamin Rutt - * gnus-cache.el (gnus-cache-articles-in-group): Remove from active if no article. (gnus-cache-possibly-remove-article): Ditto. (gnus-cache-possibly-enter-article): Use gnus-add-to-sorted-list. +2002-02-02 Benjamin Rutt + + * gnus-dired.el: New file. + 2002-02-01 Simon Josefsson * gnus-int.el (gnus-request-accept-article): Use gnus-get-function. @@ -10740,7 +10726,7 @@ * gnus.el (gnus-version-number): Bump version number. -2002-01-20 05:33:30 Lars Magne Ingebrigtsen +2002-01-20 05:33:30 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.05 is released. @@ -10974,8 +10960,9 @@ * message.el (message-newline-and-reformat): Use `newline' instead of inserting \n, so that the newline is marked as hard. +2002-01-13 Jesper Harder + * gnus-spec.el (gnus-pad-form): Don't evaluate EL multiple times. - From Jesper Harder . 2002-01-12 ShengHuo ZHU @@ -11199,11 +11186,13 @@ * gnus-group.el (gnus-group-read-ephemeral-group): Restore the old behavior of quit-config. +2002-01-08 Bj,Ax(Brn Mork (tiny change) + * message.el (message-make-from): Don't quote fullname. - From: Bj,Ax(Brn Mork + +2002-01-08 Andre Srinivasan (tiny change) * gnus-group.el (gnus-group-suspend): Don't kill message buffers. - From: 2002-01-07 ShengHuo ZHU @@ -11486,10 +11475,10 @@ * gnus-agent.el (gnus-agent-fetch-session): Run hook. -2002-01-03 Kai Gro,b_(Bjohann +2002-01-03 Dave Love * gnus-start.el (gnus-read-init-file): Don't force coding system - for ~/.gnus. From Dave Love . + for ~/.gnus. 2002-01-03 ShengHuo ZHU @@ -11755,7 +11744,7 @@ (message-fix-before-sending): Highlight invisible text and place point there. -2002-01-01 02:32:53 Lars Magne Ingebrigtsen +2002-01-01 02:32:53 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.04 is released. @@ -12094,11 +12083,10 @@ (gnus-update-marks): Use `gnus-range-add' on a uncompressed list instead, it seems to result in shorter ranges. -2001-12-26 11:00:00 ShengHuo ZHU +2001-12-26 11:00:00 Jesper Harder * mm-util.el (mm-iso-8859-x-to-15-region): Use insert-before-markers. - From Jesper Harder 2001-12-26 Paul Jarc @@ -12127,12 +12115,11 @@ (nnmaildir-version): Indicate that nnmaildir is now a standard part of Gnus, not separately released. -2001-12-21 08:00:00 ShengHuo ZHU +2001-12-21 08:00:00 Pavel Jan,Am(Bk * gnus-art.el, gnus-picon.el, gnus-sieve.el, gnus-sum.el: * gnus-xmas.el, imap.el, mailcap.el, mm-util.el, nnfolder.el: * nnheader.el, nnmail.el: Nil/NIL vs. nil. - From Pavel Jan,Am(Bk 2001-12-20 15:00:00 ShengHuo ZHU @@ -12145,10 +12132,9 @@ (nnimap-close-group): Don't quote KEYLIST items. Suggested by Brian P Templeton . -2001-12-19 17:00:00 ShengHuo ZHU +2001-12-19 17:00:00 Paul Jarc * nnmaildir.el: New file. - From Paul Jarc . 2001-12-19 16:00:00 ShengHuo ZHU @@ -12172,8 +12158,7 @@ * gnus-win.el (gnus-get-buffer-window): Use gnus-delete-if. -2001-12-18 11:00:00 ShengHuo ZHU - From Harald Meland +2001-12-18 11:00:00 Harald Meland * gnus-win.el (gnus-get-buffer-window): New function. (gnus-all-windows-visible-p): Use it. @@ -12248,11 +12233,10 @@ subscribe-level * gnus-topic.el (gnus-subscribe-topics): use it. -2001-12-13 22:00:00 ShengHuo ZHU +2001-12-13 22:00:00 Sean Neakums (tiny change) * gnus-msg.el (gnus-summary-mail-forward): Forward all marked - messages. (A small patch with indentation) - From Sean Neakums . + messages. * gnus-uu.el (gnus-uu-grab-articles): Set gnus-current-article to nil after shooting down the gnus-original-article-buffer. @@ -12327,12 +12311,11 @@ * mml.el (mime-to-mml): Remove Content-Disposition too. -2001-12-09 08:00:00 ShengHuo ZHU +2001-12-09 08:00:00 TSUCHIYA Masatoshi * gnus-sum.el (gnus-summary-buffer-name): Decode group name. * gnus-group.el (gnus-group-name-decode): Decode unibyte strings only. - From TSUCHIYA Masatoshi 2001-12-08 Nevin Kapur @@ -12433,15 +12416,14 @@ the beginning of lines. (gnus-complex-form-to-spec): Ditto. -2001-12-01 08:00:00 ShengHuo ZHU +2001-12-01 08:00:00 Paul Jarc * message.el (message-make-mft): Fix the m-s-a-file regexp. - From Paul Jarc . -2001-11-30 21:00:00 ShengHuo ZHU +2001-11-30 21:00:00 Paul Jarc * message.el: New variable message-subscribed-address-file; - use it in message-make-mft. From Paul Jarc . + use it in message-make-mft. 2001-11-30 12:00:00 ShengHuo ZHU @@ -12574,11 +12556,11 @@ * message.el (sha1): eval-and-compile. -2001-11-20 Simon Josefsson +2001-11-20 Paul Jarc * message.el (message-allow-no-recipients): New variable. (message-send): Use it, customize the prompting when posting to - Gcc/Fcc alone. From prj@po.cwru.edu (Paul Jarc). + Gcc/Fcc alone. 2001-11-20 09:00:00 ShengHuo ZHU @@ -12698,14 +12680,17 @@ * mml2015.el: Mention RFC 3156. - * mml1991.el: New file. From Sascha L,A|(Bdecke . +2001-11-12 Sascha L,A|(Bdecke + + * mml1991.el: New file. 2001-11-12 13:00:00 ShengHuo ZHU * gnus-start.el (gnus-auto-subscribed-groups): Use ^nnml. +2001-11-12 Michael Cook + * gnus-sum.el (gnus-summary-move-article): Use number-to-string. - From 2001-11-11 Simon Josefsson @@ -12714,10 +12699,9 @@ canlock, no need to require two different hash algs). Suggested by Ferenc Wagner . -2001-11-09 Simon Josefsson +2001-11-09 Pavel Jan,Am(Bk - * gnus.el (gnus-local-domain): Fix doc. From Pavel Jan,Am(Bk - . + * gnus.el (gnus-local-domain): Fix doc. 2001-11-09 Kai Gro,b_(Bjohann @@ -12959,7 +12943,7 @@ mm-with-unibyte-current-buffer-mule4): Use them. (mm-find-mime-charset-region): Treat iso-2022-jp. - From Dave Love : +2001-10-30 Dave Love * mm-util.el (mm-mime-mule-charset-alist): Make it correct by construction. @@ -13032,10 +13016,10 @@ * gnus-msg.el (gnus-setup-message): Call post-command-hook. -2001-10-29 Simon Josefsson +2001-10-29 Jesper Harder * mml.el (mml-preview): Bind message-this-is-news if it is - news. From Jesper Harder . + news. 2001-10-28 Simon Josefsson @@ -13051,8 +13035,9 @@ * message.el (message-indent-citation): Don't add trailing whitespace when citing text. - * gnus.el (gnus-group-faq-directory): Fix. From Jesper Harder - . +2001-10-27 Jesper Harder + + * gnus.el (gnus-group-faq-directory): Fix. 2001-10-26 14:00:00 ShengHuo ZHU @@ -13129,22 +13114,23 @@ * message.el (message-do-auto-fill): Avoid calling 'rfc822-goto-eoh'. -2001-10-20 Kai Gro,b_(Bjohann - From Paul Jarc . +2001-10-20 Paul Jarc * message.el (message-get-reply-headers): Restructure the logic - and add comments. From Paul Jarc . + and add comments. 2001-10-20 Simon Josefsson * message.el (message-cancel-news): Support cancel-locks. Suggested by Per Abrahamsson. - * nnml.el (nnml-marks-changed-p): Use `equal' when comparing - conses. From David Z Maze . - * nnfolder.el (nnfolder-marks-changed-p): Ditto. +2001-10-20 David Z. Maze + + * nnml.el (nnml-marks-changed-p): Use `equal' when comparing + conses. + 2001-10-19 Per Abrahamsen * mm-decode.el (mm-default-directory): Fix customize type. @@ -13174,8 +13160,7 @@ * gnus-sum.el (gnus-group-make-articles-read): Call g-r-set-mark when undoing. -2001-10-18 Simon Josefsson - From Frank Schmitt +2001-10-18 Frank Schmitt * gnus-sum.el (gnus-summary-limit-to-display-predicate): Fix typo. (gnus-summary-make-menu-bar): Ditto. @@ -13185,11 +13170,10 @@ * nnimap.el (nnimap-expiry-target): Make sure it is back to the server. Suggested by ShengHuo ZHU . -2001-10-17 17:00:00 ShengHuo ZHU +2001-10-17 17:00:00 Frank Schmitt * gnus-sum.el (gnus-summary-line-format-alist): user-date entry. * gnus-util.el (gnus-user-date): New function. - From Frank Schmitt . 2001-10-17 Per Abrahamsen @@ -13222,8 +13206,7 @@ * gnus-msg.el (gnus-post-method): Changed two instances of `active' to `current' and one `null' to `not'. -2001-10-16 Kai Gro,b_(Bjohann - From Katsumi Yamaoka . +2001-10-16 Katsumi Yamaoka * message.el (message-setup-fill-variables): Use `normal-auto-fill-function' instead of `auto-fill-function'. @@ -13279,10 +13262,9 @@ * gnus-art.el (article-emphasize): Set `g-a-wash-types' after doing stuff that clears it. -2001-10-12 Simon Josefsson +2001-10-12 Eric Marsden * gnus-cache.el (gnus-summary-limit-include-cached): Rewrite. - From Eric Marsden . 2001-10-12 10:00:00 ShengHuo ZHU @@ -13484,20 +13466,17 @@ (gnus-topic-catchup-articles): New function. Suggested by Robin S. Socha . -2001-09-27 11:00:00 ShengHuo ZHU - From Gerd M,Av(Bllmann . +2001-09-27 11:00:00 Gerd M,Av(Bllmann . * gnus-ems.el (gnus-article-display-xface): Insert xface after previous ones. -2001-09-27 07:00:00 ShengHuo ZHU - From Daiki Ueno +2001-09-27 07:00:00 Daiki Ueno * gnus-sum.el (gnus-summary-show-article): The arglist of detect-coding-region is incompatible. -2001-09-26 18:00:00 ShengHuo ZHU - From Katsuhiro Hermit Endo +2001-09-26 18:00:00 Katsuhiro Hermit Endo * gnus-group.el (gnus-group-delete-group): Typo. @@ -13580,10 +13559,9 @@ * gnus-srvr.el (gnus-server-insert-server-line): Don't let an error querying a backend abort the whole process. -2001-09-17 08:00:00 ShengHuo ZHU +2001-09-17 08:00:00 Gerd M,Av(Bllmann * gnus-srvr.el (gnus-server-mode): Fix bogus fontification. - From Gerd M,Av(Bllmann . 2001-09-17 Didier Verna @@ -13655,7 +13633,7 @@ * gnus-diary.el (message-mode-map): bind the above to `C-c D c'. * gnus-diary.el (gnus-article-edit-mode-map): ditto. -2001-09-10 TSUCHIYA Masatoshi +2001-09-10 TSUCHIYA Masatoshi * gnus-sum.el (gnus-select-newsgroup): Make `gnus-current-select-method' buffer-local. @@ -13663,8 +13641,7 @@ * gnus-art.el (gnus-request-article-this-buffer): Refer `gnus-current-select-method' in the current summary buffer. -2001-09-10 Simon Josefsson - From Daniel Pittman +2001-09-10 Daniel Pittman * gnus-spec.el (gnus-correct-pad-form): Fix. @@ -13715,8 +13692,7 @@ * gnus-agent.el (gnus-agent-fetch-group): If online, actually fetch group. -2001-09-08 Simon Josefsson - From Daniel Pittman +2001-09-08 Daniel Pittman * gnus-spec.el (gnus-correct-pad-form): New function. (gnus-parse-simple-format): Use it. @@ -13728,7 +13704,7 @@ Putnam . (gnus-group-sort-selected-groups): Touch dribble file. -2001-09-07 Raja R Harinath +2001-09-07 Raja R Harinath * nnml.el (nnml-filenames-are-evil): New variable. (nnml-article-to-file-alist): Rename to ... @@ -13750,10 +13726,9 @@ * gnus-sum.el (gnus-summary-toggle-smiley): New function. Toggles display of graphical smilies. -2001-09-07 02:00:00 ShengHuo ZHU +2001-09-07 02:00:00 Bill White * gnus-start.el (gnus-setup-news): A typo. - From Bill White . 2001-09-06 Simon Josefsson @@ -13864,8 +13839,7 @@ * nnfolder.el (nnfolder-save-marks): Don't create directory named after group in ~/. -2001-08-25 Simon Josefsson - From Andreas Jaeger +2001-08-25 Andreas Jaeger * nnfolder.el (nnfolder-open-marks): Fix typo. * nnml.el (nnml-open-marks): Likewise. @@ -13919,11 +13893,12 @@ * mml.el (mml-generate-mime-1): Force as multibyte string. -2001-08-24 12:00:00 ShengHuo ZHU +2001-08-24 12:00:00 Martin Kretzschmar * gnus-sum.el (gnus-summary-insert-line) (gnus-summary-prepare-threads): gnus-tmp-lines should be a string. - From Martin Kretzschmar + +2001-08-24 12:00:00 ShengHuo ZHU * gnus-spec.el (gnus-correct-substring): Take optional END. @@ -13945,8 +13920,7 @@ * gnus-util.el (gnus-create-info-command): Return an interactive function. -2001-08-23 19:00:00 ShengHuo ZHU - From Katsumi Yamaoka +2001-08-23 19:00:00 Katsumi Yamaoka * gnus-spec.el (gnus-parse-complex-format): Use equal. @@ -14100,8 +14074,7 @@ * gnus.el (gnus-server-visual): Add defgroup. -2001-08-19 Simon Josefsson - From Joe Casadonte +2001-08-19 Joe Casadonte * gnus-srvr.el (gnus-server-opened-face, gnus-server-closed-face, gnus-server-denied-face): New. @@ -14261,8 +14234,7 @@ * gnus-delay.el (gnus-delay-article): Allow "01:23" time spec, which specifies a time today or tomorrow. -2001-08-15 Simon Josefsson - From Pavel@Janik.cz (Pavel Jan,Am(Bk) +2001-08-15 Pavel Jan,Am(Bk * gnus-agent.el (gnus-agent-make-mode-line-string) (gnus-agent-toggle-plugged): Use new API. @@ -14308,7 +14280,6 @@ * gnus-spec.el (gnus-format-specs): %n is 23 chars. 2001-08-11 09:40:00 Karl Kleinpaste - Committed by Kai Gro,b_(Bjohann. * gnus-score.el (gnus-score-string): Fix `match' regexp for `extra' header case. @@ -14389,23 +14360,23 @@ * imap.el (imap-gssapi-auth-p, imap-kerberos4-auth-p): Also check whether `imtest' is installed. -2001-08-04 ShengHuo ZHU - Trivial patch from Nuutti Kotivuori +2001-08-04 Nuutti Kotivuori * gnus-sum.el (gnus-summary-show-article): Call gnus-summary-update-secondary-secondary-mark. * gnus-sum.el (gnus-summary-edit-article-done): Ditto. * gnus-sum.el (gnus-summary-reparent-thread): Ditto. +2001-08-07 16:00:00 Gerd M,Av(Bllmann + + * mm-uu.el (mm-uu-dissect): Autoload. + 2001-08-07 16:00:00 ShengHuo ZHU * gnus-sum.el (gnus-summary-make-menu-bar): Misc -> Gnus. * gnus-group.el (gnus-group-make-menu-bar): Ditto. - * mm-uu.el (mm-uu-dissect): Autoload. From Gerd M,Av(Bllmann - . - * gnus-art.el (gnus-output-to-file): Bind file-name-coding-system. * gnus-util.el (gnus-output-to-rmail): Ditto. @@ -14527,8 +14498,7 @@ (mm-pkcs7-enveloped-magic): Ditto. (mm-view-pkcs7-get-type): Don't regexp quote. -2001-08-01 14:00:00 ShengHuo ZHU - From Andreas Fuchs +2001-08-01 14:00:00 Andreas Fuchs * mml2015.el (mml2015-trust-boundaries-alist): Typo. @@ -14623,13 +14593,11 @@ (smime-dns-server): Fix customize group. (smime-call-openssl-region): Use `smime-extra-arguments'. -2001-07-29 Simon Josefsson - From Vladimir Volovich +2001-07-29 Vladimir Volovich * smime.el (smime-call-openssl-region): Ignore stderr. -2001-07-29 Simon Josefsson - From Christoph Conrad +2001-07-29 Christoph Conrad * gnus-agent.el (gnus-agent-save-group-info): Don't destroy active file. @@ -14750,8 +14718,7 @@ * nnimap.el (nnimap-version): Bump version number. -2001-07-26 10:00:00 ShengHuo ZHU - From Steven E. Harris +2001-07-26 10:00:00 Steven E. Harris * nnheader.el (nnheader-translate-file-chars): cygwin32 is running in M$Windows too. @@ -14773,8 +14740,7 @@ * gnus-sum.el (gnus-summary-prepare-threads): Shouldn't do tree display (%B) for threads if threading is off. -2001-07-25 14:00:00 ShengHuo ZHU - From Henrik Enberg +2001-07-25 14:00:00 Henrik Enberg * gnus-msg.el: Customization patch. @@ -14844,8 +14810,7 @@ * gnus-delay.el (gnus-delay-default-hour): New variable. (gnus-delay-article): Allow specific date in YYYY-MM-DD format. -2001-07-23 22:00:00 ShengHuo ZHU - From Karl Kleinpaste +2001-07-23 22:00:00 Karl Kleinpaste * gnus-sum.el (gnus-summary-line-format-alist): Add %B. (gnus-summary-prepare-threads): Ditto. @@ -15002,11 +14967,11 @@ * nnrss.el (nnrss-read-group-data): Nuke emacs-lisp-mode-hook. (nnrss-read-server-data): Ditto. -2001-07-13 12:00:00 ShengHuo ZHU +2001-07-13 12:00:00 Pavel Jan,Am(Bk * gnus-setup.el (gnus-use-installed-gnus): Typo. * Cleanup files. - From Pavel@Janik.cz (Pavel Jan,Am(Bk). + 2001-07-13 08:00:00 ShengHuo ZHU @@ -15129,8 +15094,7 @@ * nntp.el (nntp-send-command, nntp-send-command-nodelete): (nntp-send-command-and-decode): Use gnus-point-at-bol. -2001-07-09 13:00:00 ShengHuo ZHU - From Paul Jarc +2001-07-09 13:00:00 Paul Jarc * message.el (message-use-mail-followup-to): New variable. (message-get-reply-headers): Use it. @@ -15218,8 +15182,7 @@ * gnus-start.el (gnus-check-first-time-used): Use `if' instead of `when'. -2001-07-03 Simon Josefsson - From Nuutti Kotivuori +2001-07-03 Nuutti Kotivuori * flow-fill.el (fill-flowed): Use (1+ (point-at-eol)) instead. @@ -15267,8 +15230,7 @@ (rfc2047-encode-message-header): Fold lines even if no QP encoding is done. -2001-06-23 Simon Josefsson - From Samuel Tardieu +2001-06-23 Samuel Tardieu * smime.el (smime-keys): Support additional certificates. (smime-make-certfiles): New function. @@ -15302,8 +15264,7 @@ * message.el (message-goto-body): Return nil if not found. (revert!) -2001-06-21 10:00:00 ShengHuo ZHU - From Fremlin +2001-06-21 10:00:00 John Fremlin (tiny change) * message.el (message-goto-body): Some messages have no header. @@ -15385,7 +15346,7 @@ * nnweb.el (nnweb-google-parse-1): Fix Google content regexp. (nnweb-google-wash-article): Ditto. -2001-06-14 Ferenc Wagner +2001-06-14 Ferenc Wagner * nnweb.el (nnweb-google-parse-1): Fix Google url regexp. @@ -15412,17 +15373,20 @@ * nnrss.el (nnrss-group-alist): Use |fr| instead of [fr]. -2001-06-12 11:00:00 ShengHuo ZHU +2001-06-12 11:00:00 Marc Lefranc * gnus-art.el (gnus-plain-save-name): Use file-relative-name. - From Marc Lefranc . + +2001-06-12 11:00:00 ShengHuo ZHU * nnrss.el (nnrss-node-text): Node might be nil. -2001-06-11 10:00:00 ShengHuo ZHU +2001-06-11 10:00:00 Katsumi Yamaoka * gnus-uu.el (gnus-uu-save-article): Use mml tag instead of - part. From Katsumi Yamaoka . + part. + +2001-06-11 10:00:00 ShengHuo ZHU * nnrss.el (nnrss-group-alist): More items. @@ -15436,14 +15400,11 @@ * gnus-mlspl.el (gnus-group-split-fancy): Fix generation of split restrict clauses. -2001-06-07 16:00:00 ShengHuo ZHU - - From Benjamin Rutt +2001-06-07 16:00:00 Benjamin Rutt * message.el (message-wide-reply-confirm-recipients): New variable. -2001-06-06 ShengHuo ZHU - Trivial patch from Mark Thomas +2001-06-06 Mark Thomas (tiny change) * nnmail.el (nnmail-fix-eudora-headers): Change the In-Reply-To fix so it works with XEmacs. @@ -15457,10 +15418,10 @@ * nnrss.el: Fix a few bugs. -2001-06-05 Simon Josefsson +2001-06-05 Alex Schroeder * mm-decode.el (mm-handle-set-external-undisplayer): Don't - generate compiler warnings. From Alex Schroeder . + generate compiler warnings. 2001-06-04 Hrvoje Niksic @@ -15499,20 +15460,17 @@ it is not possible to insert a character after a glyph which is at the end of a buffer. Patch by Lloyd Zusman . -2001-05-28 Kai Gro,b_(Bjohann - - From Jaap-Henk Hoepman (jhh@xs4all.nl). +2001-05-28 Jaap-Henk Hoepman * mm-decode.el (mm-keep-viewer-alive-types): New variable. (mm-keep-viewer-alive-p, mm-handle-set-external-undisplayer, mm-destroy-postponed-undisplay-list): New functions. (mm-display-external): Use them. -2001-05-27 Kai Gro,b_(Bjohann +2001-05-27 Raja R. Harinath * gnus-salt.el (gnus-tree-highlight-node): Bind `default-high' and `default-low' when evaluating `gnus-summary-highlight'. - From Raja R Harinath . 2001-05-27 Simon Josefsson @@ -15523,8 +15481,7 @@ as details. (mml2015-mailcrypt-clear-verify): Ditto. -2001-05-24 Kai Gro,b_(Bjohann - From Nevin Kapur . +2001-05-24 Nevin Kapur * gnus-sum.el (gnus-summary-default-high-score, gnus-summary-default-low-score): New variables. @@ -15535,8 +15492,7 @@ * message.el (message-mail): pass the 'send-actions argument to `message-setup'. -2001-05-16 Simon Josefsson - From Raymond Scholz +2001-05-16 Raymond Scholz * gnus-art.el (gnus-mime-view-part-as-charset): (gnus-mime-internalize-part): Doc fixes. @@ -15600,7 +15556,7 @@ correctly. (nnrss-check-group): Use time. -2001-05-01 19:21:19 Lars Magne Ingebrigtsen +2001-05-01 19:21:19 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.03 is released. @@ -15672,12 +15628,11 @@ (smime-decrypt-region): Ditto. 2001-04-12 Jason Merrill - Committed by Simon Josefsson * imap.el (imap-shell-open): Erase the buffer *after* copying it into the log. -2001-04-14 01:14:42 Lars Magne Ingebrigtsen +2001-04-14 01:14:42 Lars Magne Ingebrigtsen * gnus.el: Oort Gnus v0.02 is released. @@ -15705,13 +15660,11 @@ * nnmail.el (nnmail-split-fancy-with-parent): Add docstring. -2001-04-12 19:00:00 ShengHuo ZHU - From Jason Merrill +2001-04-12 19:00:00 Jason Merrill * gnus-sum.el (gnus-summary-insert-new-articles): Reverse the articles. 2001-04-10 08:01:15 Katsumi Yamaoka - Committed by ShengHuo ZHU * gnus-msg.el (gnus-post-news): Fill the Newsgroups header by the newsgroup names when the original article is a news message. @@ -15722,7 +15675,6 @@ supported. Suggest by Jim Meyering . 2001-04-02 Nevin Kapur - Committed by Kai Gro,b_(Bjohann . * nnmail.el (nnmail-split-it): Added check for .* at the end of regexp in nnmail-split-fancy. @@ -15790,13 +15742,11 @@ * qp.el (quoted-printable-decode-region): Just message malformation; don't quit. -2001-03-31 21:00:00 ShengHuo ZHU - From Gerd Moellmann . +2001-03-31 21:00:00 Gerd Moellmann * gnus.el (gnus-interactive): A typo. 2001-03-26 Juanma Barranquero - Committed by ShengHuo ZHU * gnus-util.el (gnus-delete-alist): Declare it as an alias of `assq-delete-all', if that function exists; otherwise use the old @@ -15914,8 +15864,7 @@ * mml2015.el (mml2015-gpg-extract-from): No error. -2001-03-18 23:00:00 ShengHuo ZHU - From Bj,Ax(Brn Mork . +2001-03-18 23:00:00 Bj,Ax(Brn Mork * mml2015.el (mml2015-gpg-extract-from): New function. (mml2015-gpg-verify): Use it. @@ -15957,8 +15906,7 @@ * mailcap.el (mailcap-mime-data): Add application/sieve. (mailcap-mime-extensions): Add .siv, .xls. -2001-03-14 20:00:00 ShengHuo ZHU - From Christoph Conrad +2001-03-14 20:00:00 Christoph Conrad * gnus-score.el (gnus-summary-lower-thread): Typo. @@ -16003,7 +15951,6 @@ * nnrss.el: New file. 2001-03-08 02:41:36 Katsumi Yamaoka - Committed by ShengHuo ZHU * rfc2047.el (rfc2047-unfold-region): Fix arg of `skip-chars-forward'. @@ -16027,9 +15974,10 @@ directory part. (gnus-score-search-global-directories): Use file-directory-p. +2001-03-06 13:00:00 Adrian Aichner + * gnus-score.el (gnus-score-score-files-1): Use gnus-kill-files-directory. - From Adrian Aichner . 2001-03-05 08:00:00 ShengHuo ZHU @@ -16054,8 +16002,7 @@ * gnus-sum.el (gnus-summary-limit-include-expunged): Fix. -2001-03-01 22:00:00 ShengHuo ZHU - From Katsumi Yamaoka . +2001-03-01 22:00:00 Katsumi Yamaoka * dgnushack.el (coerce, merge, subseq): defmacro. @@ -16066,7 +16013,6 @@ uncompiled versions. 2001-02-26 11:27:27 Paul Jarc - Committed by ShengHuo ZHU * gnus-util.el (gnus-split-references): Handle malformed References:. @@ -16074,8 +16020,7 @@ * gnus-art.el (gnus-article-mime-part-status): 1 part. -2001-02-25 10:00:00 ShengHuo ZHU - From NAGY Andras . +2001-02-25 10:00:00 NAGY Andras * gnus.el (gnus-parameters): Typo. @@ -16183,13 +16128,11 @@ (gnus-article-sort-functions): Doc fix. Refer to gnus-thread-sort-functions. -2001-02-18 20:00:00 ShengHuo ZHU - From Paul Jarc . +2001-02-18 20:00:00 Paul Jarc * message.el (message-get-reply-headers): More fixes. 2001-02-17 Paul Jarc - Committed by ShengHuo ZHU * message.el (message-get-reply-headers): Fix bug with Mail-Followup-To/to-address interaction. @@ -16234,7 +16177,6 @@ (nnml-request-regenerate): Use it. Change to deffoo. 2001-02-14 Katsumi Yamaoka - Committed by ShengHuo ZHU * gnus.el (gnus-define-group-parameter): Fix. @@ -18187,7 +18129,7 @@ * mml.el (mml-generate-mime-1): Ignore ascii. -2000-11-16 Justin Sheehy +2000-11-16 Justin Sheehy * gnus-sum.el (gnus-summary-make-menu-bar): Fix menu items. @@ -18919,9 +18861,25 @@ See ChangeLog.1 for earlier changes. - Copyright (C) 2000, 2001, 2002, 2004 Free Software Foundation, Inc. - Copying and distribution of this file, with or without modification, - are permitted provided the copyright notice and this notice are preserved. + Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007 + Free Software Foundation, Inc. + + This file is part of GNU Emacs. + + GNU Emacs is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU Emacs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU Emacs; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. ;; Local Variables: ;; coding: iso-2022-7bit Index: gnus/lisp/assistant.el diff -u gnus/lisp/assistant.el:1.21 gnus/lisp/assistant.el:1.22 --- gnus/lisp/assistant.el:1.21 Thu Oct 13 19:18:49 2005 +++ gnus/lisp/assistant.el Wed Feb 28 23:26:30 2007 @@ -77,7 +77,7 @@ (forward-line 1))) (skip-chars-forward " \t") (prog1 - (buffer-substring (point) (line-end-position)) + (buffer-substring (point) (point-at-eol)) (forward-line 1)))) (push (list command (assistant-reader command value)) results)) Index: gnus/lisp/binhex.el diff -u gnus/lisp/binhex.el:7.9 gnus/lisp/binhex.el:7.10 --- gnus/lisp/binhex.el:7.9 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/binhex.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; binhex.el --- elisp native binhex decode ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: binhex news Index: gnus/lisp/canlock.el diff -u gnus/lisp/canlock.el:7.13 gnus/lisp/canlock.el:7.14 --- gnus/lisp/canlock.el:7.13 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/canlock.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; canlock.el --- functions for Cancel-Lock feature ;; Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Katsumi Yamaoka ;; Keywords: news, cancel-lock, hmac, sha1, rfc2104 Index: gnus/lisp/compface.el diff -u gnus/lisp/compface.el:7.11 gnus/lisp/compface.el:7.14 --- gnus/lisp/compface.el:7.11 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/compface.el Wed Jan 24 08:15:37 2007 @@ -1,6 +1,6 @@ ;;; compface.el --- functions for converting X-Face headers -;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -34,24 +34,28 @@ or `faces-xface' and `netpbm' or `libgr-progs', for instance." (with-temp-buffer (insert face) - (and (eq 0 (apply 'call-process-region (point-min) (point-max) - "uncompface" - 'delete '(t nil) nil)) - (progn - (goto-char (point-min)) - (insert "/* Width=48, Height=48 */\n") - ;; I just can't get "icontopbm" to work correctly on its - ;; own in XEmacs. And Emacs doesn't understand un-raw pbm - ;; files. - (if (not (featurep 'xemacs)) - (eq 0 (call-process-region (point-min) (point-max) - "icontopbm" - 'delete '(t nil))) - (shell-command-on-region (point-min) (point-max) - "icontopbm | pnmnoraw" - (current-buffer) t) - t)) - (buffer-string)))) + (let ((coding-system-for-read 'raw-text) + ;; At least "icontopbm" doesn't work with Windows because + ;; the line-break code is converted into CRLF by default. + (coding-system-for-write 'binary)) + (and (eq 0 (apply 'call-process-region (point-min) (point-max) + "uncompface" + 'delete '(t nil) nil)) + (progn + (goto-char (point-min)) + (insert "/* Width=48, Height=48 */\n") + ;; I just can't get "icontopbm" to work correctly on its + ;; own in XEmacs. And Emacs doesn't understand un-raw pbm + ;; files. + (if (not (featurep 'xemacs)) + (eq 0 (call-process-region (point-min) (point-max) + "icontopbm" + 'delete '(t nil))) + (shell-command-on-region (point-min) (point-max) + "icontopbm | pnmnoraw" + (current-buffer) t) + t)) + (buffer-string))))) (provide 'compface) Index: gnus/lisp/deuglify.el diff -u gnus/lisp/deuglify.el:7.12 gnus/lisp/deuglify.el:7.15 --- gnus/lisp/deuglify.el:7.12 Tue Apr 18 17:36:59 2006 +++ gnus/lisp/deuglify.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; deuglify.el --- deuglify broken Outlook (Express) articles -;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -;; Copyright (C) 2001, 2002 Raymond Scholz +;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 +;; Free Software Foundation, Inc. ;; Author: Raymond Scholz ;; Thomas Steffen (unwrapping algorithm, @@ -338,6 +338,7 @@ (defun gnus-outlook-rearrange-article (attr-start) "Put the text from ATTR-START to the end of buffer at the top of the article buffer." + ;; FIXME: 1. (*) text/plain ( ) text/html (let ((inhibit-read-only t) (cite-marks gnus-outlook-deuglify-cite-marks)) (gnus-with-article-buffer @@ -352,8 +353,18 @@ (point-max)))) ;; handle the case where the full quote is below the ;; signature - (if (< to attr-start) + (when (< to attr-start) + (setq to (point-max))) + (save-excursion + (narrow-to-region attr-start to) + (goto-char attr-start) + (forward-line) + (unless (looking-at ">") + (message-indent-citation (point) (point-max) 'yank-only) + (goto-char (point-max)) + (newline) (setq to (point-max))) + (widen)) (transpose-regions cur attr-start attr-start to)))))) ;; John Doe wrote in message Index: gnus/lisp/dgnushack.el diff -u gnus/lisp/dgnushack.el:7.23 gnus/lisp/dgnushack.el:7.27 --- gnus/lisp/dgnushack.el:7.23 Thu Apr 20 03:08:38 2006 +++ gnus/lisp/dgnushack.el Mon Apr 23 03:11:21 2007 @@ -1,6 +1,6 @@ ;;; dgnushack.el --- a hack to set the load path for byte-compiling ;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003, -;; 2004, 2005 +;; 2004, 2005, 2006, 2007 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -118,12 +118,15 @@ ad-do-it)))) (when (and (not (featurep 'xemacs)) - (byte-optimize-form '(and (> 0 1) foo) t)) + (byte-optimize-form + '(and (> 0 1) + (message "This should not appear in the byte-code.")) + t)) (defadvice byte-optimize-form-code-walker (around fix-bug-in-and/or-forms (form for-effect) activate) "Optimize the rest of the and/or forms. It has been fixed in XEmacs before releasing 21.4 and also has been -fixed in Emacs after 21.3." +fixed in Emacs 22." (if (and for-effect (memq (car-safe form) '(and or))) (let ((fn (car form)) (backwards (reverse (cdr form)))) @@ -151,6 +154,11 @@ ;; ;; http://thread.gmane.org/gmane.emacs.xemacs.beta/20519 ;; Subject: XEmacs 21.5 and Gnus fancy splitting. +;; +;; Should be fixed in XEmacs (March 2007). +;; http://thread.gmane.org/gmane.emacs.xemacs.patches/8124 +;; When should we remove this workaround? +;; (when (and (featurep 'xemacs) (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table))) (modify-syntax-entry ?= " " table) @@ -201,6 +209,7 @@ (autoload 'apropos-command "apropos" nil t) (autoload 'bbdb-complete-name "bbdb-com" nil t) (autoload 'browse-url "browse-url" nil t) + (autoload 'browse-url-of-file "browse-url" nil t) (autoload 'c-mode "cc-mode" nil t) (autoload 'customize-apropos "cus-edit" nil t) (autoload 'customize-group "cus-edit" nil t) @@ -232,6 +241,7 @@ (autoload 'smtpmail-send-it "smtpmail") (autoload 'sort-numeric-fields "sort" nil t) (autoload 'sort-subr "sort") + (autoload 'toggle-truncate-lines "view-less" nil t) (autoload 'trace-function-background "trace" nil t) (autoload 'unmorse-region "morse" nil t) (autoload 'w3-do-setup "w3") Index: gnus/lisp/dig.el diff -u gnus/lisp/dig.el:7.7 gnus/lisp/dig.el:7.8 --- gnus/lisp/dig.el:7.7 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/dig.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; dig.el --- Domain Name System dig interface ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Keywords: DNS BIND dig Index: gnus/lisp/dns.el diff -u gnus/lisp/dns.el:7.16 gnus/lisp/dns.el:7.18 --- gnus/lisp/dns.el:7.16 Fri Feb 24 21:49:02 2006 +++ gnus/lisp/dns.el Wed Jan 24 08:15:37 2007 @@ -1,6 +1,6 @@ ;;; dns.el --- Domain Name Service lookups -;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: network @@ -408,7 +408,9 @@ (>= (buffer-size) 2)) (goto-char (point-min)) (delete-region (point) (+ (point) 2))) - (when (>= (buffer-size) 2) + (when (and (>= (buffer-size) 2) + ;; We had a time-out. + (> times 0)) (let ((result (dns-read (buffer-string)))) (if fullp result Index: gnus/lisp/earcon.el diff -u gnus/lisp/earcon.el:7.5 gnus/lisp/earcon.el:7.6 --- gnus/lisp/earcon.el:7.5 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/earcon.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; earcon.el --- Sound effects for messages ;; Copyright (C) 1996, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Steven L. Baur Index: gnus/lisp/ecomplete.el diff -u gnus/lisp/ecomplete.el:1.15 gnus/lisp/ecomplete.el:1.16 --- gnus/lisp/ecomplete.el:1.15 Sun Apr 30 12:16:24 2006 +++ gnus/lisp/ecomplete.el Wed May 17 09:58:59 2006 @@ -39,7 +39,7 @@ (defcustom ecomplete-database-file-coding-system 'iso-2022-7bit "Coding system used for writing the ecomplete database file." - :type '(repeat (symbol :tag "Coding system")) + :type '(symbol :tag "Coding system") :group 'ecomplete) ;;; Internal variables. Index: gnus/lisp/encrypt.el diff -u gnus/lisp/encrypt.el:7.8 gnus/lisp/encrypt.el:7.9 --- gnus/lisp/encrypt.el:7.8 Tue Oct 25 20:58:27 2005 +++ gnus/lisp/encrypt.el Wed Jan 17 20:33:51 2007 @@ -28,6 +28,27 @@ ;;; grouping declarations and documentation relating to each ;;; particular aspect. +;;; Use in Gnus like this: +;;; (setq +;;; nnimap-authinfo-file "~/.authinfo.enc" +;;; nntp-authinfo-file "~/.authinfo.enc" +;;; smtpmail-auth-credentials "~/.authinfo.enc" +;;; ;; using the AES256 cipher, feel free to use your own favorite +;;; encrypt-file-alist (quote (("~/.authinfo.enc" (gpg "AES256")))) +;;; password-cache-expiry 600) + +;;; Then write ~/.authinfo.enc: + +;;; 1) open the old authinfo +;;; C-x C-f ~/.authinfo + +;;; 2) write the new authinfo.enc +;;; M-x encrypt-file-contents ~/.authinfo.enc + +;;; 3) verify the new authinfo is correct (this will show the contents in the minibuffer) +;;; M-: (encrypt-get-file-contents "~/.authinfo.enc") + + ;;; Code: ;; autoload password @@ -108,8 +129,8 @@ (symbol-name method) cipher file)) (passphrase (password-read-and-add - (format "%s password for cipher %s? " - (symbol-name method) cipher) + (format "%s password for cipher %s (file %s)? " + file (symbol-name method) cipher) password-key)) (buffer-file-coding-system 'binary) (coding-system-for-read 'binary) @@ -151,38 +172,40 @@ (defun encrypt-write-file-contents (file &optional model) "Encrypt the current buffer to FILE, then continue normally." - (interactive "fFile to write: ") - (let* ((model (or model (encrypt-find-model file))) - (method (nth 0 model)) - (cipher (nth 1 model)) - (password-key (format "encrypt-password-%s-%s %s" - (symbol-name method) cipher file)) - (passphrase - (password-read - (format "%s password for cipher %s? " - (symbol-name method) cipher) - password-key)) - outdata) - - (cond - ((eq method 'gpg) - (setq outdata (encrypt-gpg-encode-buffer passphrase cipher))) - ((eq method 'encrypt-xor) - (setq outdata (encrypt-xor-encode-buffer passphrase cipher)))) - - (if outdata - (progn - (message "%s was encrypted with %s (cipher %s)" - file (symbol-name method) cipher) - (delete-region (point-min) (point-max)) - (goto-char (point-min)) - (insert outdata) - ;; do not confirm overwrites - (write-file file nil)) - ;; the decryption failed, alas - (password-cache-remove password-key) - (gnus-error 5 "%s was NOT encrypted with %s (cipher %s)" - file (symbol-name method) cipher)))) + (interactive "sFile to write: ") + (setq model (or model (encrypt-find-model file))) + (if model + (let* ((method (nth 0 model)) + (cipher (nth 1 model)) + (password-key (format "encrypt-password-%s-%s %s" + (symbol-name method) cipher file)) + (passphrase + (password-read + (format "%s password for cipher %s? " + (symbol-name method) cipher) + password-key)) + outdata) + + (cond + ((eq method 'gpg) + (setq outdata (encrypt-gpg-encode-buffer passphrase cipher))) + ((eq method 'encrypt-xor) + (setq outdata (encrypt-xor-encode-buffer passphrase cipher)))) + + (if outdata + (progn + (message "%s was encrypted with %s (cipher %s)" + file (symbol-name method) cipher) + (delete-region (point-min) (point-max)) + (goto-char (point-min)) + (insert outdata) + ;; do not confirm overwrites + (write-file file nil)) + ;; the decryption failed, alas + (password-cache-remove password-key) + (gnus-error 5 "%s was NOT encrypted with %s (cipher %s)" + file (symbol-name method) cipher))) + (gnus-error 1 "%s has no associated encryption model! See encrypt-file-alist." file))) (defun encrypt-xor-encode-buffer (passphrase cipher) (encrypt-xor-process-buffer passphrase cipher t)) Index: gnus/lisp/flow-fill.el diff -u gnus/lisp/flow-fill.el:7.19 gnus/lisp/flow-fill.el:7.20 --- gnus/lisp/flow-fill.el:7.19 Tue Apr 18 19:30:09 2006 +++ gnus/lisp/flow-fill.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; flow-fill.el --- interpret RFC2646 "flowed" text ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Keywords: mail Index: gnus/lisp/format-spec.el diff -u gnus/lisp/format-spec.el:7.7 gnus/lisp/format-spec.el:7.9 --- gnus/lisp/format-spec.el:7.7 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/format-spec.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; format-spec.el --- functions for formatting arbitrary formatting strings -;; Copyright (C) 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: tools Index: gnus/lisp/gmm-utils.el diff -u gnus/lisp/gmm-utils.el:7.25 gnus/lisp/gmm-utils.el:7.33 --- gnus/lisp/gmm-utils.el:7.25 Thu Mar 16 19:22:20 2006 +++ gnus/lisp/gmm-utils.el Fri Apr 27 10:39:17 2007 @@ -1,6 +1,6 @@ ;;; gmm-utils.el --- Utility functions for Gnus, Message and MML -;; Copyright (C) 2006 Free Software Foundation, Inc. +;; Copyright (C) 2006, 2007 Free Software Foundation, Inc. ;; Author: Reiner Steib ;; Keywords: news @@ -26,14 +26,16 @@ ;; This library provides self-contained utility functions. The functions are ;; used in Gnus, Message and MML, but within this library there are no -;; dependencies on Gnus, Message, or MML or Gnus. +;; dependencies on Gnus, Message, or MML. ;;; Code: +(require 'wid-edit) + (defgroup gmm nil "Utility functions for Gnus, Message and MML" :prefix "gmm-" - :version "23.0" ;; No Gnus + :version "22.1" ;; Gnus 5.10.9 :group 'lisp) ;; Helper functions from `gnus-utils.el': gmm-verbose, gmm-message, gmm-error @@ -48,6 +50,19 @@ :group 'gmm) ;;;###autoload +(defun gmm-regexp-concat (regexp) + "Potentially concat a list of regexps into a single one. +The concatenation is done with logical ORs." + (cond ((null regexp) + nil) + ((stringp regexp) + regexp) + ((listp regexp) + (mapconcat (lambda (elt) (concat "\\(" elt "\\)")) + regexp + "\\|")))) + +;;;###autoload (defun gmm-message (level &rest args) "If LEVEL is lower than `gmm-verbose' print ARGS using `message'. @@ -201,8 +216,8 @@ 'gnome 'retro) "Prefered tool bar style." - :type '(choice (const :tag "GNOME style" 'gnome) - (const :tag "Retro look" 'retro)) + :type '(choice (const :tag "GNOME style" gnome) + (const :tag "Retro look" retro)) :group 'gmm) (defvar tool-bar-map) @@ -215,7 +230,7 @@ command, the second element is an icon file name and the third element is a test function. You can use \\[describe-key] to find out the name of a menu command. The fourth -and all following elements are passed a the PROPS argument to the +and all following elements are passed as the PROPS argument to the function `tool-bar-local-item'. If ZAP-LIST is a list, remove those item from the default @@ -277,11 +292,7 @@ icon-list)) tool-bar-map)) -;; WARNING: The following is subject to change. Don't rely on it yet. - -;; From MH-E without modifications: - -(defmacro gmm-defun-compat (name function arg-list &rest body) +(defmacro defun-gmm (name function arg-list &rest body) "Create function NAME. If FUNCTION exists, then NAME becomes an alias for FUNCTION. Otherwise, create function NAME with ARG-LIST and BODY." @@ -290,21 +301,19 @@ `(defalias ',name ',function) `(defun ,name ,arg-list ,@body)))) -(gmm-defun-compat gmm-image-search-load-path +(defun-gmm gmm-image-search-load-path image-search-load-path (file &optional path) "Emacs 21 and XEmacs don't have `image-search-load-path'. This function returns nil on those systems." nil) -;; From MH-E with modifications: - -;; Don't use `gmm-defun-compat' until API changes in -;; `image-load-path-for-library' in Emacs CVS are completed. +;; Cf. `mh-image-load-path-for-library' in `mh-compat.el'. -(defun gmm-image-load-path-for-library (library image &optional path no-error) - "Return a suitable search path for images relative to LIBRARY. +(defun-gmm gmm-image-load-path-for-library + image-load-path-for-library (library image &optional path no-error) + "Return a suitable search path for images used by LIBRARY. -First it searches for IMAGE in `image-load-path' (excluding +It searches for IMAGE in `image-load-path' (excluding \"`data-directory'/images\") and `load-path', followed by a path suitable for LIBRARY, which includes \"../../etc/images\" and \"../etc/images\" relative to the library file itself, and then @@ -404,6 +413,21 @@ (intern (let ((mode (symbol-name major-mode))) (string-match "^\\(.+\\)-mode$" mode) (match-string 1 mode)))))) + +(defun gmm-write-region (start end filename &optional append visit + lockname mustbenew) + "Compatibility function for `write-region'. + +In XEmacs, the seventh argument of `write-region' specifies the +coding-system." + (if (and mustbenew + (or (featurep 'xemacs) + (= emacs-major-version 20))) + (if (file-exists-p filename) + (signal 'file-already-exists + (list "File exists" filename)) + (write-region start end filename append visit lockname)) + (write-region start end filename append visit lockname mustbenew))) (provide 'gmm-utils) Index: gnus/lisp/gnus-agent.el diff -u gnus/lisp/gnus-agent.el:7.57 gnus/lisp/gnus-agent.el:7.63 --- gnus/lisp/gnus-agent.el:7.57 Tue Mar 21 14:32:42 2006 +++ gnus/lisp/gnus-agent.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-agent.el --- unplugged support for Gnus ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; This file is part of GNU Emacs. @@ -13,7 +13,7 @@ ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; 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 @@ -259,6 +259,16 @@ (defvar gnus-headers) (defvar gnus-score) +;; Added to support XEmacs +(eval-and-compile + (unless (fboundp 'directory-files-and-attributes) + (defun directory-files-and-attributes (directory + &optional full match nosort) + (let (result) + (dolist (file (directory-files directory full match nosort)) + (push (cons file (file-attributes file)) result)) + (nreverse result))))) + ;;; ;;; Setup ;;; @@ -591,7 +601,17 @@ (fboundp 'make-mode-line-mouse-map)) (propertize string 'local-map (make-mode-line-mouse-map mouse-button mouse-func) - 'mouse-face 'mode-line-highlight) + 'mouse-face + (cond ((and (featurep 'xemacs) + ;; XEmacs' `facep' only checks for a face + ;; object, not for a face name, so it's useless + ;; to check with `facep'. + (find-face 'modeline)) + 'modeline) + ((facep 'mode-line-highlight) ;; Emacs 22 + 'mode-line-highlight) + ((facep 'mode-line) ;; Emacs 21 + 'mode-line)) ) string)) (defun gnus-agent-toggle-plugged (set-to) @@ -1171,7 +1191,7 @@ ;; For each article that I processed that is no longer ;; undownloaded, remove its processable mark. - (mapc #'gnus-summary-remove-process-mark + (mapc #'gnus-summary-remove-process-mark (gnus-sorted-ndifference gnus-newsgroup-processable gnus-newsgroup-undownloaded)) ;; The preceeding call to (gnus-agent-summary-fetch-group) @@ -1727,7 +1747,61 @@ (setq prev-num cur))) (forward-line 1))))))) +(defun gnus-agent-flush-server (&optional server-or-method) + "Flush all agent index files for every subscribed group within + the given SERVER-OR-METHOD. When called with nil, the current + value of gnus-command-method identifies the server." + (let* ((gnus-command-method (if server-or-method + (gnus-server-to-method server-or-method) + gnus-command-method)) + (alist gnus-newsrc-alist)) + (while alist + (let ((entry (pop alist))) + (when (gnus-methods-equal-p gnus-command-method (gnus-info-method entry)) + (gnus-agent-flush-group (gnus-info-group entry))))))) + +(defun gnus-agent-flush-group (group) + "Flush the agent's index files such that the GROUP no longer +appears to have any local content. The actual content, the +article files, may then be deleted using gnus-agent-expire-group. +If flushing was a mistake, the gnus-agent-regenerate-group method +provides an undo mechanism by reconstructing the index files from +the article files." + (interactive + (list (let ((def (or (gnus-group-group-name) + gnus-newsgroup-name))) + (let ((select (read-string (if def + (concat "Group Name (" + def "): ") + "Group Name: ")))) + (if (and (equal "" select) + def) + def + select))))) + + (let* ((gnus-command-method (or gnus-command-method + (gnus-find-method-for-group group))) + (overview (gnus-agent-article-name ".overview" group)) + (agentview (gnus-agent-article-name ".agentview" group))) + + (if (file-exists-p overview) + (delete-file overview)) + (if (file-exists-p agentview) + (delete-file agentview)) + + (gnus-agent-update-view-total-fetched-for group nil gnus-command-method) + (gnus-agent-update-view-total-fetched-for group t gnus-command-method) + + ;(gnus-agent-set-local group nil nil) + ;(gnus-agent-save-local t) + (gnus-agent-save-group-info nil group nil))) + (defun gnus-agent-flush-cache () +"Flush the agent's index files such that the group no longer +appears to have any local content. The actual content, the +article files, is then deleted using gnus-agent-expire-group. The +gnus-agent-regenerate-group method provides an undo mechanism by +reconstructing the index files from the article files." (save-excursion (while gnus-agent-buffer-alist (set-buffer (cdar gnus-agent-buffer-alist)) @@ -1985,11 +2059,11 @@ ;; First, we'll fix the sort. (sort-numeric-fields 1 (point-min) (point-max)) - ;; but now we have to consider that we may have duplicate rows... + ;; but now we have to consider that we may have duplicate rows... ;; so reset to beginning of file (goto-char (point-min)) (setq last -134217728) - + ;; and throw a code that restarts this scan (throw 'problems t)) nil)))))) @@ -2058,7 +2132,21 @@ (let ((gnus-agent-article-alist alist)) (gnus-agent-save-alist gnus-agent-read-agentview))) alist)) - (file-error nil)))) + ((end-of-file file-error) + ;; The agentview file is missing. + (condition-case nil + ;; If the agent directory exists, attempt to perform a brute-force + ;; reconstruction of its contents. + (let* (alist + (file-attributes (directory-files-and-attributes + (gnus-agent-article-name "" + gnus-agent-read-agentview) nil "^[0-9]+$" t))) + (while file-attributes + (let ((fa (pop file-attributes))) + (unless (nth 1 fa) + (push (cons (string-to-number (nth 0 fa)) (time-to-days (nth 5 fa))) alist)))) + alist) + (file-error nil)))))) (defun gnus-agent-save-alist (group &optional articles state) "Save the article-state alist for GROUP." @@ -2158,7 +2246,8 @@ (let (group min max - (cur (current-buffer))) + (cur (current-buffer)) + (obarray my-obarray)) (setq group (read cur) min (read cur) max (read cur)) @@ -2239,7 +2328,9 @@ (if (cond ((and minmax (or (not (eq min (car minmax))) - (not (eq max (cdr minmax))))) + (not (eq max (cdr minmax)))) + min + max) (setcar minmax min) (setcdr minmax max) t) @@ -3517,7 +3608,7 @@ (or gnus-expert-user (gnus-y-or-n-p "gnus-agent-expire has identified local directories that are\ - not currently required by any agentized group. Do you wish to consider\ + not currently required by any agentized group. Do you wish to consider\ deleting them?"))) (while to-remove (let ((dir (pop to-remove))) @@ -3805,8 +3896,10 @@ (dir (file-name-directory file)) point (downloaded (if (file-exists-p dir) - (sort (mapcar (lambda (name) (string-to-number name)) - (directory-files dir nil "^[0-9]+$" t)) + (sort (delq nil (mapcar (lambda (name) + (and (not (file-directory-p (nnheader-concat dir name))) + (string-to-number name))) + (directory-files dir nil "^[0-9]+$" t))) '>) (progn (gnus-make-directory dir) nil))) dl nov-arts @@ -3970,8 +4063,8 @@ (gnus-agent-possibly-alter-active group group-active))))) (when (and reread gnus-agent-article-alist) - (gnus-agent-synchronize-group-flags - group + (gnus-agent-synchronize-group-flags + group (list (list (if (listp reread) reread @@ -4033,16 +4126,6 @@ (defun gnus-agent-group-covered-p (group) (gnus-agent-method-p (gnus-group-method group))) -;; Added to support XEmacs -(eval-and-compile - (unless (fboundp 'directory-files-and-attributes) - (defun directory-files-and-attributes (directory - &optional full match nosort) - (let (result) - (dolist (file (directory-files directory full match nosort)) - (push (cons file (file-attributes file)) result)) - (nreverse result))))) - (defun gnus-agent-update-files-total-fetched-for (group delta &optional method path) "Update, or set, the total disk space used by the articles that the @@ -4103,20 +4186,21 @@ (defun gnus-agent-total-fetched-for (group &optional method no-inhibit) "Get the total disk space used by the specified GROUP." - (unless gnus-agent-total-fetched-hashtb - (setq gnus-agent-total-fetched-hashtb (gnus-make-hashtable 1024))) + (unless (equal group "dummy.group") + (unless gnus-agent-total-fetched-hashtb + (setq gnus-agent-total-fetched-hashtb (gnus-make-hashtable 1024))) - ;; if null, gnus-agent-group-pathname will calc method. - (let* ((gnus-command-method method) - (path (gnus-agent-group-pathname group)) - (entry (gnus-gethash path gnus-agent-total-fetched-hashtb))) - (if entry - (apply '+ entry) - (let ((gnus-agent-inhibit-update-total-fetched-for (not no-inhibit))) - (+ - (gnus-agent-update-view-total-fetched-for group nil method path) - (gnus-agent-update-view-total-fetched-for group t method path) - (gnus-agent-update-files-total-fetched-for group nil method path)))))) + ;; if null, gnus-agent-group-pathname will calc method. + (let* ((gnus-command-method method) + (path (gnus-agent-group-pathname group)) + (entry (gnus-gethash path gnus-agent-total-fetched-hashtb))) + (if entry + (apply '+ entry) + (let ((gnus-agent-inhibit-update-total-fetched-for (not no-inhibit))) + (+ + (gnus-agent-update-view-total-fetched-for group nil method path) + (gnus-agent-update-view-total-fetched-for group t method path) + (gnus-agent-update-files-total-fetched-for group nil method path))))))) (provide 'gnus-agent) Index: gnus/lisp/gnus-art.el diff -u gnus/lisp/gnus-art.el:7.168 gnus/lisp/gnus-art.el:7.210 --- gnus/lisp/gnus-art.el:7.168 Wed Apr 26 17:32:25 2006 +++ gnus/lisp/gnus-art.el Thu Apr 19 12:08:11 2007 @@ -1,7 +1,7 @@ ;;; gnus-art.el --- article mode commands for Gnus ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -15,7 +15,7 @@ ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; 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 @@ -252,7 +252,7 @@ :type '(choice (const nil) (integer :value 200) (number :value 4.0) - (function :value fun) + function (regexp :value ".*")) :group 'gnus-article-signature) @@ -275,7 +275,7 @@ display -")) "*String or function to be executed to display an X-Face header. If it is a string, the command will be executed in a sub-shell -asynchronously. The compressed face will be piped to this command." +asynchronously. The compressed face will be piped to this command." :type `(choice string (function-item gnus-display-x-face-in-from) function) @@ -502,7 +502,10 @@ :group 'gnus-article-washing) (defcustom gnus-save-all-headers t - "*If non-nil, don't remove any headers before saving." + "*If non-nil, don't remove any headers before saving. +This will be overridden by the `:headers' property that the symbol of +the saver function, which is specified by `gnus-default-article-saver', +might have." :group 'gnus-article-saving :type 'boolean) @@ -523,14 +526,17 @@ "Headers to keep if `gnus-save-all-headers' is nil. If `gnus-save-all-headers' is non-nil, this variable will be ignored. If that variable is nil, however, all headers that match this regexp -will be kept while the rest will be deleted before saving." +will be kept while the rest will be deleted before saving. This and +`gnus-save-all-headers' will be overridden by the `:headers' property +that the symbol of the saver function, which is specified by +`gnus-default-article-saver', might have." :group 'gnus-article-saving :type 'regexp) (defcustom gnus-default-article-saver 'gnus-summary-save-in-rmail "A function to save articles in your favourite format. -The function must be interactively callable (in other words, it must -be an Emacs command). +The function will be called by way of the `gnus-summary-save-article' +command, and friends such as `gnus-summary-save-article-rmail'. Gnus provides the following functions: @@ -540,7 +546,28 @@ * gnus-summary-save-in-file (article format) * gnus-summary-save-body-in-file (article body) * gnus-summary-save-in-vm (use VM's folder format) -* gnus-summary-write-to-file (article format -- overwrite)." +* gnus-summary-write-to-file (article format -- overwrite) +* gnus-summary-write-body-to-file (article body -- overwrite) + +The symbol of each function may have the following properties: + +* :decode +The value non-nil means save decoded articles. This is meaningful +only with `gnus-summary-save-in-file', `gnus-summary-save-body-in-file', +`gnus-summary-write-to-file', and `gnus-summary-write-body-to-file'. + +* :function +The value specifies an alternative function which appends, not +overwrites, articles to a file. This implies that when saving many +articles at a time, `gnus-prompt-before-saving' is bound to t and all +articles are saved in a single file. This is meaningful only with +`gnus-summary-write-to-file' and `gnus-summary-write-body-to-file'. + +* :headers +The value specifies the symbol of a variable of which the value +specifies headers to be saved. If it is omitted, +`gnus-save-all-headers' and `gnus-saved-headers' control what +headers should be saved." :group 'gnus-article-saving :type '(radio (function-item gnus-summary-save-in-rmail) (function-item gnus-summary-save-in-mail) @@ -549,8 +576,49 @@ (function-item gnus-summary-save-body-in-file) (function-item gnus-summary-save-in-vm) (function-item gnus-summary-write-to-file) + (function-item gnus-summary-write-body-to-file) (function))) +(defcustom gnus-article-save-coding-system + (or (and (mm-coding-system-p 'utf-8) 'utf-8) + (and (mm-coding-system-p 'iso-2022-7bit) 'iso-2022-7bit) + (and (mm-coding-system-p 'emacs-mule) 'emacs-mule) + (and (mm-coding-system-p 'escape-quoted) 'escape-quoted)) + "Coding system used to save decoded articles to a file. + +The recommended coding systems are `utf-8', `iso-2022-7bit' and so on, +which can safely encode any characters in text. This is used by the +commands including: + +* gnus-summary-save-article-file +* gnus-summary-save-article-body-file +* gnus-summary-write-article-file +* gnus-summary-write-article-body-file + +and the functions to which you may set `gnus-default-article-saver': + +* gnus-summary-save-in-file +* gnus-summary-save-body-in-file +* gnus-summary-write-to-file +* gnus-summary-write-body-to-file + +Those commands and functions save just text displayed in the article +buffer to a file if the value of this variable is non-nil. Note that +buttonized MIME parts will be lost in a saved file in that case. +Otherwise, raw articles will be saved." + :group 'gnus-article-saving + :type `(choice + :format "%{%t%}:\n %[Value Menu%] %v" + (const :tag "Save raw articles" nil) + ,@(delq nil + (mapcar + (lambda (arg) (if (mm-coding-system-p (nth 3 arg)) arg)) + '((const :tag "UTF-8" utf-8) + (const :tag "iso-2022-7bit" iso-2022-7bit) + (const :tag "Emacs internal" emacs-mule) + (const :tag "escape-quoted" escape-quoted)))) + (symbol :tag "Coding system"))) + (defcustom gnus-rmail-save-name 'gnus-plain-save-name "A function generating a file name to save articles in Rmail format. The function is called with NEWSGROUP, HEADERS, and optional LAST-FILE." @@ -834,6 +902,9 @@ (defvar gnus-decode-header-function 'mail-decode-encoded-word-region "Function used to decode headers.") +(defvar gnus-decode-address-function 'mail-decode-encoded-address-region + "Function used to decode addresses.") + (defvar gnus-article-dumbquotes-map '(("\200" "EUR") ("\202" ",") @@ -870,8 +941,7 @@ :group 'gnus-article-mime :type '(repeat regexp)) -(defcustom gnus-buttonized-mime-types (unless (eq mm-verify-option 'never) - '("multipart/signed")) +(defcustom gnus-buttonized-mime-types nil "List of MIME types that should be given buttons when rendered inline. If set, this variable overrides `gnus-unbuttonized-mime-types'. To see e.g. security buttons you could set this to @@ -1287,6 +1357,18 @@ :link '(custom-manual "(gnus)Customizing Articles") :type gnus-article-treat-custom) +(defcustom gnus-article-unfold-long-headers nil + "If non-nil, allow unfolding headers even if the header is long. +If it is a regexp, only long headers matching this regexp are unfolded. +If it is t, all long headers are unfolded. + +This variable has no effect if `gnus-treat-unfold-headers' is nil." + :version "23.0" ;; No Gnus + :group 'gnus-article-treat + :type '(choice (const nil) + (const :tag "all" t) + (regexp))) + (defcustom gnus-treat-fold-headers nil "Fold headers. Valid values are nil, t, `head', `first', `last', an integer or a @@ -1327,17 +1409,16 @@ (defcustom gnus-treat-display-x-face (and (not noninteractive) - (or (and (fboundp 'image-type-available-p) - (image-type-available-p 'xbm) - (string-match "^0x" (shell-command-to-string "uncompface")) - (executable-find "icontopbm")) - (and (featurep 'xemacs) - (featurep 'xface))) + (gnus-image-type-available-p 'xbm) + (if (featurep 'xemacs) + (featurep 'xface) + (and (string-match "^0x" (shell-command-to-string "uncompface")) + (executable-find "icontopbm"))) 'head) "Display X-Face headers. -Valid values are nil, t, `head', `first', `last', an integer or a -predicate. See Info node `(gnus)Customizing Articles' and Info -node `(gnus)X-Face' for details." +Valid values are nil and `head'. +See Info node `(gnus)Customizing Articles' and Info node +`(gnus)X-Face' for details." :group 'gnus-article-treat :version "21.1" :link '(custom-manual "(gnus)Customizing Articles") @@ -1364,10 +1445,7 @@ (defcustom gnus-treat-display-face (and (not noninteractive) - (or (and (fboundp 'image-type-available-p) - (image-type-available-p 'png)) - (and (featurep 'xemacs) - (featurep 'png))) + (gnus-image-type-available-p 'png) 'head) "Display Face headers. Valid values are nil, t, `head', `first', `last', an integer or a @@ -1380,12 +1458,7 @@ :type gnus-article-treat-head-custom) (put 'gnus-treat-display-face 'highlight t) -(defcustom gnus-treat-display-smileys - (if (or (and (featurep 'xemacs) - (featurep 'xpm)) - (and (fboundp 'image-type-available-p) - (image-type-available-p 'pbm))) - t nil) +(defcustom gnus-treat-display-smileys (gnus-image-type-available-p 'xpm) "Display smileys. Valid values are nil, t, `head', `first', `last', an integer or a predicate. See Info node `(gnus)Customizing Articles' and Info @@ -1550,13 +1623,6 @@ '("January" "February" "March" "April" "May" "June" "July" "August" "September" "October" "November" "December")) -(defvar gnus-button-regexp nil) -(defvar gnus-button-marker-list nil) -;; Regexp matching any of the regexps from `gnus-button-alist'. - -(defvar gnus-button-last nil) -;; The value of `gnus-button-alist' when `gnus-button-regexp' was build. - (defvar article-goto-body-goes-to-point-min-p nil) (defvar gnus-article-wash-types nil) (defvar gnus-article-emphasis-alist nil) @@ -1763,7 +1829,7 @@ (interactive) ;; This function might be inhibited. (unless gnus-inhibit-hiding - (let ((inhibit-read-only nil) + (let ((inhibit-read-only t) (case-fold-search t) (max (1+ (length gnus-sorted-header-list))) (inhibit-point-motion-hooks t) @@ -1925,7 +1991,11 @@ 'string<)))) (gnus-article-hide-header "reply-to"))))) ((eq elem 'date) - (let ((date (message-fetch-field "date"))) + (let ((date (with-current-buffer gnus-original-article-buffer + ;; If date in `gnus-article-buffer' is localized + ;; (`gnus-treat-date-user-defined'), + ;; `days-between' might fail. + (message-fetch-field "date")))) (when (and date (< (days-between (current-time-string) date) 4)) @@ -2094,16 +2164,21 @@ (while (not (eobp)) (save-restriction (mail-header-narrow-to-field) - (let ((header (buffer-string))) + (let* ((header (buffer-string)) + (unfoldable + (or (equal gnus-article-unfold-long-headers t) + (and (stringp gnus-article-unfold-long-headers) + (string-match gnus-article-unfold-long-headers header))))) (with-temp-buffer (insert header) (goto-char (point-min)) (while (re-search-forward "\n[\t ]" nil t) (replace-match " " t t))) - (setq length (- (point-max) (point-min) 1))) - (when (< length (window-width)) - (while (re-search-forward "\n[\t ]" nil t) - (replace-match " " t t))) + (setq length (- (point-max) (point-min) 1)) + (when (or unfoldable + (< length (window-width))) + (while (re-search-forward "\n[\t ]" nil t) + (replace-match " " t t)))) (goto-char (point-max))))))) (defun gnus-article-treat-fold-headers () @@ -2150,6 +2225,39 @@ (mail-header-fold-field) (goto-char (point-max)))))) +(defcustom gnus-article-truncate-lines default-truncate-lines + "Value of `truncate-lines' in Gnus Article buffer. +Valid values are nil, t, `head', `first', `last', an integer or a +predicate. See Info node `(gnus)Customizing Articles'." + :version "23.0" ;; No Gnus + :group 'gnus-article + ;; :link '(custom-manual "(gnus)Customizing Articles") + :type 'boolean) + +(defun gnus-article-toggle-truncate-lines (&optional arg) + "Toggle whether to fold or truncate long lines in article the buffer. +If ARG is non-nil and not a number, toggle +`gnus-article-truncate-lines' too. If ARG is a number, truncate +long lines iff arg is positive." + (interactive "P") + (cond + ((and (numberp arg) (> arg 0)) + (setq gnus-article-truncate-lines t)) + ((numberp arg) + (setq gnus-article-truncate-lines nil)) + (arg + (setq gnus-article-truncate-lines + (not gnus-article-truncate-lines)))) + (gnus-with-article-buffer + (cond + ((and (numberp arg) (> arg 0)) + (setq truncate-lines nil)) + ((numberp arg) + (setq truncate-lines t))) + ;; In versions of Emacs 22 (CVS) before 2006-05-26, + ;; `toggle-truncate-lines' needs an argument. + (toggle-truncate-lines))) + (defun gnus-article-treat-body-boundary () "Place a boundary line at the end of the headers." (interactive) @@ -2398,10 +2506,24 @@ (set-buffer gnus-summary-buffer) (error)) gnus-newsgroup-ignored-charsets)) - (inhibit-read-only t)) - (save-restriction - (article-narrow-to-head) - (funcall gnus-decode-header-function (point-min) (point-max))))) + (inhibit-read-only t) + end start) + (goto-char (point-min)) + (when (search-forward "\n\n" nil 'move) + (forward-line -1)) + (setq end (point)) + (while (not (bobp)) + (while (progn + (forward-line -1) + (and (not (bobp)) + (memq (char-after) '(?\t ? ))))) + (setq start (point)) + (if (looking-at "\ +\\(?:Resent-\\)?\\(?:From\\|Cc\\|To\\|Bcc\\|\\(?:In-\\)?Reply-To\\|Sender\ +\\|Mail-Followup-To\\|Mail-Copies-To\\|Approved\\):") + (funcall gnus-decode-address-function start end) + (funcall gnus-decode-header-function start end)) + (goto-char (setq end start))))) (defun article-decode-group-name () "Decode group names in `Newsgroups:'." @@ -2699,7 +2821,8 @@ (add-hook 'gnus-exit-gnus-hook (lambda () (gnus-article-browse-delete-temp-files t))) - (browse-url tmp-file) + ;; FIXME: Warn if there's an tag? + (browse-url-of-file tmp-file) (setq showed t))) ;; If multipart, recurse ((and (stringp (car handle)) @@ -2709,9 +2832,16 @@ (gnus-article-browse-html-parts handle)))))))) showed)) -;; TODO: Key binding +;; FIXME: Documentation in texi/gnus.texi missing. (defun gnus-article-browse-html-article () - "View \"text/html\" parts of the current article with a WWW browser." + "View \"text/html\" parts of the current article with a WWW browser. + +Warning: Spammers use links to images in HTML articles to verify +whether you have read the message. As +`gnus-article-browse-html-article' passes the unmodified HTML +content to the browser without eliminating these \"web bugs\" you +should only use it for mails from trusted senders." + ;; Cf. `mm-w3m-safe-url-regexp' (interactive) (save-window-excursion ;; Open raw article and select the buffer @@ -3423,10 +3553,13 @@ (defun gnus-article-save (save-buffer file &optional num) "Save the currently selected article." - (unless gnus-save-all-headers - ;; Remove headers according to `gnus-saved-headers'. + (when (or (get gnus-default-article-saver :headers) + (not gnus-save-all-headers)) + ;; Remove headers according to `gnus-saved-headers' or the value + ;; of the `:headers' property that the saver function might have. (let ((gnus-visible-headers - (or gnus-saved-headers gnus-visible-headers)) + (or (symbol-value (get gnus-default-article-saver :headers)) + gnus-saved-headers gnus-visible-headers)) (gnus-article-buffer save-buffer)) (save-excursion (set-buffer save-buffer) @@ -3451,7 +3584,8 @@ (funcall gnus-default-article-saver filename))))) (defun gnus-read-save-file-name (prompt &optional filename - function group headers variable) + function group headers variable + dir-var) (let ((default-name (funcall function group headers (symbol-value variable))) result) @@ -3464,6 +3598,10 @@ default-name) (filename filename) (t + (when (symbol-value dir-var) + (setq default-name (expand-file-name + (file-name-nondirectory default-name) + (symbol-value dir-var)))) (let* ((split-name (gnus-get-split-value gnus-split-methods)) (prompt (format prompt @@ -3528,7 +3666,11 @@ ;; Possibly translate some characters. (nnheader-translate-file-chars file)))))) (gnus-make-directory (file-name-directory result)) - (set variable result))) + (when variable + (set variable result)) + (when dir-var + (set dir-var (file-name-directory result))) + result)) (defun gnus-article-archive-name (group) "Return the first instance of an \"Archive-name\" in the current buffer." @@ -3576,6 +3718,8 @@ (gnus-output-to-mail filename))))) filename) +(put 'gnus-summary-save-in-file :decode t) +(put 'gnus-summary-save-in-file :headers 'gnus-saved-headers) (defun gnus-summary-save-in-file (&optional filename overwrite) "Append this article to file. Optional argument FILENAME specifies file name. @@ -3594,13 +3738,21 @@ (gnus-output-to-file filename)))) filename) +(put 'gnus-summary-write-to-file :decode t) +(put 'gnus-summary-write-to-file :function 'gnus-summary-save-in-file) +(put 'gnus-summary-write-to-file :headers 'gnus-saved-headers) (defun gnus-summary-write-to-file (&optional filename) "Write this article to a file, overwriting it if the file exists. Optional argument FILENAME specifies file name. The directory to save in defaults to `gnus-article-save-directory'." - (gnus-summary-save-in-file nil t)) + (setq filename (gnus-read-save-file-name + "Save %s in file" filename + gnus-file-save-name gnus-newsgroup-name + gnus-current-headers nil 'gnus-newsgroup-last-directory)) + (gnus-summary-save-in-file filename t)) -(defun gnus-summary-save-body-in-file (&optional filename) +(put 'gnus-summary-save-body-in-file :decode t) +(defun gnus-summary-save-body-in-file (&optional filename overwrite) "Append this article body to a file. Optional argument FILENAME specifies file name. The directory to save in defaults to `gnus-article-save-directory'." @@ -3614,9 +3766,25 @@ (widen) (when (article-goto-body) (narrow-to-region (point) (point-max))) + (when (and overwrite + (file-exists-p filename)) + (delete-file filename)) (gnus-output-to-file filename)))) filename) +(put 'gnus-summary-write-body-to-file :decode t) +(put 'gnus-summary-write-body-to-file + :function 'gnus-summary-save-body-in-file) +(defun gnus-summary-write-body-to-file (&optional filename) + "Write this article body to a file, overwriting it if the file exists. +Optional argument FILENAME specifies file name. +The directory to save in defaults to `gnus-article-save-directory'." + (setq filename (gnus-read-save-file-name + "Save %s body in file" filename + gnus-file-save-name gnus-newsgroup-name + gnus-current-headers nil 'gnus-newsgroup-last-directory)) + (gnus-summary-save-body-in-file filename t)) + (defun gnus-summary-save-in-pipe (&optional command) "Pipe this article to subprocess." (setq command @@ -3680,7 +3848,7 @@ (defun gnus-numeric-save-name (newsgroup headers &optional last-file) "Generate file name from NEWSGROUP, HEADERS, and optional LAST-FILE. If variable `gnus-use-long-file-name' is non-nil, it is -~/News/news.group/num. Otherwise, it is like ~/News/news/group/num." +~/News/news.group/num. Otherwise, it is like ~/News/news/group/num." (let ((default (expand-file-name (concat (if (gnus-use-long-file-name 'not-save) @@ -3978,6 +4146,7 @@ ;; Prevent recent Emacsen from displaying non-break space as "\ ". (set (make-local-variable 'nobreak-char-display) nil) (setq cursor-in-non-selected-windows nil) + (setq truncate-lines gnus-article-truncate-lines) (gnus-set-default-directory) (buffer-disable-undo) (setq buffer-read-only t @@ -3986,6 +4155,10 @@ (mm-enable-multibyte) (gnus-run-mode-hooks 'gnus-article-mode-hook)) +(defvar gnus-button-marker-list nil + "Regexp matching any of the regexps from `gnus-button-alist'. +Internal variable.") + (defun gnus-article-setup-buffer () "Initialize the article buffer." (let* ((name (if gnus-single-article-buffer "*Article*" @@ -3997,10 +4170,9 @@ (setq gnus-article-buffer name) (setq gnus-original-article-buffer original) (setq gnus-article-mime-handle-alist nil) - ;; This might be a variable local to the summary buffer. - (unless gnus-single-article-buffer - (save-excursion - (set-buffer gnus-summary-buffer) + (with-current-buffer gnus-summary-buffer + ;; This might be a variable local to the summary buffer. + (unless gnus-single-article-buffer (setq gnus-article-buffer name) (setq gnus-original-article-buffer original) (gnus-set-global-variables))) @@ -4041,23 +4213,27 @@ (set-buffer (gnus-get-buffer-create name)) (gnus-article-mode) (make-local-variable 'gnus-summary-buffer) + (setq gnus-summary-buffer + (gnus-summary-buffer-name gnus-newsgroup-name)) (gnus-summary-set-local-parameters gnus-newsgroup-name) (current-buffer))))) ;; Set article window start at LINE, where LINE is the number of lines ;; from the head of the article. (defun gnus-article-set-window-start (&optional line) - (set-window-start - (gnus-get-buffer-window gnus-article-buffer t) - (save-excursion - (set-buffer gnus-article-buffer) - (goto-char (point-min)) - (if (not line) - (point-min) - (gnus-message 6 "Moved to bookmark") - (search-forward "\n\n" nil t) - (forward-line line) - (point))))) + (let ((article-window (gnus-get-buffer-window gnus-article-buffer t))) + (when article-window + (set-window-start + article-window + (save-excursion + (set-buffer gnus-article-buffer) + (goto-char (point-min)) + (if (not line) + (point-min) + (gnus-message 6 "Moved to bookmark") + (search-forward "\n\n" nil t) + (forward-line line) + (point))))))) (defun gnus-article-prepare (article &optional all-headers header) "Prepare ARTICLE in article mode buffer. @@ -4252,7 +4428,7 @@ gnus-mime-button-menu gnus-mime-button-map "MIME button menu." `("MIME Part" ,@(mapcar (lambda (c) - (vector (caddr c) (car c) :enable t)) + (vector (caddr c) (car c) :active t)) gnus-mime-button-commands))) (defun gnus-mime-button-menu (event prefix) @@ -4430,9 +4606,8 @@ (handles gnus-article-mime-handles) (none "(none)") (description - (or - (mail-decode-encoded-word-string (or (mm-handle-description data) - none)))) + (mail-decode-encoded-word-string (or (mm-handle-description data) + none))) (filename (or (mail-content-type-get (mm-handle-disposition data) 'filename) none)) @@ -4498,8 +4673,10 @@ (def-type (and name (mm-default-file-encoding name)))) (and def-type (cons def-type 0)))) -(defun gnus-mime-view-part-as-type (&optional mime-type) - "Choose a MIME media type, and view the part as such." +(defun gnus-mime-view-part-as-type (&optional mime-type pred) + "Choose a MIME media type, and view the part as such. +If non-nil, PRED is a predicate to use during completion to limit the +available media-types." (interactive) (unless mime-type (setq mime-type @@ -4508,7 +4685,7 @@ (format "View as MIME type (default %s): " (car default)) (mapcar #'list (mailcap-mime-types)) - nil nil nil nil + pred nil nil nil (car default))))) (gnus-article-check-buffer) (let ((handle (get-text-property (point) 'gnus-data))) @@ -4670,6 +4847,21 @@ (mm-string-to-multibyte contents))) (goto-char b))))) +(defun gnus-mime-strip-charset-parameters (handle) + "Strip charset parameters from HANDLE." + (if (stringp (car handle)) + (mapc #'gnus-mime-strip-charset-parameters (cdr handle)) + (let* ((type (mm-handle-type (if (equal (mm-handle-media-type handle) + "message/external-body") + (progn + (unless (mm-handle-cache handle) + (mm-extern-cache-contents handle)) + (mm-handle-cache handle)) + handle))) + (charset (assq 'charset (cdr type)))) + (when charset + (delq charset type))))) + (defun gnus-mime-view-part-as-charset (&optional handle arg) "Insert the MIME part under point into the current buffer using the specified charset." @@ -4678,7 +4870,7 @@ (let ((handle (or handle (get-text-property (point) 'gnus-data))) (fun (get-text-property (point) 'gnus-callback)) (gnus-newsgroup-ignored-charsets 'gnus-all) - gnus-newsgroup-charset type charset) + gnus-newsgroup-charset form preferred parts) (when handle (if (mm-handle-undisplayer handle) (mm-remove-part handle)) @@ -4686,17 +4878,24 @@ (setq gnus-newsgroup-charset (or (cdr (assq arg gnus-summary-show-article-charset-alist)) (mm-read-coding-system "Charset: "))) - ;; Strip the charset parameter from `handle'. - (setq type (mm-handle-type - (if (equal (mm-handle-media-type handle) - "message/external-body") - (progn - (unless (mm-handle-cache handle) - (mm-extern-cache-contents handle)) - (mm-handle-cache handle)) - handle)) - charset (assq 'charset (cdr type))) - (delq charset type) + (gnus-mime-strip-charset-parameters handle) + (when (and (consp (setq form (cdr-safe fun))) + (setq form (ignore-errors + (assq 'gnus-mime-display-alternative form))) + (setq preferred (caddr form)) + (progn + (when (eq (car preferred) 'quote) + (setq preferred (cadr preferred))) + (not (equal preferred + (get-text-property (point) 'gnus-data)))) + (setq parts (get-text-property (point) 'gnus-part)) + (setq parts (cdr (assq parts + gnus-article-mime-handle-alist))) + (equal (mm-handle-media-type parts) "multipart/alternative") + (setq parts (reverse (cdr parts)))) + (setcar (cddr form) + (list 'quote (or (cadr (member preferred parts)) + (car parts))))) (funcall fun handle))))) (defun gnus-mime-view-part-externally (&optional handle) @@ -4708,12 +4907,18 @@ (mm-inlined-types nil) (mail-parse-charset gnus-newsgroup-charset) (mail-parse-ignored-charsets - (with-current-buffer gnus-summary-buffer - gnus-newsgroup-ignored-charsets))) - (when handle - (if (mm-handle-undisplayer handle) - (mm-remove-part handle) - (mm-display-part handle))))) + (with-current-buffer gnus-summary-buffer + gnus-newsgroup-ignored-charsets)) + (type (mm-handle-media-type handle)) + (method (mailcap-mime-info type)) + (mm-enable-external t)) + (if (not (stringp method)) + (gnus-mime-view-part-as-type + nil (lambda (type) (stringp (mailcap-mime-info type)))) + (when handle + (if (mm-handle-undisplayer handle) + (mm-remove-part handle) + (mm-display-part handle)))))) (defun gnus-mime-view-part-internally (&optional handle) "View the MIME part under point with an internal viewer. @@ -4728,10 +4933,13 @@ (with-current-buffer gnus-summary-buffer gnus-newsgroup-ignored-charsets)) (inhibit-read-only t)) - (when handle - (if (mm-handle-undisplayer handle) - (mm-remove-part handle) - (mm-display-part handle))))) + (if (not (mm-inlinable-p handle)) + (gnus-mime-view-part-as-type + nil (lambda (type) (mm-inlinable-p handle type))) + (when handle + (if (mm-handle-undisplayer handle) + (mm-remove-part handle) + (mm-display-part handle)))))) (defun gnus-mime-action-on-part (&optional action) "Do something with the MIME attachment at \(point\)." @@ -4993,6 +5201,9 @@ ;; Exclude a newline. (1- (point)) (point))) + (when gnus-article-button-face + (gnus-overlay-put (gnus-make-overlay b e) + 'face gnus-article-button-face)) (widget-convert-button 'link b e :mime-handle handle @@ -5077,7 +5288,11 @@ (article-goto-body) (narrow-to-region (point-min) (point)) (gnus-article-save-original-date - (gnus-treat-article 'head))))))))) + (gnus-treat-article 'head))))))) + ;; Cope with broken MIME messages. + (goto-char (point-max)) + (unless (bolp) + (insert "\n")))) (defcustom gnus-mime-display-multipart-as-mixed nil "Display \"multipart\" parts as \"multipart/mixed\". @@ -5437,17 +5652,55 @@ ;;; Article savers. (defun gnus-output-to-file (file-name) - "Append the current article to a file named FILE-NAME." - (let ((artbuf (current-buffer))) + "Append the current article to a file named FILE-NAME. +If `gnus-article-save-coding-system' is non-nil, it is used to encode +text and used as the value of the coding cookie which is added to the +top of a file. Otherwise, this function saves a raw article without +the coding cookie." + (let* ((artbuf (current-buffer)) + (file-name-coding-system nnmail-pathname-coding-system) + (coding gnus-article-save-coding-system) + (coding-system-for-read (if coding + nil ;; Rely on the coding cookie. + mm-text-coding-system)) + (coding-system-for-write (or coding + mm-text-coding-system-for-write + mm-text-coding-system)) + (exists (file-exists-p file-name))) (with-temp-buffer + (when exists + (insert-file-contents file-name) + (goto-char (point-min)) + ;; Remove the existing coding cookie. + (when (looking-at "X-Gnus-Coding-System: .+\n\n") + (delete-region (match-beginning 0) (match-end 0)))) + (goto-char (point-max)) (insert-buffer-substring artbuf) ;; Append newline at end of the buffer as separator, and then ;; save it to file. (goto-char (point-max)) (insert "\n") - (let ((file-name-coding-system nnmail-pathname-coding-system)) - (mm-append-to-file (point-min) (point-max) file-name)) - t))) + (when coding + ;; If the coding system is not suitable to encode the text, + ;; ask a user for a proper one. + (when (fboundp 'select-safe-coding-system) + (setq coding (coding-system-base + (save-window-excursion + (select-safe-coding-system (point-min) (point-max) + coding)))) + (setq coding-system-for-write + (or (cdr (assq coding '((mule-utf-8 . utf-8)))) + coding))) + (goto-char (point-min)) + ;; Add the coding cookie. + (insert (format "X-Gnus-Coding-System: -*- coding: %s; -*-\n\n" + coding-system-for-write))) + (if exists + (progn + (write-region (point-min) (point-max) file-name nil 'no-message) + (message "Appended to %s" file-name)) + (write-region (point-min) (point-max) file-name)))) + t) (defun gnus-narrow-to-page (&optional arg) "Narrow the article buffer to a page. @@ -6235,9 +6488,24 @@ ;;; Internal Variables: (defcustom gnus-button-url-regexp - (if (string-match "[[:digit:]]" "1") ;; support POSIX? - "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|nntp\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)\\(//[-a-z0-9_.]+:[0-9]*\\)?[-a-z0-9_=!?#$@~%&*+\\/:;.,[:word:]]+[-a-z0-9_=#$@~%&*+\\/[:word:]]\\)" - "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|nntp\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)\\(//[-a-z0-9_.]+:[0-9]*\\)?\\([-a-z0-9_=!?#$@~%&*+\\/:;.,]\\|\\w\\)+\\([-a-z0-9_=#$@~%&*+\\/]\\|\\w\\)\\)") + (concat + "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|" + "nntp\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)" + "\\(//[-a-z0-9_.]+:[0-9]*\\)?" + (if (string-match "[[:digit:]]" "1") ;; Support POSIX? + (let ((chars "-a-z0-9_=#$@~%&*+\\/[:word:]") + (punct "!?:;.,")) + (concat + "\\(?:" + ;; Match paired parentheses, e.g. in Wikipedia URLs: + "[" chars punct "]+" "(" "[" chars punct "]+" "[" chars "]*)" "[" chars "]" + "\\|" + "[" chars punct "]+" "[" chars "]" + "\\)")) + (concat ;; XEmacs 21.4 doesn't support POSIX. + "\\([-a-z0-9_=!?#$@~%&*+\\/:;.,]\\|\\w\\)+" + "\\([-a-z0-9_=#$@~%&*+\\/]\\|\\w\\)")) + "\\)") "Regular expression that matches URLs." :group 'gnus-article-buttons :type 'regexp) @@ -6322,7 +6590,7 @@ of the symbols `mid' or `mail', Gnus will always assume that the string is a message ID or a mail address, respectively. If this variable is set to the symbol `ask', always query the user what do do. If it is a function, this -function will be called with the string as it's only argument. The function +function will be called with the string as its only argument. The function must return `mid', `mail', `invalid' or `ask'." :version "22.1" :group 'gnus-article-buttons @@ -6493,7 +6761,10 @@ "Call function FUN on argument ARG. Both FUN and ARG are supposed to be strings. ARG will be passed as a symbol to FUN." - (funcall (intern fun) (intern arg))) + (funcall (intern fun) + (if (string-match "^customize-apropos" fun) + arg + (intern arg)))) (defvar gnus-button-handle-describe-prefix "^\\(C-h\\|?\\)") @@ -6637,6 +6908,8 @@ 0 (>= gnus-button-message-level 0) gnus-button-message-id 2) ("\\bin\\( +article\\| +message\\)? +\\(<\\([^\n @<>]+@[^\n @<>]+\\)>\\)" 2 (>= gnus-button-message-level 0) gnus-button-message-id 3) + ("\\b\\(mid\\|message-id\\):? +\\(<\\([^\n @<>]+@[^\n @<>]+\\)>\\)" + 2 (>= gnus-button-message-level 0) gnus-button-message-id 3) ("\\( \n\t]+\\)>" 0 (>= gnus-button-message-level 0) gnus-url-mailto 2) ;; RFC 2368 (The mailto URL scheme) @@ -6692,7 +6965,7 @@ 1 (>= gnus-button-emacs-level 8) gnus-button-handle-library 1) ("`\\([a-z][-a-z0-9]+\\.el\\)'" 1 (>= gnus-button-emacs-level 8) gnus-button-handle-library 1) - ("`\\([a-z][a-z0-9]+-[a-z]+-[-a-z]+\\|\\(gnus\\|message\\)-[-a-z]+\\)'" + ("`\\([a-z][a-z0-9]+-[a-z0-9]+-[-a-z0-9]*[a-z]\\|\\(gnus\\|message\\)-[-a-z]+\\)'" 0 (>= gnus-button-emacs-level 8) gnus-button-handle-symbol 1) ("`\\([a-z][a-z0-9]+-[a-z]+\\)'" 0 (>= gnus-button-emacs-level 9) gnus-button-handle-symbol 1) @@ -6704,7 +6977,7 @@ 0 (>= gnus-button-emacs-level 1) gnus-button-handle-describe-function 2) ("\\b\\(C-h\\|?\\)[ \t\n]+v[ \t\n]+\\([^ \t\n]+\\)[ \t\n]+RET" 0 (>= gnus-button-emacs-level 1) gnus-button-handle-describe-variable 2) - ("`\\(\\b\\(C-h\\|?\\)[ \t\n]+k[ \t\n]+\\([^']+\\)\\)'" + ("`\\(\\(C-h\\|?\\)[ \t\n]+k[ \t\n]+\\([^']+\\)\\)'" ;; Unlike the other regexps we really have to require quoting ;; here to determine where it ends. 1 (>= gnus-button-emacs-level 1) gnus-button-handle-describe-key 3) @@ -7174,8 +7447,13 @@ (with-current-buffer gnus-summary-buffer (gnus-summary-refer-article message-id))) -(defun gnus-button-fetch-group (address) +(defun gnus-button-fetch-group (address &rest ignore) "Fetch GROUP specified by ADDRESS." + (when (string-match "\\`\\(nntp\\|news\\):\\(//\\)?\\(.*\\)\\'" + address) + ;; Allow to use `gnus-button-fetch-group' in `browse-url-browser-function' + ;; for nntp:// and news:// + (setq address (match-string 3 address))) (if (not (string-match "[:/]" address)) ;; This is just a simple group url. (gnus-group-read-ephemeral-group address gnus-select-method) @@ -7265,19 +7543,23 @@ map)) (defun gnus-insert-prev-page-button () - (let ((b (point)) + (let ((b (point)) e (inhibit-read-only t)) (gnus-eval-format gnus-prev-page-line-format nil `(keymap ,gnus-prev-page-map - gnus-prev t - gnus-callback gnus-article-button-prev-page - article-type annotation)) + gnus-prev t + gnus-callback gnus-article-button-prev-page + article-type annotation)) + (setq e (if (bolp) + ;; Exclude a newline. + (1- (point)) + (point))) + (when gnus-article-button-face + (gnus-overlay-put (gnus-make-overlay b e) + 'face gnus-article-button-face)) (widget-convert-button - 'link b (if (bolp) - ;; Exclude a newline. - (1- (point)) - (point)) + 'link b e :action 'gnus-button-prev-page :button-keymap gnus-prev-page-map))) @@ -7298,18 +7580,22 @@ (select-window win))) (defun gnus-insert-next-page-button () - (let ((b (point)) + (let ((b (point)) e (inhibit-read-only t)) (gnus-eval-format gnus-next-page-line-format nil `(keymap ,gnus-next-page-map - gnus-next t - gnus-callback gnus-article-button-next-page - article-type annotation)) + gnus-next t + gnus-callback gnus-article-button-next-page + article-type annotation)) + (setq e (if (bolp) + ;; Exclude a newline. + (1- (point)) + (point))) + (when gnus-article-button-face + (gnus-overlay-put (gnus-make-overlay b e) + 'face gnus-article-button-face)) (widget-convert-button - 'link b (if (bolp) - ;; Exclude a newline. - (1- (point)) - (point)) + 'link b e :action 'gnus-button-next-page :button-keymap gnus-next-page-map))) @@ -7569,7 +7855,7 @@ ,@(delq nil (mapcar (lambda (c) (unless (eq (car c) 'undefined) - (vector (caddr c) (car c) :enable t))) + (vector (caddr c) (car c) :active t))) gnus-mime-security-button-commands)))) (defun gnus-mime-security-button-menu (event prefix) @@ -7694,6 +7980,9 @@ ;; Exclude a newline. (1- (point)) (point))) + (when gnus-article-button-face + (gnus-overlay-put (gnus-make-overlay b e) + 'face gnus-article-button-face)) (widget-convert-button 'link b e :mime-handle handle Index: gnus/lisp/gnus-async.el diff -u gnus/lisp/gnus-async.el:7.9 gnus/lisp/gnus-async.el:7.11 --- gnus/lisp/gnus-async.el:7.9 Sun Apr 30 11:44:06 2006 +++ gnus/lisp/gnus-async.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-async.el --- asynchronous support for Gnus -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/gnus-audio.el diff -u gnus/lisp/gnus-audio.el:7.5 gnus/lisp/gnus-audio.el:7.7 --- gnus/lisp/gnus-audio.el:7.5 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-audio.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-audio.el --- Sound effects for Gnus -;; Copyright (C) 1996, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1996, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Steven L. Baur ;; Keywords: news, mail, multimedia Index: gnus/lisp/gnus-bcklg.el diff -u gnus/lisp/gnus-bcklg.el:7.5 gnus/lisp/gnus-bcklg.el:7.6 --- gnus/lisp/gnus-bcklg.el:7.5 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-bcklg.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-bcklg.el --- backlog functions for Gnus ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/gnus-cache.el diff -u gnus/lisp/gnus-cache.el:7.17 gnus/lisp/gnus-cache.el:7.19 --- gnus/lisp/gnus-cache.el:7.17 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-cache.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-cache.el --- cache interface for Gnus ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -847,16 +847,17 @@ (defun gnus-cache-total-fetched-for (group &optional no-inhibit) "Get total disk space used by the cache for the specified GROUP." - (unless gnus-cache-total-fetched-hashtb - (setq gnus-cache-total-fetched-hashtb (gnus-make-hashtable 1024))) - - (let* ((entry (gnus-gethash group gnus-cache-total-fetched-hashtb))) - (if entry - (apply '+ entry) - (let ((gnus-cache-inhibit-update-total-fetched-for (not no-inhibit))) - (+ - (gnus-cache-update-overview-total-fetched-for group nil) - (gnus-cache-update-file-total-fetched-for group nil)))))) + (unless (equal group "dummy.group") + (unless gnus-cache-total-fetched-hashtb + (setq gnus-cache-total-fetched-hashtb (gnus-make-hashtable 1024))) + + (let* ((entry (gnus-gethash group gnus-cache-total-fetched-hashtb))) + (if entry + (apply '+ entry) + (let ((gnus-cache-inhibit-update-total-fetched-for (not no-inhibit))) + (+ + (gnus-cache-update-overview-total-fetched-for group nil) + (gnus-cache-update-file-total-fetched-for group nil))))))) (provide 'gnus-cache) Index: gnus/lisp/gnus-cite.el diff -u gnus/lisp/gnus-cite.el:7.16 gnus/lisp/gnus-cite.el:7.34 --- gnus/lisp/gnus-cite.el:7.16 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-cite.el Tue Mar 13 05:57:59 2007 @@ -1,7 +1,7 @@ ;;; gnus-cite.el --- parse citations in articles for Gnus ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Per Abhiddenware @@ -27,6 +27,9 @@ ;;; Code: (eval-when-compile (require 'cl)) +(eval-when-compile + (when (featurep 'xemacs) + (require 'easy-mmode))) ; for `define-minor-mode' (require 'gnus) (require 'gnus-range) @@ -294,14 +297,28 @@ (defcustom gnus-cite-face-list '(gnus-cite-1 gnus-cite-2 gnus-cite-3 gnus-cite-4 gnus-cite-5 gnus-cite-6 - gnus-cite-7 gnus-cite-8 gnus-cite-9 gnus-cite-10 gnus-cite-11) + gnus-cite-7 gnus-cite-8 gnus-cite-9 gnus-cite-10 gnus-cite-11) "*List of faces used for highlighting citations. When there are citations from multiple articles in the same message, Gnus will try to give each citation from each article its own face. This should make it easier to see who wrote what." :group 'gnus-cite - :type '(repeat face)) + :type '(repeat face) + :set (lambda (symbol value) + (prog1 + (custom-set-default symbol value) + (if (boundp 'gnus-message-max-citation-depth) + (setq gnus-message-max-citation-depth (length value))) + (if (boundp 'gnus-message-citation-keywords) + (setq gnus-message-citation-keywords + `((gnus-message-search-citation-line + ,@(let ((list nil) + (count 1)) + (dolist (face value (nreverse list)) + (push (list count (list 'quote face) 'prepend t) + list) + (setq count (1+ count))))))))))) (defcustom gnus-cite-hide-percentage 50 "Only hide excess citation if above this percentage of the body." @@ -367,7 +384,7 @@ ;;; Commands: -(defun gnus-article-highlight-citation (&optional force) +(defun gnus-article-highlight-citation (&optional force same-buffer) "Highlight cited text. Each citation in the article will be highlighted with a different face. The faces are taken from `gnus-cite-face-list'. @@ -381,7 +398,8 @@ `gnus-cite-attribution-prefix' are considered attribution lines." (interactive (list 'force)) (save-excursion - (set-buffer gnus-article-buffer) + (unless same-buffer + (set-buffer gnus-article-buffer)) (gnus-cite-parse-maybe force) (let ((buffer-read-only nil) (alist gnus-cite-prefix-alist) @@ -803,13 +821,24 @@ (setq line (1+ line))) ;; Horrible special case for some Microsoft mailers. (goto-char (point-min)) - (when (re-search-forward gnus-cite-unsightly-citation-regexp max t) - (setq begin (count-lines (point-min) (point))) - (setq end (count-lines (point-min) max)) - (setq entry nil) - (while (< begin end) - (push begin entry) - (setq begin (1+ begin))) + (setq start t begin nil entry nil) + (while start + ;; Assume this search ends up at the beginning of a line. + (if (re-search-forward gnus-cite-unsightly-citation-regexp max t) + (progn + (when (number-or-marker-p start) + (setq begin (count-lines (point-min) start) + end (count-lines (point-min) (match-beginning 0)))) + (setq start (match-end 0))) + (when (number-or-marker-p start) + (setq begin (count-lines (point-min) start) + end (count-lines (point-min) max))) + (setq start nil)) + (when begin + (while (< begin end) + ;; Need to do 1+ because we're in the bol. + (push (setq begin (1+ begin)) entry)))) + (when entry (push (cons "" entry) alist)) ;; We got all the potential prefixes. Now create ;; `gnus-cite-prefix-alist' containing the oldest prefix for each @@ -1099,6 +1128,108 @@ prefix) (setq found t))) found))) + + +;; Highlighting of different citation levels in message-mode. +;; - message-cite-prefix will be overridden if this is enabled. + +(defvar gnus-message-max-citation-depth + (length gnus-cite-face-list) + "Maximum supported level of citation.") + +(defvar gnus-message-cite-prefix-regexp + (concat "^\\(?:" message-cite-prefix-regexp "\\)")) + +(defun gnus-message-search-citation-line (limit) + "Search for a cited line and set match data accordingly. +Returns nil if there is no such line before LIMIT, t otherwise." + (when (re-search-forward gnus-message-cite-prefix-regexp limit t) + (let ((cdepth (min (length (apply 'concat + (split-string + (match-string-no-properties 0) + "[ \t [:alnum:]]+"))) + gnus-message-max-citation-depth)) + (mlist (make-list (* (1+ gnus-message-max-citation-depth) 2) nil)) + (start (point-at-bol)) + (end (point-at-eol))) + (setcar mlist start) + (setcar (cdr mlist) end) + (setcar (nthcdr (* cdepth 2) mlist) start) + (setcar (nthcdr (1+ (* cdepth 2)) mlist) end) + (set-match-data mlist)) + t)) + +(defvar gnus-message-citation-keywords + ;; eval-when-compile ;; This breaks in XEmacs + `((gnus-message-search-citation-line + ,@(let ((list nil) + (count 1)) + ;; (require 'gnus-cite) + (dolist (face gnus-cite-face-list (nreverse list)) + (push (list count (list 'quote face) 'prepend t) list) + (setq count (1+ count)))))) ;; + "Keywords for highlighting different levels of message citations.") + +(eval-when-compile + (defvar font-lock-defaults-computed) + (defvar font-lock-keywords) + (defvar font-lock-set-defaults)) + +(eval-and-compile + (unless (featurep 'xemacs) + (autoload 'font-lock-set-defaults "font-lock"))) + +(define-minor-mode gnus-message-citation-mode + "Toggle `gnus-message-citation-mode' in current buffer. +This buffer local minor mode provides additional font-lock support for +nested citations. +With prefix ARG, turn `gnus-message-citation-mode' on if and only if ARG +is positive. +Automatically turn `font-lock-mode' on when `gnus-message-citation-mode' +is turned on." + nil ;; init-value + "" ;; lighter + nil ;; keymap + (when (eq major-mode 'message-mode) + (let ((defaults (car (if (featurep 'xemacs) + (get 'message-mode 'font-lock-defaults) + font-lock-defaults))) + default keywords) + (while defaults + (setq default (if (consp defaults) + (pop defaults) + (prog1 + defaults + (setq defaults nil)))) + (if gnus-message-citation-mode + ;; `gnus-message-citation-keywords' should be the last + ;; elements of the keywords because the others are unlikely + ;; to have the OVERRIDE flags -- XEmacs applies a keyword + ;; having no OVERRIDE flag to matched text even if it has + ;; already other faces, while Emacs doesn't. + (set (make-local-variable default) + (append (default-value default) + gnus-message-citation-keywords)) + (kill-local-variable default)))) + ;; Force `font-lock-set-defaults' to update `font-lock-keywords'. + (if (featurep 'xemacs) + (progn + (require 'font-lock) + (setq font-lock-defaults-computed nil + font-lock-keywords nil)) + (setq font-lock-set-defaults nil)) + (font-lock-set-defaults) + (cond ((symbol-value 'font-lock-mode) + (font-lock-fontify-buffer)) + (gnus-message-citation-mode + (font-lock-mode 1))))) + +(defun turn-on-gnus-message-citation-mode () + "Turn on `gnus-message-citation-mode'." + (gnus-message-citation-mode 1)) +(defun turn-off-gnus-message-citation-mode () + "Turn off `gnus-message-citation-mode'." + (gnus-message-citation-mode -1)) (gnus-ems-redefine) Index: gnus/lisp/gnus-cus.el diff -u gnus/lisp/gnus-cus.el:7.14 gnus/lisp/gnus-cus.el:7.15 --- gnus/lisp/gnus-cus.el:7.14 Fri Feb 17 01:25:20 2006 +++ gnus/lisp/gnus-cus.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-cus.el --- customization commands for Gnus ;; Copyright (C) 1996, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Per Abrahamsen ;; Keywords: news Index: gnus/lisp/gnus-delay.el diff -u gnus/lisp/gnus-delay.el:7.11 gnus/lisp/gnus-delay.el:7.12 --- gnus/lisp/gnus-delay.el:7.11 Wed Jan 25 07:24:38 2006 +++ gnus/lisp/gnus-delay.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,6 @@ ;;; gnus-delay.el --- Delayed posting of articles -;; Copyright (C) 2001, 2002, 2003, 2004, 2005, -;; 2006 Free Software Foundation, Inc. +;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Kai Großjohann ;; Keywords: mail, news, extensions Index: gnus/lisp/gnus-demon.el diff -u gnus/lisp/gnus-demon.el:7.9 gnus/lisp/gnus-demon.el:7.13 --- gnus/lisp/gnus-demon.el:7.9 Sun Apr 30 11:44:06 2006 +++ gnus/lisp/gnus-demon.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-demon.el --- daemonic Gnus behaviour -;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -214,7 +214,7 @@ (< idle gnus-demon-idle-time)) ; Idle timed out. (t (< 0 gnus-demon-idle-time)))) ; Or just need to be idle. ;; So we call the handler. - (progn + (gnus-with-local-quit (ignore-errors (funcall (car handler))) ;; And reset the timer. (setcar (nthcdr 1 handler) @@ -228,14 +228,15 @@ (gnus-demon-is-idle-p)) ;; We want to call this handler each and every time that ;; Emacs is idle. - (ignore-errors (funcall (car handler)))) + (gnus-with-local-quit + (ignore-errors (funcall (car handler))))) (t ;; We want to call this handler only if Emacs has been idle ;; for a specified number of timesteps. (and (not (memq (car handler) gnus-demon-idle-has-been-called)) (< idle gnus-demon-idle-time) (gnus-demon-is-idle-p) - (progn + (gnus-with-local-quit (ignore-errors (funcall (car handler))) ;; Make sure the handler won't be called once more in ;; this idle-cycle. Index: gnus/lisp/gnus-diary.el diff -u gnus/lisp/gnus-diary.el:7.10 gnus/lisp/gnus-diary.el:7.14 --- gnus/lisp/gnus-diary.el:7.10 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-diary.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-diary.el --- Wrapper around the NNDiary Gnus back end -;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -;; Copyright (C) 1999, 2000, 2001 Didier Verna. +;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, +;; 2006, 2007 Free Software Foundation, Inc. ;; Author: Didier Verna ;; Maintainer: Didier Verna @@ -66,7 +66,7 @@ (defcustom gnus-diary-delay-format-function 'gnus-diary-delay-format-english "*Function called to format a diary delay string. -It is passed two arguments. The first one is non nil if the delay is in +It is passed two arguments. The first one is non-nil if the delay is in the past. The second one is of the form ((NUM . UNIT) ...) where NUM is an integer and UNIT is one of 'year 'month 'week 'day 'hour or 'minute. It should return strings like \"In 2 months, 3 weeks\", \"3 hours, @@ -158,6 +158,7 @@ ;; #### NOTE: Gnus sometimes gives me a HEADER not corresponding to any ;; message, with all fields set to nil here. I don't know what it is for, and ;; I just ignore it. +;;;###autoload (defun gnus-user-format-function-d (header) ;; Returns an aproximative delay string for the next occurence of this ;; message. The delay is given only in the first non zero unit. @@ -194,6 +195,7 @@ ;; #### NOTE: Gnus sometimes gives me a HEADER not corresponding to any ;; message, with all fields set to nil here. I don't know what it is for, and ;; I just ignore it. +;;;###autoload (defun gnus-user-format-function-D (header) ;; Returns a formatted time string for the next occurence of this message. (let* ((extras (mail-header-extra header)) Index: gnus/lisp/gnus-dired.el diff -u gnus/lisp/gnus-dired.el:7.6 gnus/lisp/gnus-dired.el:7.7 --- gnus/lisp/gnus-dired.el:7.6 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-dired.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-dired.el --- utility functions where gnus and dired meet ;; Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Authors: Benjamin Rutt , ;; Shenghuo Zhu Index: gnus/lisp/gnus-draft.el diff -u gnus/lisp/gnus-draft.el:7.12 gnus/lisp/gnus-draft.el:7.16 --- gnus/lisp/gnus-draft.el:7.12 Thu Mar 2 07:02:36 2006 +++ gnus/lisp/gnus-draft.el Sat Mar 24 20:50:00 2007 @@ -1,7 +1,7 @@ ;;; gnus-draft.el --- draft message support for Gnus ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -76,7 +76,6 @@ (when (gnus-visual-p 'draft-menu 'menu) (gnus-draft-make-menu-bar)) (add-minor-mode 'gnus-draft-mode " Draft" gnus-draft-mode-map) - (mml-mode) (gnus-run-hooks 'gnus-draft-mode-hook)))) ;;; Commands @@ -106,7 +105,9 @@ (save-restriction (message-narrow-to-headers) (message-remove-header "date"))) - (save-buffer) + (let ((message-draft-headers + (delq 'Date (copy-sequence message-draft-headers)))) + (save-buffer)) (let ((gnus-verbose-backends nil)) (gnus-request-expire-articles (list article) group t)) (push @@ -239,6 +240,12 @@ (throw 'continue t) (error "Stop!")))))))) +(defcustom gnus-draft-setup-hook nil + "Hook run after setting up a draft buffer." + :group 'gnus-message + :version "23.0" ;; No Gnus + :type 'hook) + ;;; Utility functions ;;;!!!If this is byte-compiled, it fails miserably. @@ -286,7 +293,8 @@ (gnus-add-mark ,(car ga) 'replied ,article) (gnus-request-set-mark ,(car ga) (list (list (list ,article) 'add '(reply))))) - 'send))))))) + 'send)))) + (run-hooks 'gnus-draft-setup-hook)))) (defun gnus-draft-article-sendable-p (article) "Say whether ARTICLE is sendable." Index: gnus/lisp/gnus-dup.el diff -u gnus/lisp/gnus-dup.el:7.7 gnus/lisp/gnus-dup.el:7.9 --- gnus/lisp/gnus-dup.el:7.7 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-dup.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-dup.el --- suppression of duplicate articles in Gnus -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/gnus-eform.el diff -u gnus/lisp/gnus-eform.el:7.7 gnus/lisp/gnus-eform.el:7.8 --- gnus/lisp/gnus-eform.el:7.7 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-eform.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-eform.el --- a mode for editing forms for Gnus ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/gnus-ems.el diff -u gnus/lisp/gnus-ems.el:7.14 gnus/lisp/gnus-ems.el:7.16 --- gnus/lisp/gnus-ems.el:7.14 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-ems.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-ems.el --- functions for making Gnus work under different Emacsen ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -203,7 +203,10 @@ (defun gnus-image-type-available-p (type) (and (fboundp 'image-type-available-p) - (image-type-available-p type))) + (image-type-available-p type) + (if (fboundp 'display-images-p) + (display-images-p) + t))) (defun gnus-create-image (file &optional type data-p &rest props) (let ((face (plist-get props :face))) Index: gnus/lisp/gnus-fun.el diff -u gnus/lisp/gnus-fun.el:7.16 gnus/lisp/gnus-fun.el:7.17 --- gnus/lisp/gnus-fun.el:7.16 Sun Apr 16 09:30:34 2006 +++ gnus/lisp/gnus-fun.el Wed Jan 24 08:15:37 2007 @@ -1,6 +1,6 @@ ;;; gnus-fun.el --- various frivolous extension functions to Gnus -;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/gnus-group.el diff -u gnus/lisp/gnus-group.el:7.85 gnus/lisp/gnus-group.el:7.92 --- gnus/lisp/gnus-group.el:7.85 Tue Apr 18 02:57:20 2006 +++ gnus/lisp/gnus-group.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-group.el --- group mode commands for Gnus ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -135,7 +135,7 @@ `gnus-group-sort-by-score', `gnus-group-sort-by-method', `gnus-group-sort-by-server', and `gnus-group-sort-by-rank'. -This variable can also be a list of sorting functions. In that case, +This variable can also be a list of sorting functions. In that case, the most significant sort function should be the last function in the list." :group 'gnus-group-listing @@ -197,7 +197,7 @@ Note that this format specification is not always respected. For reasons of efficiency, when listing killed groups, this specification -is ignored altogether. If the spec is changed considerably, your +is ignored altogether. If the spec is changed considerably, your output may end up looking strange when listing both alive and killed groups. @@ -1034,9 +1034,11 @@ '((gnus-group-post-news "mail/compose") ;; Some useful agent icons? I don't use the agent so agent users should ;; suggest useful commands: - (gnus-agent-toggle-plugged "connect" t - :visible (and gnus-agent (not gnus-plugged))) (gnus-agent-toggle-plugged "disconnect" t + :help "Gnus is currently unplugged. Click to work online." + :visible (and gnus-agent (not gnus-plugged))) + (gnus-agent-toggle-plugged "connect" t + :help "Gnus is currently plugged. Click to work offline." :visible (and gnus-agent gnus-plugged)) ;; FIXME: gnus-agent-toggle-plugged (in gnus-agent-group-make-menu-bar) ;; should have a better help text. @@ -1131,7 +1133,7 @@ All normal editing commands are switched off. \\ -The group buffer lists (some of) the groups available. For instance, +The group buffer lists (some of) the groups available. For instance, `\\[gnus-group-list-groups]' will list all subscribed groups with unread articles, while `\\[gnus-group-list-zombies]' lists all zombie groups. @@ -2028,7 +2030,7 @@ If the prefix argument ALL is non-nil, already read articles become readable. IF ALL is a number, fetch this number of articles. If the optional argument NO-ARTICLE is non-nil, no article will be -auto-selected upon group entry. If GROUP is non-nil, fetch that +auto-selected upon group entry. If GROUP is non-nil, fetch that group." (interactive "P") (let ((no-display (eq all 0)) @@ -2069,11 +2071,11 @@ (forward-line -1)) (gnus-group-read-group all t)) -(defun gnus-group-quick-select-group (&optional all) - "Select the current group \"quickly\". -This means that no highlighting or scoring will be performed. -If ALL (the prefix argument) is 0, don't even generate the summary -buffer. +(defun gnus-group-quick-select-group (&optional all group) + "Select the GROUP \"quickly\". +This means that no highlighting or scoring will be performed. If +ALL (the prefix argument) is 0, don't even generate the summary +buffer. If GROUP is nil, use current group. This might be useful if you want to toggle threading before entering the group." @@ -2084,7 +2086,7 @@ gnus-home-score-file gnus-apply-kill-hook gnus-summary-expunge-below) - (gnus-group-read-group all t))) + (gnus-group-read-group all t group))) (defun gnus-group-visible-select-group (&optional all) "Select the current group without hiding any articles." @@ -2124,13 +2126,14 @@ ;;;###autoload (defun gnus-fetch-group (group &optional articles) "Start Gnus if necessary and enter GROUP. +If ARTICLES, display those articles. Returns whether the fetching was successful or not." (interactive (list (completing-read "Group name: " gnus-active-hashtb nil nil nil nil (group-name-at-point)))) (unless (get-buffer gnus-group-buffer) (gnus-no-server)) - (gnus-group-read-group articles nil group)) + (gnus-group-read-group (if articles nil t) nil group articles)) ;;;###autoload (defun gnus-fetch-group-other-frame (group) @@ -2752,13 +2755,18 @@ (t (setq err (format "%c unknown. " char)) nil)))) (setq type found))) - (let* ((file (expand-file-name file)) - (name (gnus-generate-new-group-name - (gnus-group-prefixed-name - (file-name-nondirectory file) '(nndoc ""))))) + (setq file (expand-file-name file)) + (let ((name (gnus-generate-new-group-name + (gnus-group-prefixed-name + (file-name-nondirectory file) '(nndoc "")))) + (encodable (mm-coding-system-p 'utf-8))) (gnus-group-make-group - (gnus-group-real-name name) - (list 'nndoc file + (if encodable + (mm-encode-coding-string (gnus-group-real-name name) 'utf-8) + (gnus-group-real-name name)) + (list 'nndoc (if encodable + (mm-encode-coding-string file 'utf-8) + file) (list 'nndoc-address file) (list 'nndoc-article-type (or type 'guess)))))) @@ -2892,7 +2900,7 @@ (defun gnus-group-make-directory-group (dir) "Create an nndir group. The user will be prompted for a directory. The contents of this -directory will be used as a newsgroup. The directory should contain +directory will be used as a newsgroup. The directory should contain mail messages or news articles in files that have numeric names." (interactive (list (read-file-name "Create group from directory: "))) @@ -3227,7 +3235,7 @@ (defun gnus-group-sort-by-unread (info1 info2) "Sort by number of unread articles." (let ((n1 (gnus-group-unread (gnus-info-group info1))) - (n2 (gnus-group-unread (gnus-info-group info1)))) + (n2 (gnus-group-unread (gnus-info-group info2)))) (< (or (and (numberp n1) n1) 0) (or (and (numberp n2) n2) 0)))) @@ -3564,7 +3572,7 @@ (defun gnus-group-transpose-groups (n) "Move the current newsgroup up N places. -If given a negative prefix, move down instead. The difference between +If given a negative prefix, move down instead. The difference between N and the number of steps taken is returned." (interactive "p") (unless (gnus-group-group-name) @@ -4277,7 +4285,7 @@ (unless entry (error "Trying to change non-existent group %s" method-only-group)) ;; We have received parts of the actual group info - either the - ;; select method or the group parameters. We first check + ;; select method or the group parameters. We first check ;; whether we have to extend the info, and if so, do that. (let ((len (length info)) (total (if (eq part 'method) 5 6))) Index: gnus/lisp/gnus-int.el diff -u gnus/lisp/gnus-int.el:7.21 gnus/lisp/gnus-int.el:7.23 --- gnus/lisp/gnus-int.el:7.21 Fri Feb 24 21:49:02 2006 +++ gnus/lisp/gnus-int.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-int.el --- backend interface functions for Gnus ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -209,11 +209,12 @@ "Open a connection to GNUS-COMMAND-METHOD." (when (stringp gnus-command-method) (setq gnus-command-method (gnus-server-to-method gnus-command-method))) - (let ((elem (assoc gnus-command-method gnus-opened-servers))) + (let ((elem (assoc gnus-command-method gnus-opened-servers)) + (server (gnus-method-to-server-name gnus-command-method))) ;; If this method was previously denied, we just return nil. (if (eq (nth 1 elem) 'denied) (progn - (gnus-message 1 "Denied server") + (gnus-message 1 "Denied server %s" server) nil) ;; Open the server. (let* ((open-server-function (gnus-get-function gnus-command-method 'open-server)) @@ -224,11 +225,11 @@ (nthcdr 2 gnus-command-method)) (error (gnus-message 1 (format - "Unable to open server due to: %s" - (error-message-string err))) + "Unable to open server %s due to: %s" + server (error-message-string err))) nil) (quit - (gnus-message 1 "Quit trying to open server") + (gnus-message 1 "Quit trying to open server %s" server) nil))) open-offline) ;; If this hasn't been opened before, we add it to the list. @@ -253,9 +254,9 @@ ((and (not gnus-batch-mode) (gnus-y-or-n-p - (format "Unable to open %s:%s, go offline? " - (car gnus-command-method) - (cadr gnus-command-method)))) + (format + "Unable to open server %s, go offline? " + server))) (setq open-offline t) 'offline) (t Index: gnus/lisp/gnus-kill.el diff -u gnus/lisp/gnus-kill.el:7.8 gnus/lisp/gnus-kill.el:7.10 --- gnus/lisp/gnus-kill.el:7.8 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-kill.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-kill.el --- kill commands for Gnus -;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Lars Magne Ingebrigtsen Index: gnus/lisp/gnus-logic.el diff -u gnus/lisp/gnus-logic.el:7.5 gnus/lisp/gnus-logic.el:7.6 --- gnus/lisp/gnus-logic.el:7.5 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-logic.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-logic.el --- advanced scoring code for Gnus ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/gnus-mh.el diff -u gnus/lisp/gnus-mh.el:7.5 gnus/lisp/gnus-mh.el:7.7 --- gnus/lisp/gnus-mh.el:7.5 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-mh.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-mh.el --- mh-e interface for Gnus -;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Lars Magne Ingebrigtsen Index: gnus/lisp/gnus-ml.el diff -u gnus/lisp/gnus-ml.el:7.7 gnus/lisp/gnus-ml.el:7.10 --- gnus/lisp/gnus-ml.el:7.7 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-ml.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-ml.el --- Mailing list minor mode for Gnus ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Julien Gilles ;; Keywords: news, mail @@ -51,8 +51,7 @@ "\C-c\C-nu" gnus-mailing-list-unsubscribe "\C-c\C-np" gnus-mailing-list-post "\C-c\C-no" gnus-mailing-list-owner - "\C-c\C-na" gnus-mailing-list-archive - )) + "\C-c\C-na" gnus-mailing-list-archive)) (defun gnus-mailing-list-make-menu-bar () (unless (boundp 'gnus-mailing-list-menu) @@ -103,7 +102,8 @@ ;; Set up the menu. (when (gnus-visual-p 'mailing-list-menu 'menu) (gnus-mailing-list-make-menu-bar)) - (add-minor-mode 'gnus-mailing-list-mode " Mailing-List" gnus-mailing-list-mode-map) + (add-minor-mode 'gnus-mailing-list-mode " Mailing-List" + gnus-mailing-list-mode-map) (gnus-run-hooks 'gnus-mailing-list-mode-hook)))) ;;; Commands @@ -118,7 +118,7 @@ (t (gnus-message 1 "no list-help in this group"))))) (defun gnus-mailing-list-subscribe () - "Subscribe." + "Subscribe to mailing list." (interactive) (let ((list-subscribe (with-current-buffer gnus-original-article-buffer @@ -127,7 +127,7 @@ (t (gnus-message 1 "no list-subscribe in this group"))))) (defun gnus-mailing-list-unsubscribe () - "Unsubscribe." + "Unsubscribe from mailing list." (interactive) (let ((list-unsubscribe (with-current-buffer gnus-original-article-buffer @@ -145,7 +145,7 @@ (t (gnus-message 1 "no list-post in this group"))))) (defun gnus-mailing-list-owner () - "Mail to the owner." + "Mail to the mailing list owner." (interactive) (let ((list-owner (with-current-buffer gnus-original-article-buffer @@ -169,33 +169,14 @@ ;;; Utility functions (defun gnus-mailing-list-message (address) - "" - (let ((mailto "") - (to ()) - (subject "None") - (body "") - ) - (cond - ((string-match "]*\\)>" address) - (let ((args (match-string 1 address))) - (cond ; with param - ((string-match "\\(.*\\)\\?\\(.*\\)" args) - (setq mailto (match-string 1 args)) - (let ((param (match-string 2 args))) - (if (string-match "subject=\\([^&]*\\)" param) - (setq subject (match-string 1 param))) - (if (string-match "body=\\([^&]*\\)" param) - (setq body (match-string 1 param))) - (if (string-match "to=\\([^&]*\\)" param) - (push (match-string 1 param) to)) - )) - (t (setq mailto args))))) ; without param - - ; other case ]*\\)>" address) + (require 'gnus-art) + (gnus-url-mailto (match-string 1 address))) + ;; other case to be done. + (t nil))) (provide 'gnus-ml) Index: gnus/lisp/gnus-mlspl.el diff -u gnus/lisp/gnus-mlspl.el:7.7 gnus/lisp/gnus-mlspl.el:7.8 --- gnus/lisp/gnus-mlspl.el:7.7 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-mlspl.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-mlspl.el --- a group params-based mail splitting mechanism ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Alexandre Oliva ;; Keywords: news, mail Index: gnus/lisp/gnus-move.el diff -u gnus/lisp/gnus-move.el:7.7 gnus/lisp/gnus-move.el:7.9 --- gnus/lisp/gnus-move.el:7.7 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-move.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-move.el --- commands for moving Gnus from one server to another -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/gnus-msg.el diff -u gnus/lisp/gnus-msg.el:7.41 gnus/lisp/gnus-msg.el:7.54 --- gnus/lisp/gnus-msg.el:7.41 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-msg.el Mon Apr 23 14:21:30 2007 @@ -1,7 +1,7 @@ ;;; gnus-msg.el --- mail and post interface for Gnus ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Lars Magne Ingebrigtsen @@ -289,6 +289,16 @@ :group 'gnus-message :type 'boolean) +(defcustom gnus-message-highlight-citation + t ;; gnus-treat-highlight-citation ;; gnus-cite dependency + "Enable highlighting of different citation levels in message-mode." + :version "23.0" ;; No Gnus + :group 'gnus-cite + :group 'gnus-message + :type 'boolean) + +(autoload 'gnus-message-citation-mode "gnus-cite" nil t) + ;;; Internal variables. (defvar gnus-inhibit-posting-styles nil @@ -390,6 +400,13 @@ (setq mml-buffer-list nil) (add-hook 'message-header-setup-hook 'gnus-inews-insert-gcc) (add-hook 'message-header-setup-hook 'gnus-inews-insert-archive-gcc) + ;; message-newsreader and message-mailer were formerly set in + ;; gnus-inews-add-send-actions, but this is too late when + ;; message-generate-headers-first is used. --ansel + (add-hook 'message-mode-hook + (lambda nil + (setq message-newsreader + (setq message-mailer (gnus-extended-version))))) ;; #### FIXME: for a reason that I did not manage to identify yet, ;; the variable `gnus-newsgroup-name' does not honor a dynamically ;; scoped or setq'ed value from a caller like `C-u gnus-summary-mail'. @@ -422,6 +439,9 @@ (set (make-local-variable 'gnus-message-group-art) (cons ,group ,article)) (set (make-local-variable 'gnus-newsgroup-name) ,group) + ;; Enable highlighting of different citation levels + (when gnus-message-highlight-citation + (gnus-message-citation-mode 1)) (gnus-run-hooks 'gnus-message-setup-hook) (if (eq major-mode 'message-mode) (let ((mbl1 mml-buffer-list)) @@ -519,7 +539,6 @@ (setq message-post-method `(lambda (&optional arg) (gnus-post-method arg ,gnus-newsgroup-name))) - (setq message-newsreader (setq message-mailer (gnus-extended-version))) (message-add-action `(when (gnus-buffer-exists-p ,buffer) (set-window-configuration ,winconf)) @@ -770,6 +789,7 @@ (nnheader-narrow-to-headers) (nnheader-parse-naked-head))))) (message-yank-original) + (message-exchange-point-and-mark) (setq beg (or beg (mark t)))) (when articles (insert "\n"))) @@ -811,7 +831,10 @@ (set-buffer ,gnus-summary-buffer) (gnus-cache-possibly-remove-article ,article nil nil nil t) (gnus-summary-mark-as-read ,article gnus-canceled-mark))))) - message-send-actions)))) + message-send-actions) + ;; Add Gcc header. + (gnus-inews-insert-archive-gcc) + (gnus-inews-insert-gcc)))) @@ -1274,10 +1297,13 @@ (message-narrow-to-head-1) ;; Gnus will generate a new one when sending. (message-remove-header "Message-ID") - (message-remove-header message-ignored-resent-headers t) ;; Remove unwanted headers. + (message-remove-header message-ignored-resent-headers t) (goto-char (point-max)) (insert mail-header-separator) + ;; Add Gcc header. + (gnus-inews-insert-archive-gcc) + (gnus-inews-insert-gcc) (goto-char (point-min)) (when (re-search-forward "^To:\\|^Newsgroups:" nil 'move) (forward-char 1)) @@ -1549,15 +1575,29 @@ this is a reply." (interactive "P") (gnus-summary-select-article t) - (set-buffer gnus-original-article-buffer) - (gnus-setup-message 'compose-bounce - (let* ((references (mail-fetch-field "references")) - (parent (and references (gnus-parent-id references)))) + (let (summary-buffer parent) + (if fetch + (progn + (setq summary-buffer (current-buffer)) + (set-buffer gnus-original-article-buffer) + (article-goto-body) + (when (re-search-forward "^References:\n?" nil t) + (while (memq (char-after) '(?\t ? )) + (forward-line 1)) + (skip-chars-backward "\t\n ") + (setq parent + (gnus-parent-id (buffer-substring (match-end 0) (point)))))) + (set-buffer gnus-original-article-buffer)) + (gnus-setup-message 'compose-bounce (message-bounce) + ;; Add Gcc header. + (gnus-inews-insert-archive-gcc) + (gnus-inews-insert-gcc) ;; If there are references, we fetch the article we answered to. - (and fetch parent - (gnus-summary-refer-article parent) - (gnus-summary-show-all-headers))))) + (when parent + (with-current-buffer summary-buffer + (gnus-summary-refer-article parent) + (gnus-summary-show-all-headers)))))) ;;; Gcc handling. @@ -1866,6 +1906,13 @@ ((eq element 'x-face-file) (setq element 'x-face filep t))) + ;; Post-processing for the signature posting-style: + (and (eq element 'signature) filep + message-signature-directory + ;; don't actually use the signature directory + ;; if message-signature-file contains a path. + (not (file-name-directory v)) + (setq v (nnheader-concat message-signature-directory v))) ;; Get the contents of file elems. (when (and filep v) (setq v (with-temp-buffer Index: gnus/lisp/gnus-nocem.el diff -u gnus/lisp/gnus-nocem.el:7.9 gnus/lisp/gnus-nocem.el:7.11 --- gnus/lisp/gnus-nocem.el:7.9 Fri Mar 10 10:48:31 2006 +++ gnus/lisp/gnus-nocem.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-nocem.el --- NoCeM pseudo-cancellation treatment -;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/gnus-picon.el diff -u gnus/lisp/gnus-picon.el:7.10 gnus/lisp/gnus-picon.el:7.11 --- gnus/lisp/gnus-picon.el:7.10 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-picon.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-picon.el --- displaying pretty icons in Gnus ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news xpm annotation glyph faces Index: gnus/lisp/gnus-range.el diff -u gnus/lisp/gnus-range.el:7.8 gnus/lisp/gnus-range.el:7.9 --- gnus/lisp/gnus-range.el:7.8 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-range.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-range.el --- range and sequence functions for Gnus ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/gnus-registry.el diff -u gnus/lisp/gnus-registry.el:7.29 gnus/lisp/gnus-registry.el:7.36 --- gnus/lisp/gnus-registry.el:7.29 Tue Apr 18 23:06:28 2006 +++ gnus/lisp/gnus-registry.el Sat Mar 31 15:59:41 2007 @@ -1,7 +1,7 @@ ;;; gnus-registry.el --- article registry for Gnus ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Ted Zlatanov ;; Keywords: news @@ -77,8 +77,11 @@ "*The article registry by Message ID.") (defcustom gnus-registry-unfollowed-groups '("delayed" "drafts" "queue") - "List of groups that gnus-registry-split-fancy-with-parent won't follow. -The group names are matched, they don't have to be fully qualified." + "List of groups that gnus-registry-split-fancy-with-parent won't return. +The group names are matched, they don't have to be fully +qualified. This parameter tells the Registry 'never split a +message into a group that matches one of these, regardless of +references.'" :group 'gnus-registry :type '(repeat string)) @@ -153,6 +156,8 @@ (gnus-load file) (gnus-message 5 "Reading %s...done" file)))) +;; FIXME: Get rid of duplicated code, cf. `gnus-save-newsrc-file' in +;; `gnus-start.el'. --rsteib (defun gnus-registry-cache-save () "Save the registry cache file." (interactive) @@ -171,7 +176,6 @@ (standard-output (current-buffer))) (gnus-gnus-to-quick-newsrc-format t "gnus registry startup file" 'gnus-registry-alist) (gnus-registry-cache-whitespace file) - (set-text-properties (point-min) (point-max) nil) (save-buffer)) (let ((coding-system-for-write gnus-ding-file-coding-system) (version-control gnus-backup-startup-file) @@ -242,10 +246,12 @@ ;; remove empty entries (when gnus-registry-clean-empty (gnus-registry-clean-empty-function)) - ;; now trim the registry appropriately - (setq gnus-registry-alist (gnus-registry-trim - (gnus-hashtable-to-alist - gnus-registry-hashtb))) + ;; now trim and clean text properties from the registry appropriately + (setq gnus-registry-alist + (gnus-registry-remove-alist-text-properties + (gnus-registry-trim + (gnus-hashtable-to-alist + gnus-registry-hashtb)))) ;; really save (gnus-registry-cache-save) (setq gnus-registry-entry-caching caching) @@ -260,7 +266,7 @@ (when (stringp key) (dolist (group (gnus-registry-fetch-groups key)) (when (gnus-parameter-registry-ignore group) - (gnus-message + (gnus-message 10 "gnus-registry: deleted ignored group %s from key %s" group key) @@ -273,8 +279,7 @@ (gnus-registry-fetch-group key) ;; TODO: look for specific extra data here! ;; in this example, we look for 'label - (gnus-registry-fetch-extra key 'label) - (stringp key)) + (gnus-registry-fetch-extra key 'label)) (incf count) (gnus-registry-delete-id key)) @@ -293,6 +298,17 @@ (setq gnus-registry-hashtb (gnus-alist-to-hashtable gnus-registry-alist)) (setq gnus-registry-dirty nil)) +(defun gnus-registry-remove-alist-text-properties (v) + "Remove text properties from all strings in alist." + (if (stringp v) + (gnus-string-remove-all-properties v) + (if (and (listp v) (listp (cdr v))) + (mapcar 'gnus-registry-remove-alist-text-properties v) + (if (and (listp v) (stringp (cdr v))) + (cons (gnus-registry-remove-alist-text-properties (car v)) + (gnus-registry-remove-alist-text-properties (cdr v))) + v)))) + (defun gnus-registry-trim (alist) "Trim alist to size, using gnus-registry-max-entries. Also, drop all gnus-registry-ignored-groups matches." @@ -313,7 +329,7 @@ (setq alist (nthcdr trim-length - (sort alist + (sort alist (lambda (a b) (time-less-p (or (cdr (gethash (car a) timehash)) '(0 0 0)) @@ -321,9 +337,10 @@ (defun gnus-registry-action (action data-header from &optional to method) (let* ((id (mail-header-id data-header)) - (subject (gnus-registry-simplify-subject - (mail-header-subject data-header))) - (sender (mail-header-from data-header)) + (subject (gnus-string-remove-all-properties + (gnus-registry-simplify-subject + (mail-header-subject data-header)))) + (sender (gnus-string-remove-all-properties (mail-header-from data-header))) (from (gnus-group-guess-full-name-from-command-method from)) (to (if to (gnus-group-guess-full-name-from-command-method to) nil)) (to-name (if to to "the Bit Bucket")) @@ -364,8 +381,11 @@ messages. For a message to be split, it looks for the parent message in the -References or In-Reply-To header and then looks in the registry to -see which group that message was put in. This group is returned. +References or In-Reply-To header and then looks in the registry +to see which group that message was put in. This group is +returned, unless it matches one of the entries in +gnus-registry-unfollowed-groups or +nnmail-split-fancy-with-parent-ignore-groups. See the Info node `(gnus)Fancy Mail Splitting' for more details." (let* ((refstr (or (message-fetch-field "references") "")) ; guarantee string @@ -395,9 +415,10 @@ references)) ;; else: there were no references, now try the extra tracking - (let ((sender (message-fetch-field "from")) - (subject (gnus-registry-simplify-subject - (message-fetch-field "subject"))) + (let ((sender (gnus-string-remove-all-properties(message-fetch-field "from"))) + (subject (gnus-string-remove-all-properties + (gnus-registry-simplify-subject + (message-fetch-field "subject")))) (single-match t)) (when (and single-match (gnus-registry-track-sender-p) @@ -479,6 +500,39 @@ (setq res nil)))) res)) +(defun gnus-registry-wash-for-keywords (&optional force) + (interactive) + (let ((id (gnus-registry-fetch-message-id-fast gnus-current-article)) + word words) + (if (or (not (gnus-registry-fetch-extra id 'keywords)) + force) + (save-excursion + (set-buffer gnus-article-buffer) + (article-goto-body) + (save-window-excursion + (save-restriction + (narrow-to-region (point) (point-max)) + (with-syntax-table gnus-adaptive-word-syntax-table + (while (re-search-forward "\\b\\w+\\b" nil t) + (setq word (gnus-registry-remove-alist-text-properties + (downcase (buffer-substring + (match-beginning 0) (match-end 0))))) + (if (> (length word) 3) + (push word words)))))) + (gnus-registry-store-extra-entry id 'keywords words))))) + +(defun gnus-registry-find-keywords (keyword) + (interactive "skeyword: ") + (let (articles) + (maphash + (lambda (key value) + (when (gnus-registry-grep-in-list + keyword + (cdr (gnus-registry-fetch-extra key 'keywords))) + (push key articles))) + gnus-registry-hashtb) + articles)) + (defun gnus-registry-register-message-ids () "Register the Message-ID of every article in the group" (unless (gnus-parameter-registry-ignore gnus-newsgroup-name) @@ -509,17 +563,19 @@ "Fetch the Subject quickly, using the internal gnus-data-list function" (if (and (numberp article) (assoc article (gnus-data-list nil))) - (gnus-registry-simplify-subject - (mail-header-subject (gnus-data-header - (assoc article (gnus-data-list nil))))) + (gnus-string-remove-all-properties + (gnus-registry-simplify-subject + (mail-header-subject (gnus-data-header + (assoc article (gnus-data-list nil)))))) nil)) (defun gnus-registry-fetch-sender-fast (article) "Fetch the Sender quickly, using the internal gnus-data-list function" (if (and (numberp article) (assoc article (gnus-data-list nil))) - (mail-header-from (gnus-data-header - (assoc article (gnus-data-list nil)))) + (gnus-string-remove-all-properties + (mail-header-from (gnus-data-header + (assoc article (gnus-data-list nil))))) nil)) (defun gnus-registry-grep-in-list (word list) @@ -591,8 +647,9 @@ (defun gnus-registry-store-extra-entry (id key value) "Put a specific entry in the extras field of the registry entry for id." (let* ((extra (gnus-registry-fetch-extra id)) - (alist (cons (cons key value) - (gnus-assq-delete-all key (gnus-registry-fetch-extra id))))) + (alist (gnus-registry-remove-alist-text-properties + (cons (cons key value) + (gnus-assq-delete-all key (gnus-registry-fetch-extra id)))))) (gnus-registry-store-extra id alist))) (defun gnus-registry-fetch-group (id) Index: gnus/lisp/gnus-salt.el diff -u gnus/lisp/gnus-salt.el:7.11 gnus/lisp/gnus-salt.el:7.12 --- gnus/lisp/gnus-salt.el:7.11 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-salt.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-salt.el --- alternate summary mode interfaces for Gnus ;; Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/gnus-score.el diff -u gnus/lisp/gnus-score.el:7.28 gnus/lisp/gnus-score.el:7.32 --- gnus/lisp/gnus-score.el:7.28 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-score.el Sat Mar 24 20:43:05 2007 @@ -1,7 +1,7 @@ ;;; gnus-score.el --- scoring code for Gnus ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Per Abrahamsen ;; Lars Magne Ingebrigtsen @@ -208,10 +208,10 @@ :type '(choice string (repeat (choice string (cons regexp (repeat file)) - (function :value fun))) + function)) (function-item gnus-hierarchial-home-score-file) (function-item gnus-current-home-score-file) - (function :value fun))) + function)) (defcustom gnus-home-adapt-file nil "Variable to control where new adaptive score entries are to go. @@ -221,8 +221,8 @@ :type '(choice string (repeat (choice string (cons regexp (repeat file)) - (function :value fun))) - (function :value fun))) + function)) + function)) (defcustom gnus-default-adaptive-score-alist `((gnus-kill-file-mark) @@ -422,6 +422,18 @@ :group 'gnus-score-various :type 'boolean) +(defcustom gnus-inhibit-slow-scoring nil + "Inhibit slow scoring, e.g. scoring on headers or body. + +If a regexp, scoring on headers or body is inhibited if the group +matches the regexp. If it is t, scoring on headers or body is +inhibited for all groups." + :group 'gnus-score-various + :version "23.0" ;; No Gnus + :type '(choice (const :tag "All" nil) + (const :tag "None" t) + regexp)) + ;; Internal variables. @@ -1541,8 +1553,21 @@ (length (gnus-score-get header score))) scores))) ;; Call the scoring function for this type of "header". - (when (setq new (funcall (nth 2 entry) scores header - now expire trace)) + (when (if (and gnus-inhibit-slow-scoring + (if (and (stringp gnus-inhibit-slow-scoring) + ;; Always true here? + ;; (stringp gnus-newsgroup-name) + (string-match gnus-inhibit-slow-scoring + gnus-newsgroup-name)) + t + nil) + (> 0 (nth 1 (assoc header gnus-header-index)))) + (progn + (gnus-message + 7 "Scoring on headers or body skipped.") + nil) + (setq new (funcall (nth 2 entry) scores header + now expire trace))) (push new news)))) (when (gnus-buffer-live-p gnus-summary-buffer) (let ((scored gnus-newsgroup-scored)) Index: gnus/lisp/gnus-setup.el diff -u gnus/lisp/gnus-setup.el:7.6 gnus/lisp/gnus-setup.el:7.7 --- gnus/lisp/gnus-setup.el:7.6 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-setup.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-setup.el --- Initialization & Setup for Gnus 5 ;; Copyright (C) 1995, 1996, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Steven L. Baur ;; Keywords: news Index: gnus/lisp/gnus-sieve.el diff -u gnus/lisp/gnus-sieve.el:7.7 gnus/lisp/gnus-sieve.el:7.8 --- gnus/lisp/gnus-sieve.el:7.7 Tue Apr 11 17:49:40 2006 +++ gnus/lisp/gnus-sieve.el Wed Jan 24 08:15:37 2007 @@ -1,6 +1,6 @@ ;;; gnus-sieve.el --- Utilities to manage sieve scripts for Gnus -;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: NAGY Andras , ;; Simon Josefsson Index: gnus/lisp/gnus-soup.el diff -u gnus/lisp/gnus-soup.el:7.7 gnus/lisp/gnus-soup.el:7.10 --- gnus/lisp/gnus-soup.el:7.7 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-soup.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-soup.el --- SOUP packet writing support for Gnus -;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Per Abrahamsen ;; Lars Magne Ingebrigtsen @@ -36,36 +36,64 @@ (require 'gnus-start) (require 'gnus-range) +(defgroup gnus-soup nil + "SOUP packet writing support for Gnus." + :group 'gnus) + ;;; User Variables: -(defvar gnus-soup-directory (nnheader-concat gnus-home-directory "SoupBrew/") - "*Directory containing an unpacked SOUP packet.") +(defcustom gnus-soup-directory (nnheader-concat gnus-home-directory "SoupBrew/") + "Directory containing an unpacked SOUP packet." + :version "22.1" ;; Gnus 5.10.9 + :type 'directory + :group 'gnus-soup) -(defvar gnus-soup-replies-directory +(defcustom gnus-soup-replies-directory (nnheader-concat gnus-soup-directory "SoupReplies/") - "*Directory where Gnus will do processing of replies.") - -(defvar gnus-soup-prefix-file "gnus-prefix" - "*Name of the file where Gnus stores the last used prefix.") + "Directory where Gnus will do processing of replies." + :version "22.1" ;; Gnus 5.10.9 + :type 'directory + :group 'gnus-soup) + +(defcustom gnus-soup-prefix-file "gnus-prefix" + "Name of the file where Gnus stores the last used prefix." + :version "22.1" ;; Gnus 5.10.9 + :type 'file + :group 'gnus-soup) -(defvar gnus-soup-packer "tar cf - %s | gzip > $HOME/Soupout%d.tgz" +(defcustom gnus-soup-packer "tar cf - %s | gzip > $HOME/Soupout%d.tgz" "Format string command for packing a SOUP packet. The SOUP files will be inserted where the %s is in the string. This string MUST contain both %s and %d. The file number will be -inserted where %d appears.") - -(defvar gnus-soup-unpacker "gunzip -c %s | tar xvf -" - "*Format string command for unpacking a SOUP packet. -The SOUP packet file name will be inserted at the %s.") - -(defvar gnus-soup-packet-directory gnus-home-directory - "*Where gnus-soup will look for REPLIES packets.") - -(defvar gnus-soup-packet-regexp "Soupin" - "*Regular expression matching SOUP REPLIES packets in `gnus-soup-packet-directory'.") - -(defvar gnus-soup-ignored-headers "^Xref:" - "*Regexp to match headers to be removed when brewing SOUP packets.") +inserted where %d appears." + :version "22.1" ;; Gnus 5.10.9 + :type 'string + :group 'gnus-soup) + +(defcustom gnus-soup-unpacker "gunzip -c %s | tar xvf -" + "Format string command for unpacking a SOUP packet. +The SOUP packet file name will be inserted at the %s." + :version "22.1" ;; Gnus 5.10.9 + :type 'string + :group 'gnus-soup) + +(defcustom gnus-soup-packet-directory gnus-home-directory + "Where gnus-soup will look for REPLIES packets." + :version "22.1" ;; Gnus 5.10.9 + :type 'directory + :group 'gnus-soup) + +(defcustom gnus-soup-packet-regexp "Soupin" + "Regular expression matching SOUP REPLIES packets in `gnus-soup-packet-directory'." + :version "22.1" ;; Gnus 5.10.9 + :type 'regexp + :group 'gnus-soup) + +(defcustom gnus-soup-ignored-headers "^Xref:" + "Regexp to match headers to be removed when brewing SOUP packets." + :version "22.1" ;; Gnus 5.10.9 + :type 'regexp + :group 'gnus-soup) ;;; Internal Variables: Index: gnus/lisp/gnus-spec.el diff -u gnus/lisp/gnus-spec.el:7.16 gnus/lisp/gnus-spec.el:7.17 --- gnus/lisp/gnus-spec.el:7.16 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-spec.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-spec.el --- format spec functions for Gnus ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/gnus-srvr.el diff -u gnus/lisp/gnus-srvr.el:7.22 gnus/lisp/gnus-srvr.el:7.24 --- gnus/lisp/gnus-srvr.el:7.22 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-srvr.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-srvr.el --- virtual server support for Gnus ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -958,18 +958,22 @@ (progn ;; Make sure the group has been properly removed before we ;; subscribe to it. - (gnus-kill-ephemeral-group group) + (if (gnus-ephemeral-group-p group) + (gnus-kill-ephemeral-group group)) + ;; We need to discern between killed/zombie groups and + ;; just unsubscribed ones. (gnus-group-change-level - (list t group gnus-level-default-subscribed - nil nil (if (gnus-server-equal - gnus-browse-current-method "native") - nil - (gnus-method-simplify - gnus-browse-current-method))) + (or (gnus-group-entry group) + (list t group gnus-level-default-subscribed + nil nil (if (gnus-server-equal + gnus-browse-current-method "native") + nil + (gnus-method-simplify + gnus-browse-current-method)))) gnus-level-default-subscribed (gnus-group-level group) (and (car (nth 1 gnus-newsrc-alist)) (gnus-group-entry (car (nth 1 gnus-newsrc-alist)))) - t) + (null (gnus-group-entry group))) (delete-char 1) (insert ? )) (gnus-group-change-level Index: gnus/lisp/gnus-start.el diff -u gnus/lisp/gnus-start.el:7.45 gnus/lisp/gnus-start.el:7.48 --- gnus/lisp/gnus-start.el:7.45 Fri Mar 10 10:48:31 2006 +++ gnus/lisp/gnus-start.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-start.el --- startup functions for Gnus ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -15,7 +15,7 @@ ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; 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 @@ -313,8 +313,8 @@ options -n no.all alt.all -Gnus will the subscribe all new newsgroups in these hierarchies with -the subscription method in this variable." +Gnus will then subscribe all new newsgroups in these hierarchies +with the subscription method in this variable." :group 'gnus-group-new :type '(radio (function-item gnus-subscribe-randomly) (function-item gnus-subscribe-alphabetically) @@ -352,7 +352,7 @@ (defcustom gnus-options-subscribe nil "*All new groups matching this regexp will be subscribed unconditionally. -Note that this variable deals only with new newsgroups. This variable +Note that this variable deals only with new newsgroups. This variable does not affect old newsgroups. New groups that match this regexp will not be handled by @@ -364,7 +364,7 @@ (defcustom gnus-options-not-subscribe nil "*All new groups matching this regexp will be ignored. -Note that this variable deals only with new newsgroups. This variable +Note that this variable deals only with new newsgroups. This variable does not affect old (already subscribed) newsgroups." :group 'gnus-group-new :type '(choice regexp @@ -626,7 +626,7 @@ (defun gnus-subscribe-newsgroup (newsgroup &optional next) "Subscribe new NEWSGROUP. -If NEXT is non-nil, it is inserted before NEXT. Otherwise it is made +If NEXT is non-nil, it is inserted before NEXT. Otherwise it is made the first newsgroup." (save-excursion (goto-char (point-min)) @@ -737,7 +737,7 @@ (defun gnus-1 (&optional arg dont-connect slave) "Read network news. If ARG is non-nil and a positive number, Gnus will use that as the -startup level. If ARG is non-nil and not a positive number, Gnus will +startup level. If ARG is non-nil and not a positive number, Gnus will prompt the user for the name of an NNTP server to use." (interactive "P") Index: gnus/lisp/gnus-sum.el diff -u gnus/lisp/gnus-sum.el:7.142 gnus/lisp/gnus-sum.el:7.182 --- gnus/lisp/gnus-sum.el:7.142 Wed Apr 26 17:32:25 2006 +++ gnus/lisp/gnus-sum.el Fri Apr 27 10:39:17 2007 @@ -1,7 +1,7 @@ ;;; gnus-sum.el --- summary mode commands for Gnus ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -15,7 +15,7 @@ ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; 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 @@ -114,7 +114,7 @@ If this variable is `adopt', Gnus will make one of the \"children\" the parent and mark all the step-children as such. If this variable is `empty', the \"children\" are printed with empty -subject fields. (Or rather, they will be printed with a string +subject fields. (Or rather, they will be printed with a string given by the `gnus-summary-same-subject' variable.)" :group 'gnus-thread :type '(choice (const :tag "off" nil) @@ -308,12 +308,20 @@ :type 'boolean) (defcustom gnus-auto-select-first t - "*If non-nil, select the article under point. -Which article this is is controlled by the `gnus-auto-select-subject' -variable. + "If non-nil, select an article on group entry. +An article is selected automatically when entering a group +e.g. with \\\\[gnus-group-read-group], or via `gnus-summary-next-page' or +`gnus-summary-catchup-and-goto-next-group'. + +Which article is selected is controlled by the variable +`gnus-auto-select-subject'. If you want to prevent automatic selection of articles in some newsgroups, set the variable to nil in `gnus-select-group-hook'." + ;; Commands include... + ;; \\\\[gnus-group-read-group] + ;; \\\\[gnus-summary-next-page] + ;; \\\\[gnus-summary-catchup-and-goto-next-group] :group 'gnus-group-select :type '(choice (const :tag "none" nil) (sexp :menu-tag "first" t))) @@ -1052,7 +1060,11 @@ :group 'gnus-summary) (defvar gnus-decode-encoded-word-function 'mail-decode-encoded-word-string - "Variable that says which function should be used to decode a string with encoded words.") + "Function used to decode a string with encoded words.") + +(defvar gnus-decode-encoded-address-function + 'mail-decode-encoded-address-string + "Function used to decode addresses with encoded words.") (defcustom gnus-extra-headers '(To Newsgroups) "*Extra headers to parse." @@ -1061,13 +1073,18 @@ :type '(repeat symbol)) (defcustom gnus-ignored-from-addresses - (and user-mail-address + (and user-mail-address (not (string= user-mail-address "")) (regexp-quote user-mail-address)) - "*Regexp of From headers that may be suppressed in favor of To headers." + "*From headers that may be suppressed in favor of To headers. +This can be a regexp or a list of regexps." :version "21.1" :group 'gnus-summary - :type 'regexp) + :type '(choice regexp + (repeat :tag "Regexp List" regexp))) + +(defsubst gnus-ignored-from-addresses () + (gmm-regexp-concat gnus-ignored-from-addresses)) (defcustom gnus-summary-to-prefix "-> " "*String prefixed to the To field in the summary line when @@ -1322,6 +1339,7 @@ (defvar gnus-newsgroup-last-mail nil) (defvar gnus-newsgroup-last-folder nil) (defvar gnus-newsgroup-last-file nil) +(defvar gnus-newsgroup-last-directory nil) (defvar gnus-newsgroup-auto-expire nil) (defvar gnus-newsgroup-active nil) @@ -1437,6 +1455,7 @@ gnus-newsgroup-begin gnus-newsgroup-end gnus-newsgroup-last-rmail gnus-newsgroup-last-mail gnus-newsgroup-last-folder gnus-newsgroup-last-file + gnus-newsgroup-last-directory gnus-newsgroup-auto-expire gnus-newsgroup-unreads gnus-newsgroup-unselected gnus-newsgroup-marked gnus-newsgroup-spam-marked @@ -1846,6 +1865,7 @@ "/" gnus-summary-limit-to-subject "n" gnus-summary-limit-to-articles "b" gnus-summary-limit-to-bodies + "h" gnus-summary-limit-to-headers "w" gnus-summary-pop-limit "s" gnus-summary-limit-to-subject "a" gnus-summary-limit-to-author @@ -1866,6 +1886,7 @@ "C" gnus-summary-limit-mark-excluded-as-read "o" gnus-summary-insert-old-articles "N" gnus-summary-insert-new-articles + "S" gnus-summary-limit-to-singletons "r" gnus-summary-limit-to-replied "R" gnus-summary-limit-to-recipient) @@ -1908,7 +1929,8 @@ (gnus-define-keys (gnus-summary-buffer-map "Y" gnus-summary-mode-map) "g" gnus-summary-prepare "c" gnus-summary-insert-cached-articles - "d" gnus-summary-insert-dormant-articles) + "d" gnus-summary-insert-dormant-articles + "t" gnus-summary-insert-ticked-articles) (gnus-define-keys (gnus-summary-exit-map "Z" gnus-summary-mode-map) "c" gnus-summary-catchup-and-exit @@ -1954,6 +1976,7 @@ "e" gnus-article-emphasize "w" gnus-article-fill-cited-article "Q" gnus-article-fill-long-lines + "L" gnus-article-toggle-truncate-lines "C" gnus-article-capitalize-sentences "c" gnus-article-remove-cr "q" gnus-article-de-quoted-unreadable @@ -2073,6 +2096,7 @@ "r" gnus-summary-save-article-rmail "f" gnus-summary-save-article-file "b" gnus-summary-save-article-body-file + "B" gnus-summary-write-article-body-file "h" gnus-summary-save-article-folder "v" gnus-summary-save-article-vm "p" gnus-summary-pipe-output @@ -2092,6 +2116,7 @@ "c" gnus-article-copy-part "C" gnus-article-view-part-as-charset "e" gnus-article-view-part-externally + "H" gnus-article-browse-html-article "E" gnus-article-encrypt-body "i" gnus-article-inline-part "|" gnus-article-pipe-part) @@ -2241,6 +2266,7 @@ ,@(if (featurep 'xemacs) nil '(:help "Encrypt the message body on disk"))] ["View part externally" gnus-article-view-part-externally t] + ["View HTML parts in browser" gnus-article-browse-html-article t] ["View part with charset..." gnus-article-view-part-as-charset t] ["Copy part" gnus-article-copy-part t] ["Save part..." gnus-article-save-part t] @@ -2295,6 +2321,7 @@ ["Emphasis" gnus-article-emphasize t] ["Word wrap" gnus-article-fill-cited-article t] ["Fill long lines" gnus-article-fill-long-lines t] + ["Toggle truncate long lines" gnus-article-toggle-truncate-lines t] ["Capitalize sentences" gnus-article-capitalize-sentences t] ["Remove CR" gnus-article-remove-cr t] ["Quoted-Printable" gnus-article-de-quoted-unreadable t] @@ -2521,9 +2548,10 @@ ["Display Predicate" gnus-summary-limit-to-display-predicate t] ["Unread" gnus-summary-limit-to-unread t] ["Unseen" gnus-summary-limit-to-unseen t] + ["Singletons" gnus-summary-limit-to-singletons t] ["Replied" gnus-summary-limit-to-replied t] ["Non-dormant" gnus-summary-limit-exclude-dormant t] - ["Next articles" gnus-summary-limit-to-articles t] + ["Next or process marked articles" gnus-summary-limit-to-articles t] ["Pop limit" gnus-summary-pop-limit t] ["Show dormant" gnus-summary-limit-include-dormant t] ["Hide childless dormant" @@ -2604,6 +2632,7 @@ ["Regenerate" gnus-summary-prepare t] ["Insert cached articles" gnus-summary-insert-cached-articles t] ["Insert dormant articles" gnus-summary-insert-dormant-articles t] + ["Insert ticked articles" gnus-summary-insert-ticked-articles t] ["Toggle threading" gnus-summary-toggle-threads t]) ["See old articles" gnus-summary-insert-old-articles t] ["See new articles" gnus-summary-insert-new-articles t] @@ -3352,10 +3381,11 @@ (gnus-summary-mode group) (when gnus-carpal (gnus-carpal-setup-buffer 'summary)) - (unless gnus-single-article-buffer - (make-local-variable 'gnus-article-buffer) - (make-local-variable 'gnus-article-current) - (make-local-variable 'gnus-original-article-buffer)) + (when (gnus-group-quit-config group) + (set (make-local-variable 'gnus-single-article-buffer) nil)) + (make-local-variable 'gnus-article-buffer) + (make-local-variable 'gnus-article-current) + (make-local-variable 'gnus-original-article-buffer) (setq gnus-newsgroup-name group) ;; Set any local variables in the group parameters. (gnus-summary-set-local-parameters gnus-newsgroup-name) @@ -3430,16 +3460,17 @@ t (not (cdr (gnus-data-find-list article))))) -(defun gnus-make-thread-indent-array () - (let ((n 200)) - (unless (and gnus-thread-indent-array - (= gnus-thread-indent-level gnus-thread-indent-array-level)) - (setq gnus-thread-indent-array (make-vector 201 "") - gnus-thread-indent-array-level gnus-thread-indent-level) - (while (>= n 0) - (aset gnus-thread-indent-array n - (make-string (* n gnus-thread-indent-level) ? )) - (setq n (1- n)))))) +(defun gnus-make-thread-indent-array (&optional n) + (when (or n + (progn (setq n 200) nil) + (null gnus-thread-indent-array) + (/= gnus-thread-indent-level gnus-thread-indent-array-level)) + (setq gnus-thread-indent-array (make-vector (1+ n) "") + gnus-thread-indent-array-level gnus-thread-indent-level) + (while (>= n 0) + (aset gnus-thread-indent-array n + (make-string (* n gnus-thread-indent-level) ? )) + (setq n (1- n))))) (defun gnus-update-summary-mark-positions () "Compute where the summary marks are to go." @@ -3511,14 +3542,15 @@ (defun gnus-summary-from-or-to-or-newsgroups (header gnus-tmp-from) (let ((mail-parse-charset gnus-newsgroup-charset) + (ignored-from-addresses (gnus-ignored-from-addresses)) ; Is it really necessary to do this next part for each summary line? ; Luckily, doesn't seem to slow things down much. (mail-parse-ignored-charsets (with-current-buffer gnus-summary-buffer gnus-newsgroup-ignored-charsets))) (or - (and gnus-ignored-from-addresses - (string-match gnus-ignored-from-addresses gnus-tmp-from) + (and ignored-from-addresses + (string-match ignored-from-addresses gnus-tmp-from) (let ((extra-headers (mail-header-extra header)) to newsgroups) @@ -3527,7 +3559,7 @@ (concat gnus-summary-to-prefix (inline (gnus-summary-extract-address-component - (funcall gnus-decode-encoded-word-function to))))) + (funcall gnus-decode-encoded-address-function to))))) ((setq newsgroups (or (cdr (assq 'Newsgroups extra-headers)) @@ -3545,6 +3577,9 @@ gnus-tmp-expirable gnus-tmp-subject-or-nil &optional gnus-tmp-dummy gnus-tmp-score gnus-tmp-process) + (if (>= gnus-tmp-level (length gnus-thread-indent-array)) + (gnus-make-thread-indent-array (max (* 2 (length gnus-thread-indent-array)) + gnus-tmp-level))) (let* ((gnus-tmp-indentation (aref gnus-thread-indent-array gnus-tmp-level)) (gnus-tmp-lines (mail-header-lines gnus-tmp-header)) (gnus-tmp-score (or gnus-tmp-score gnus-summary-default-score 0)) @@ -4065,7 +4100,7 @@ infloop)) (defun gnus-make-threads () - "Go through the dependency hashtb and find the roots. Return all threads." + "Go through the dependency hashtb and find the roots. Return all threads." (let (threads) (while (catch 'infloop (mapatoms @@ -4275,7 +4310,7 @@ (error x)) (condition-case () ; from (gnus-remove-odd-characters - (funcall gnus-decode-encoded-word-function + (funcall gnus-decode-encoded-address-function (setq x (nnheader-nov-field)))) (error x)) (nnheader-nov-field) ; date @@ -4569,7 +4604,7 @@ ;; First go up in this thread until we find the root. (setq last-id (gnus-root-id id) headers (message-flatten-list (gnus-id-to-thread last-id))) - ;; We have now found the real root of this thread. It might have + ;; We have now found the real root of this thread. It might have ;; been gathered into some loose thread, so we have to search ;; through the threads to find the thread we wanted. (let ((threads gnus-newsgroup-threads) @@ -4637,23 +4672,46 @@ (1+ (point-at-eol)) (gnus-delete-line))))))) -(defun gnus-sort-threads-1 (threads func) +(defun gnus-sort-threads-recursive (threads func) (sort (mapcar (lambda (thread) (cons (car thread) (and (cdr thread) - (gnus-sort-threads-1 (cdr thread) func)))) + (gnus-sort-threads-recursive (cdr thread) func)))) threads) func)) +(defun gnus-sort-threads-loop (threads func) + (let* ((superthread (cons nil threads)) + (stack (list (cons superthread threads))) + remaining-threads thread) + (while stack + (setq remaining-threads (cdr (car stack))) + (if remaining-threads + (progn (setq thread (car remaining-threads)) + (setcdr (car stack) (cdr remaining-threads)) + (if (cdr thread) + (push (cons thread (cdr thread)) stack))) + (setq thread (caar stack)) + (setcdr thread (sort (cdr thread) func)) + (pop stack))) + (cdr superthread))) + (defun gnus-sort-threads (threads) "Sort THREADS." (if (not gnus-thread-sort-functions) threads (gnus-message 8 "Sorting threads...") - (let ((max-lisp-eval-depth 5000)) - (prog1 (gnus-sort-threads-1 - threads - (gnus-make-sort-function gnus-thread-sort-functions)) - (gnus-message 8 "Sorting threads...done"))))) + (prog1 + (condition-case nil + (let ((max-lisp-eval-depth (max max-lisp-eval-depth 5000))) + (gnus-sort-threads-recursive + threads (gnus-make-sort-function gnus-thread-sort-functions))) + ;; Even after binding max-lisp-eval-depth, the recursive + ;; sorter might fail for very long threads. In that case, + ;; try using a (less well-tested) non-recursive sorter. + (error (gnus-sort-threads-loop + threads (gnus-make-sort-function + gnus-thread-sort-functions)))) + (gnus-message 8 "Sorting threads...done")))) (defun gnus-sort-articles (articles) "Sort ARTICLES." @@ -5101,6 +5159,10 @@ gnus-tmp-closing-bracket ?\>) (setq gnus-tmp-opening-bracket ?\[ gnus-tmp-closing-bracket ?\])) + (if (>= gnus-tmp-level (length gnus-thread-indent-array)) + (gnus-make-thread-indent-array + (max (* 2 (length gnus-thread-indent-array)) + gnus-tmp-level))) (setq gnus-tmp-indentation (aref gnus-thread-indent-array gnus-tmp-level) @@ -5316,13 +5378,13 @@ (when (equal major-mode 'gnus-summary-mode) (gnus-kill-buffer (current-buffer))) (error "Couldn't activate group %s: %s" - group (gnus-status-message group)))) + (gnus-group-decoded-name group) (gnus-status-message group)))) (unless (gnus-request-group group t) (when (equal major-mode 'gnus-summary-mode) (gnus-kill-buffer (current-buffer))) (error "Couldn't request group %s: %s" - group (gnus-status-message group))) + (gnus-group-decoded-name group) (gnus-status-message group))) (when gnus-agent (gnus-agent-possibly-alter-active group (gnus-active group) info) @@ -5445,7 +5507,8 @@ (setq gnus-newsgroup-auto-expire (gnus-group-auto-expirable-p group)) ;; Set up the article buffer now, if necessary. - (unless gnus-single-article-buffer + (unless (and gnus-single-article-buffer + (equal gnus-article-buffer "*Article*")) (gnus-article-setup-buffer)) ;; First and last article in this newsgroup. (when gnus-newsgroup-headers @@ -5819,8 +5882,9 @@ (let* ((mformat (symbol-value (intern (format "gnus-%s-mode-line-format-spec" where)))) - (gnus-tmp-group-name (gnus-group-decoded-name - gnus-newsgroup-name)) + (gnus-tmp-group-name (gnus-mode-string-quote + (gnus-group-decoded-name + gnus-newsgroup-name))) (gnus-tmp-article-number (or gnus-current-article 0)) (gnus-tmp-unread gnus-newsgroup-unreads) (gnus-tmp-unread-and-unticked (length gnus-newsgroup-unreads)) @@ -6032,7 +6096,7 @@ (let ((case-fold-search t) in-reply-to header p lines chars) (goto-char (point-min)) - ;; Search to the beginning of the next header. Error messages + ;; Search to the beginning of the next header. Error messages ;; do not begin with 2 or 3. (while (re-search-forward "^[23][0-9]+ " nil t) (setq id nil @@ -6040,7 +6104,7 @@ ;; This implementation of this function, with nine ;; search-forwards instead of the one re-search-forward and ;; a case (which basically was the old function) is actually - ;; about twice as fast, even though it looks messier. You + ;; about twice as fast, even though it looks messier. You ;; can't have everything, I guess. Speed and elegance ;; doesn't always go hand in hand. (setq @@ -6066,7 +6130,7 @@ (progn (goto-char p) (if (search-forward "\nfrom:" nil t) - (funcall gnus-decode-encoded-word-function + (funcall gnus-decode-encoded-address-function (nnheader-header-value)) "(nobody)")) ;; Date. @@ -6553,7 +6617,7 @@ (let ((top-pos (save-excursion (forward-line (- top)) (point)))) (if (> bottom top-pos) ;; Keep the second line from the top visible - (set-window-start window top-pos t) + (set-window-start window top-pos) ;; Try to keep the bottom line visible; if it's partially ;; obscured, either scroll one more line to make it fully ;; visible, or revert to using TOP-POS. @@ -6843,6 +6907,7 @@ (gnus-run-hooks 'gnus-summary-prepare-exit-hook) ;; If we have several article buffers, we kill them at exit. (unless gnus-single-article-buffer + (gnus-kill-buffer gnus-article-buffer) (gnus-kill-buffer gnus-original-article-buffer) (setq gnus-article-current nil)) (when gnus-use-cache @@ -6981,19 +7046,11 @@ (gnus-set-global-variables)))) (if (or (eq (cdr quit-config) 'article) (eq (cdr quit-config) 'pick)) - (progn - ;; The current article may be from the ephemeral group - ;; thus it is best that we reload this article - ;; - ;; If we're exiting from a large digest, this can be - ;; extremely slow. So, it's better not to reload it. -- jh. - ;;(gnus-summary-show-article) - (if (and (boundp 'gnus-pick-mode) (symbol-value 'gnus-pick-mode)) - (gnus-configure-windows 'pick 'force) - (gnus-configure-windows (cdr quit-config) 'force))) + (if (and (boundp 'gnus-pick-mode) (symbol-value 'gnus-pick-mode)) + (gnus-configure-windows 'pick 'force) + (gnus-configure-windows (cdr quit-config) 'force)) (gnus-configure-windows (cdr quit-config) 'force)) (when (eq major-mode 'gnus-summary-mode) - (gnus-summary-next-subject 1 nil t) (gnus-summary-recenter) (gnus-summary-position-point)))) @@ -7393,6 +7450,9 @@ If SUBJECT, only articles with SUBJECT are selected. If BACKWARD, the previous article is selected instead of the next." (interactive "P") + ;; Make sure we are in the summary buffer. + (unless (eq major-mode 'gnus-summary-mode) + (set-buffer gnus-summary-buffer)) (cond ;; Is there such an article? ((and (gnus-summary-search-forward unread subject backward) @@ -7901,6 +7961,27 @@ (gnus-summary-limit articles)) (gnus-summary-position-point)))) +(defun gnus-summary-limit-strange-charsets-predicate (header) + (let ((string (concat (mail-header-subject header) + (mail-header-from header))) + charset found) + (dotimes (i (1- (length string))) + (setq charset (format "%s" (char-charset (aref string (1+ i))))) + (when (string-match "unicode\\|big\\|japanese" charset) + (setq found t))) + found)) + +(defun gnus-summary-limit-to-predicate (predicate) + "Limit to articles where PREDICATE returns non-nil. +PREDICATE will be called with the header structures of the +articles." + (let ((articles nil) + (case-fold-search t)) + (dolist (header gnus-newsgroup-headers) + (when (funcall predicate header) + (push (mail-header-number header) articles))) + (gnus-summary-limit (nreverse articles)))) + (defun gnus-summary-limit-to-age (age &optional younger-p) "Limit the summary buffer to articles that are older than (or equal) AGE days. If YOUNGER-P (the prefix) is non-nil, limit the summary buffer to @@ -8006,7 +8087,13 @@ gnus-duplicate-mark gnus-souped-mark) 'reverse))) -(defun gnus-summary-limit-to-bodies (match &optional reverse) +(defun gnus-summary-limit-to-headers (match &optional reverse) + "Limit the summary buffer to articles that have headers that match MATCH. +If REVERSE (the prefix), limit to articles that don't match." + (interactive "sMatch headers (regexp): \nP") + (gnus-summary-limit-to-bodies match reverse t)) + +(defun gnus-summary-limit-to-bodies (match &optional reverse headersp) "Limit the summary buffer to articles that have bodies that match MATCH. If REVERSE (the prefix), limit to articles that don't match." (interactive "sMatch body (regexp): \nP") @@ -8027,7 +8114,9 @@ (set-buffer gnus-article-buffer) (article-goto-body) (let* ((case-fold-search t) - (found (re-search-forward match nil t))) + (found (if headersp + (re-search-backward match nil t) + (re-search-forward match nil t)))) (when (or (and found (not reverse)) (and (not found) @@ -8038,6 +8127,30 @@ (gnus-summary-limit articles))) (gnus-summary-position-point)) +(defun gnus-summary-limit-to-singletons (&optional threadsp) + "Limit the summary buffer to articles that aren't part on any thread. +If THREADSP (the prefix), limit to articles that are in threads." + (interactive "P") + (let ((articles nil) + thread-articles + threads) + (dolist (thread gnus-newsgroup-threads) + (if (stringp (car thread)) + (dolist (thread (cdr thread)) + (push thread threads)) + (push thread threads))) + (dolist (thread threads) + (setq thread-articles (gnus-articles-in-thread thread)) + (when (or (and threadsp + (> (length thread-articles) 1)) + (and (not threadsp) + (= (length thread-articles) 1))) + (setq articles (nconc thread-articles articles)))) + (if (not articles) + (message "No messages matched") + (gnus-summary-limit articles)) + (gnus-summary-position-point))) + (defun gnus-summary-limit-to-replied (&optional unreplied) "Limit the summary buffer to replied articles. If UNREPLIED (the prefix), limit to unreplied articles." @@ -8131,9 +8244,17 @@ (interactive) (let ((gnus-verbose (max 6 gnus-verbose))) (if (not gnus-newsgroup-dormant) - (gnus-message 3 "No cached articles for this group") + (gnus-message 3 "No dormant articles for this group") (gnus-summary-goto-subjects gnus-newsgroup-dormant)))) +(defun gnus-summary-insert-ticked-articles () + "Insert ticked articles for this group into the current buffer." + (interactive) + (let ((gnus-verbose (max 6 gnus-verbose))) + (if (not gnus-newsgroup-marked) + (gnus-message 3 "No ticked articles for this group") + (gnus-summary-goto-subjects gnus-newsgroup-marked)))) + (defun gnus-summary-limit-include-dormant () "Display all the hidden articles that are marked as dormant. Note that this command only works on a subset of the articles currently @@ -8340,7 +8461,7 @@ ;; will really go down to a leaf article first, before slowly ;; working its way up towards the root. (when thread - (let* ((max-lisp-eval-depth 5000) + (let* ((max-lisp-eval-depth (max 5000 max-lisp-eval-depth)) (children (if (cdr thread) (apply '+ (mapcar 'gnus-summary-limit-children @@ -8627,10 +8748,11 @@ ;; the parent article. (when (setq to-address (or (gnus-fetch-field "reply-to") (gnus-fetch-field "from"))) - (setq params (append - (list (cons 'to-address - (funcall gnus-decode-encoded-word-function - to-address)))))) + (setq params + (append + (list (cons 'to-address + (funcall gnus-decode-encoded-address-function + to-address)))))) (setq dig (nnheader-set-temp-buffer " *gnus digest buffer*")) (insert-buffer-substring gnus-original-article-buffer) ;; Remove lines that may lead nndoc to misinterpret the @@ -9162,8 +9284,8 @@ (defun gnus-summary-caesar-message (&optional arg) "Caesar rotate the current article by 13. -The numerical prefix specifies how many places to rotate each letter -forward." +With a non-numerical prefix, also rotate headers. A numerical +prefix specifies how many places to rotate each letter forward." (interactive "P") (gnus-summary-select-article) (let ((mail-header-separator "")) @@ -9172,7 +9294,9 @@ (widen) (let ((start (window-start)) buffer-read-only) - (message-caesar-buffer-body arg) + (if (equal arg '(4)) + (message-caesar-buffer-body nil t) + (message-caesar-buffer-body arg)) (set-window-start (get-buffer-window (current-buffer)) start))))) ;; Create buttons and stuff... (gnus-treat-article nil)) @@ -9329,16 +9453,16 @@ (to-method (gnus-find-method-for-group to-newsgroup)) (move-is-internal (gnus-method-equal from-method to-method))) - (gnus-request-move-article - article ; Article to move - gnus-newsgroup-name ; From newsgroup - (nth 1 (gnus-find-method-for-group - gnus-newsgroup-name)) ; Server - (list 'gnus-request-accept-article - to-newsgroup (list 'quote select-method) - (not articles) t) ; Accept form - (not articles) ; Only save nov last time - move-is-internal))) ; is this move internal? + (gnus-request-move-article + article ; Article to move + gnus-newsgroup-name ; From newsgroup + (nth 1 (gnus-find-method-for-group + gnus-newsgroup-name)) ; Server + (list 'gnus-request-accept-article + to-newsgroup (list 'quote select-method) + (not articles) t) ; Accept form + (not articles) ; Only save nov last time + move-is-internal))) ; is this move internal? ;; Copy the article. ((eq action 'copy) (save-excursion @@ -9371,7 +9495,7 @@ (gnus-request-article-this-buffer article gnus-newsgroup-name) (when (consp (setq art-group (gnus-request-accept-article - to-newsgroup select-method (not articles)))) + to-newsgroup select-method (not articles) t))) (setq new-xref (concat new-xref " " (car art-group) ":" (number-to-string (cdr art-group)))) @@ -9379,7 +9503,7 @@ ;; it and replace the new article. (nnheader-replace-header "Xref" new-xref) (gnus-request-replace-article - (cdr art-group) to-newsgroup (current-buffer)) + (cdr art-group) to-newsgroup (current-buffer) t) art-group)))))) (cond ((not art-group) @@ -9475,7 +9599,7 @@ (gnus-request-article-this-buffer article gnus-newsgroup-name) (nnheader-replace-header "Xref" new-xref) (gnus-request-replace-article - article gnus-newsgroup-name (current-buffer)))) + article gnus-newsgroup-name (current-buffer) t))) ;; run the move/copy/crosspost/respool hook (run-hook-with-args 'gnus-summary-article-move-hook @@ -9488,7 +9612,7 @@ ;;;!!!Why is this necessary? (set-buffer gnus-summary-buffer) - + (gnus-summary-goto-subject article) (when (eq action 'move) (gnus-summary-mark-article article gnus-canceled-mark)))) @@ -9500,7 +9624,7 @@ (set-buffer gnus-group-buffer) (let ((gnus-group-marked to-groups)) (gnus-group-get-new-news-this-group nil t))) - + (gnus-kill-buffer copy-buf) (gnus-summary-position-point) (gnus-set-mode-line 'summary))) @@ -9733,7 +9857,7 @@ ;; Suggested by Jack Vinson . (defun gnus-summary-delete-article (&optional n) "Delete the N next (mail) articles. -This command actually deletes articles. This is not a marking +This command actually deletes articles. This is not a marking command. The article will disappear forever from your life, never to return. @@ -10688,8 +10812,8 @@ gnus-newsgroup-dormant nil)) (setq gnus-newsgroup-unreads (gnus-sorted-nunion - (gnus-intersection gnus-newsgroup-unreads - gnus-newsgroup-downloadable) + (gnus-sorted-intersection gnus-newsgroup-unreads + gnus-newsgroup-downloadable) gnus-newsgroup-unfetched))) ;; We actually mark all articles as canceled, which we ;; have to do when using auto-expiry or adaptive scoring. @@ -10882,8 +11006,8 @@ (defun gnus-summary-reparent-children (parent children) "Make PARENT the parent of CHILDREN. -When called interactively, PARENT is is current article and -CHILDREN are the process-marked articles." +When called interactively, PARENT is the current article and CHILDREN +are the process-marked articles." (interactive (list (gnus-summary-article-number) (gnus-summary-work-articles nil))) @@ -11239,12 +11363,26 @@ If N is a negative number, save the N previous articles. If N is nil and any articles have been marked with the process mark, save those articles instead. -The variable `gnus-default-article-saver' specifies the saver function." +The variable `gnus-default-article-saver' specifies the saver function. + +If the optional second argument NOT-SAVED is non-nil, articles saved +will not be marked as saved." (interactive "P") + (require 'gnus-art) (let* ((articles (gnus-summary-work-articles n)) (save-buffer (save-excursion (nnheader-set-temp-buffer " *Gnus Save*"))) (num (length articles)) + ;; Whether to save decoded articles or raw articles. + (decode (when gnus-article-save-coding-system + (get gnus-default-article-saver :decode))) + ;; When saving many articles in a single file, use the other + ;; function to save articles other than the first one. + (saver2 (get gnus-default-article-saver :function)) + (gnus-prompt-before-saving (if saver2 + t + gnus-prompt-before-saving)) + (gnus-default-article-saver gnus-default-article-saver) header file) (dolist (article articles) (setq header (gnus-summary-article-header article)) @@ -11255,17 +11393,25 @@ (gnus-message 1 "Article %d is unsaveable" article)) ;; This is a real article. (save-window-excursion - (let ((gnus-display-mime-function nil) - (gnus-article-prepare-hook nil)) - (gnus-summary-select-article t nil nil article))) + (let ((gnus-display-mime-function (when decode + gnus-display-mime-function)) + (gnus-article-prepare-hook (when decode + gnus-article-prepare-hook))) + (gnus-summary-select-article t nil nil article) + (gnus-summary-goto-subject article))) (save-excursion (set-buffer save-buffer) (erase-buffer) - (insert-buffer-substring gnus-original-article-buffer)) + (insert-buffer-substring (if decode + gnus-article-buffer + gnus-original-article-buffer))) (setq file (gnus-article-save save-buffer file num)) (gnus-summary-remove-process-mark article) (unless not-saved - (gnus-summary-set-saved-mark article)))) + (gnus-summary-set-saved-mark article))) + (when saver2 + (setq gnus-default-article-saver saver2 + saver2 nil))) (gnus-kill-buffer save-buffer) (gnus-summary-position-point) (gnus-set-mode-line 'summary) @@ -11289,7 +11435,7 @@ (gnus-configure-windows 'pipe)))) (defun gnus-summary-save-article-mail (&optional arg) - "Append the current article to an mail file. + "Append the current article to a Unix mail box file. If N is a positive number, save the N next articles. If N is a negative number, save the N previous articles. If N is nil and any articles have been marked with the process mark, @@ -11341,6 +11487,17 @@ (interactive "P") (require 'gnus-art) (let ((gnus-default-article-saver 'gnus-summary-save-body-in-file)) + (gnus-summary-save-article arg))) + +(defun gnus-summary-write-article-body-file (&optional arg) + "Write the current article body to a file, deleting the previous file. +If N is a positive number, save the N next articles. +If N is a negative number, save the N previous articles. +If N is nil and any articles have been marked with the process mark, +save those articles instead." + (interactive "P") + (require 'gnus-art) + (let ((gnus-default-article-saver 'gnus-summary-write-body-to-file)) (gnus-summary-save-article arg))) (defun gnus-summary-muttprint (&optional arg) Index: gnus/lisp/gnus-topic.el diff -u gnus/lisp/gnus-topic.el:7.16 gnus/lisp/gnus-topic.el:7.19 --- gnus/lisp/gnus-topic.el:7.16 Sun Apr 16 18:41:49 2006 +++ gnus/lisp/gnus-topic.el Mon Mar 5 12:03:16 2007 @@ -1,7 +1,7 @@ ;;; gnus-topic.el --- a folding minor mode for Gnus group buffers ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Ilja Weis ;; Lars Magne Ingebrigtsen @@ -378,38 +378,50 @@ (format "(gnus-topic-set-parameters %S '%S)" topic parameters)))) (defun gnus-group-topic-parameters (group) - "Compute the group parameters for GROUP taking into account inheritance from topics." + "Compute the group parameters for GROUP in topic mode. +Possibly inherit parameters from topics above GROUP." (let ((params-list (copy-sequence (gnus-group-get-parameter group)))) (save-excursion - (nconc params-list - (gnus-topic-hierarchical-parameters - ;; First we try to go to the group within the group - ;; buffer and find the topic for the group that way. - ;; This hopefully copes well with groups that are in - ;; more than one topic. Failing that (i.e. when the - ;; group isn't visible in the group buffer) we find a - ;; topic for the group via gnus-group-topic. - (or (and (gnus-group-goto-group group) - (gnus-current-topic)) - (gnus-group-topic group))))))) - -(defun gnus-topic-hierarchical-parameters (topic) - "Return a topic list computed for TOPIC." - (let ((params-list (nreverse (mapcar 'gnus-topic-parameters - (gnus-current-topics topic)))) + (gnus-topic-hierarchical-parameters + ;; First we try to go to the group within the group buffer and find the + ;; topic for the group that way. This hopefully copes well with groups + ;; that are in more than one topic. Failing that (i.e. when the group + ;; isn't visible in the group buffer) we find a topic for the group via + ;; gnus-group-topic. + (or (and (gnus-group-goto-group group) + (gnus-current-topic)) + (gnus-group-topic group)) + params-list)))) + +(defun gnus-topic-hierarchical-parameters (topic &optional group-params-list) + "Compute the topic parameters for TOPIC. +Possibly inherit parameters from topics above TOPIC. +If optional argument GROUP-PARAMS-LIST is non-nil, use it as the basis for +inheritance." + (let ((params-list + ;; We probably have lots of nil elements here, so we remove them. + ;; Probably faster than doing this "properly". + (delq nil (cons group-params-list + (mapcar 'gnus-topic-parameters + (gnus-current-topics topic))))) param out params) - ;; We probably have lots of nil elements here, so - ;; we remove them. Probably faster than doing this "properly". - (setq params-list (delq nil params-list)) ;; Now we have all the parameters, so we go through them ;; and do inheritance in the obvious way. - (while (setq params (pop params-list)) - (while (setq param (pop params)) - (when (atom param) - (setq param (cons param t))) - ;; Override any old versions of this param. - (gnus-pull (car param) out) - (push param out))) + (let (posting-style) + (while (setq params (pop params-list)) + (while (setq param (pop params)) + (when (atom param) + (setq param (cons param t))) + (cond ((eq (car param) 'posting-style) + (let ((param (cdr param)) + elt) + (while (setq elt (pop param)) + (unless (assoc (car elt) posting-style) + (push elt posting-style))))) + (t + (unless (assq (car param) out) + (push param out)))))) + (and posting-style (push (cons 'posting-style posting-style) out))) ;; Return the resulting parameter list. out)) Index: gnus/lisp/gnus-undo.el diff -u gnus/lisp/gnus-undo.el:7.8 gnus/lisp/gnus-undo.el:7.10 --- gnus/lisp/gnus-undo.el:7.8 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-undo.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-undo.el --- minor mode for undoing in Gnus -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/gnus-util.el diff -u gnus/lisp/gnus-util.el:7.48 gnus/lisp/gnus-util.el:7.62 --- gnus/lisp/gnus-util.el:7.48 Sat Apr 22 02:51:38 2006 +++ gnus/lisp/gnus-util.el Fri Apr 27 10:39:17 2007 @@ -1,7 +1,7 @@ ;;; gnus-util.el --- utility functions for Gnus ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -103,7 +103,7 @@ (put 'gnus-eval-in-buffer-window 'edebug-form-spec '(form body)) (defmacro gnus-intern-safe (string hashtable) - "Set hash value. Arguments are STRING, VALUE, and HASHTABLE." + "Get hash value. Arguments are STRING and HASHTABLE." `(let ((symbol (intern ,string ,hashtable))) (or (boundp symbol) (set symbol nil)) @@ -173,8 +173,13 @@ ;; First find the address - the thing with the @ in it. This may ;; not be accurate in mail addresses, but does the trick most of ;; the time in news messages. - (when (string-match "\\b[^@ \t<>]+[!@][^@ \t<>]+\\b" from) - (setq address (substring from (match-beginning 0) (match-end 0)))) + (cond (;; Check ``'' first in order to handle the quite common + ;; form ``"abc@xyz" '' (i.e. ``@'' as part of a comment) + ;; correctly. + (string-match "<\\([^@ \t<>]+[!@][^@ \t<>]+\\)>" from) + (setq address (substring from (match-beginning 1) (match-end 1)))) + ((string-match "\\b[^@ \t<>]+[!@][^@ \t<>]+\\b" from) + (setq address (substring from (match-beginning 0) (match-end 0))))) ;; Then we check whether the "name
" format is used. (and address ;; Linear white space is not required. @@ -499,7 +504,7 @@ (defun gnus-extract-references (references) "Return a list of Message-IDs in REFERENCES (in In-Reply-To format), trimmed to only contain the Message-IDs." - (let ((ids (gnus-split-references references)) + (let ((ids (gnus-split-references references)) refs) (dolist (id ids) (when (string-match "<[^<>]+>" id) @@ -596,8 +601,10 @@ For example, (gnus-group-server \"nnimap+yxa:INBOX.foo\") would yield \"nnimap:yxa\"." `(let ((gname ,group)) - (if (string-match "^\\([^+]+\\).\\([^:]+\\):" gname) - (format "%s:%s" (match-string 1 gname) (match-string 2 gname)) + (if (string-match "^\\([^:+]+\\)\\(?:\\+\\([^:]*\\)\\)?:" gname) + (format "%s:%s" (match-string 1 gname) (or + (match-string 2 gname) + "")) (format "%s:%s" (car gnus-select-method) (cadr gnus-select-method))))) (defun gnus-make-sort-function (funs) @@ -1204,6 +1211,13 @@ (remove-text-properties start end properties object)) t)) +(defun gnus-string-remove-all-properties (string) + (condition-case () + (let ((s string)) + (set-text-properties 0 (length string) nil string) + s) + (error string))) + ;; This might use `compare-strings' to reduce consing in the ;; case-insensitive case, but it has to cope with null args. ;; (`string-equal' uses symbol print names.) @@ -1221,12 +1235,6 @@ :version "22.1" :group 'gnus-various) -(defun kill-empty-logs () - (dolist (buf (list (get-buffer "*Compile-Log*") - (get-buffer "*Compile-Log-Show*"))) - (if (and buf (= (buffer-size buf) 0)) - (kill-buffer buf)))) - (defun gnus-byte-compile (form) "Byte-compile FORM if `gnus-use-byte-compile' is non-nil." (if gnus-use-byte-compile @@ -1239,9 +1247,7 @@ (defalias 'gnus-byte-compile (lambda (form) (let ((byte-compile-warnings '(unresolved callargs redefine))) - (prog1 - (byte-compile form) - (kill-empty-logs))))) + (byte-compile form)))) (gnus-byte-compile form)) form)) @@ -1572,13 +1578,16 @@ ((or (featurep 'sxemacs) (featurep 'xemacs)) ;; XEmacs or SXEmacs: (concat emacsname "/" emacs-program-version - " (" - (when (and (memq 'codename lst) - codename) - (concat codename - (when system-v ", "))) - (when system-v system-v) - ")")) + (let (plst) + (when (memq 'codename lst) + (push codename plst)) + (when system-v + (push system-v plst)) + (unless (featurep 'mule) + (push "no MULE" plst)) + (when (> (length plst) 0) + (concat + " (" (mapconcat 'identity (reverse plst) ", ") ")"))))) (t emacs-version)))) (defun gnus-rename-file (old-path new-path &optional trim) @@ -1612,6 +1621,25 @@ 'set-process-query-on-exit-flag) (defalias 'gnus-set-process-query-on-exit-flag 'process-kill-without-query)) + +(if (fboundp 'with-local-quit) + (defalias 'gnus-with-local-quit 'with-local-quit) + (defmacro gnus-with-local-quit (&rest body) + "Execute BODY, allowing quits to terminate BODY but not escape further. +When a quit terminates BODY, `gnus-with-local-quit' returns nil but +requests another quit. That quit will be processed as soon as quitting +is allowed once again. (Immediately, if `inhibit-quit' is nil.)" + ;;(declare (debug t) (indent 0)) + `(condition-case nil + (let ((inhibit-quit nil)) + ,@body) + (quit (setq quit-flag t) + ;; This call is to give a chance to handle quit-flag + ;; in case inhibit-quit is nil. + ;; Without this, it will not be handled until the next function + ;; call, and that might allow it to exit thru a condition-case + ;; that intends to handle the quit signal next time. + (eval '(ignore nil)))))) (provide 'gnus-util) Index: gnus/lisp/gnus-uu.el diff -u gnus/lisp/gnus-uu.el:7.25 gnus/lisp/gnus-uu.el:7.27 --- gnus/lisp/gnus-uu.el:7.25 Wed Apr 12 04:00:49 2006 +++ gnus/lisp/gnus-uu.el Tue Apr 17 08:16:10 2007 @@ -1,7 +1,7 @@ ;;; gnus-uu.el --- extract (uu)encoded files in Gnus ;; Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, 1998, -;; 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Created: 2 Oct 1993 @@ -481,22 +481,25 @@ (if (and n (not (numberp n))) (setq message-forward-as-mime (not message-forward-as-mime) n nil)) - (let ((gnus-article-reply (gnus-summary-work-articles n)) - gnus-newsgroup-processable) + (let ((gnus-article-reply (gnus-summary-work-articles n))) (when (and (not n) (= (length gnus-article-reply) 1)) ;; The case where neither a number of articles nor a region is ;; specified. (gnus-summary-top-thread) (setq gnus-article-reply (nreverse (gnus-uu-find-articles-matching)))) - ;; Specify articles to be forwarded. Note that they should be - ;; reversed; see `gnus-uu-get-list-of-articles'. - (setq gnus-newsgroup-processable (reverse gnus-article-reply)) (gnus-setup-message 'forward (setq gnus-uu-digest-from-subject nil) (setq gnus-uu-digest-buffer (gnus-get-buffer-create " *gnus-uu-forward*")) - (gnus-uu-decode-save n file) + ;; Specify articles to be forwarded. Note that they should be + ;; reversed; see `gnus-uu-get-list-of-articles'. + (let ((gnus-newsgroup-processable (reverse gnus-article-reply))) + (gnus-uu-decode-save n file) + (setq gnus-article-reply gnus-newsgroup-processable)) + ;; Restore the value of `gnus-newsgroup-processable' to which + ;; it should be set when it is not `let'-bound. + (setq gnus-newsgroup-processable (reverse gnus-article-reply)) (switch-to-buffer gnus-uu-digest-buffer) (let ((fs gnus-uu-digest-from-subject)) (when fs Index: gnus/lisp/gnus-vm.el diff -u gnus/lisp/gnus-vm.el:7.5 gnus/lisp/gnus-vm.el:7.6 --- gnus/lisp/gnus-vm.el:7.5 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-vm.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-vm.el --- vm interface for Gnus ;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -;; 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Per Persson ;; Keywords: news, mail Index: gnus/lisp/gnus-win.el diff -u gnus/lisp/gnus-win.el:7.8 gnus/lisp/gnus-win.el:7.9 --- gnus/lisp/gnus-win.el:7.8 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/gnus-win.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; gnus-win.el --- window configuration functions for Gnus ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/gnus-xmas.el diff -u gnus/lisp/gnus-xmas.el:7.18 gnus/lisp/gnus-xmas.el:7.19 --- gnus/lisp/gnus-xmas.el:7.18 Sun Apr 30 11:44:06 2006 +++ gnus/lisp/gnus-xmas.el Wed Dec 27 06:35:44 2006 @@ -873,7 +873,9 @@ gnus-mailing-list-menu)) (defun gnus-xmas-image-type-available-p (type) - (and window-system + (and (if (fboundp 'display-images-p) + (display-images-p) + window-system) (featurep (if (eq type 'pbm) 'xbm type)))) (defun gnus-xmas-create-image (file &optional type data-p &rest props) Index: gnus/lisp/gnus.el diff -u gnus/lisp/gnus.el:7.54 gnus/lisp/gnus.el:7.62 --- gnus/lisp/gnus.el:7.54 Mon May 1 17:14:44 2006 +++ gnus/lisp/gnus.el Mon Mar 5 12:03:16 2007 @@ -1,7 +1,7 @@ ;;; gnus.el --- a newsreader for GNU Emacs ;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996, 1997, 1998, -;; 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Lars Magne Ingebrigtsen @@ -16,7 +16,7 @@ ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; 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 @@ -51,6 +51,10 @@ :group 'news :group 'mail) +(defgroup gnus-start nil + "Starting your favorite newsreader." + :group 'gnus) + (defgroup gnus-format nil "Dealing with formatting issues." :group 'gnus) @@ -70,10 +74,6 @@ "Article Registry." :group 'gnus) -(defgroup gnus-start nil - "Starting your favorite newsreader." - :group 'gnus) - (defgroup gnus-start-server nil "Server options at startup." :group 'gnus-start) @@ -279,10 +279,6 @@ :link '(custom-manual "(gnus)Various Various") :group 'gnus) -(defgroup gnus-mime nil - "Variables for controlling the Gnus MIME interface." - :group 'gnus) - (defgroup gnus-exit nil "Exiting Gnus." :link '(custom-manual "(gnus)Exiting Gnus") @@ -1034,23 +1030,23 @@ (t (insert (format " %s - _ ___ _ _ - _ ___ __ ___ __ _ ___ - __ _ ___ __ ___ - _ ___ _ - _ _ __ _ - ___ __ _ - __ _ - _ _ _ - _ _ _ - _ _ _ - __ ___ - _ _ _ _ - _ _ - _ _ - _ _ - _ - __ + _ ___ _ _ + _ ___ __ ___ __ _ ___ + __ _ ___ __ ___ + _ ___ _ + _ _ __ _ + ___ __ _ + __ _ + _ _ _ + _ _ _ + _ _ _ + __ ___ + _ _ _ _ + _ _ + _ _ + _ _ + _ + __ " "")) @@ -1250,6 +1246,11 @@ (when (re-search-forward "[^ \t\n\r]+" nil t) (match-string 0)))))) +;; `M-x customize-variable RET gnus-select-method RET' should work without +;; starting or even loading Gnus. +;;;###autoload(when (fboundp 'custom-autoload) +;;;###autoload (custom-autoload 'gnus-select-method "gnus")) + (defcustom gnus-select-method (condition-case nil (nconc @@ -1283,6 +1284,8 @@ There is a lot more to know about select methods and virtual servers - see the manual for details." :group 'gnus-server + :group 'gnus-start + :initialize 'custom-initialize-default :type 'gnus-select-method) (defcustom gnus-message-archive-method "archive" @@ -1328,7 +1331,7 @@ (defcustom gnus-nntp-server nil "*The name of the host running the NNTP server. -This variable is semi-obsolete. Use the `gnus-select-method' +This variable is semi-obsolete. Use the `gnus-select-method' variable instead." :group 'gnus-server :type '(choice (const :tag "disable" nil) @@ -1471,7 +1474,7 @@ (defcustom gnus-use-cross-reference t "*Non-nil means that cross referenced articles will be marked as read. If nil, ignore cross references. If t, mark articles as read in -subscribed newsgroups. If neither t nor nil, mark as read in all +subscribed newsgroups. If neither t nor nil, mark as read in all newsgroups." :group 'gnus-server :type '(choice (const :tag "off" nil) @@ -1685,7 +1688,7 @@ this method (i. e., `post', `mail', `none' or whatever) or other properties that this method has (like being respoolable). If you implement a new select method, all you should have to change is -this variable. I think." +this variable. I think." :group 'gnus-server :type '(repeat (group (string :tag "Name") (radio-button-choice (const :format "%v " post) @@ -1839,7 +1842,7 @@ "*Groups in which to perform expiry of all read articles. Use with extreme caution. All groups that match this regexp will be expiring - which means that all read articles will be deleted after -\(say) one week. (This only goes for mail groups and the like, of +\(say) one week. (This only goes for mail groups and the like, of course.)" :variable-group nnmail-expire :variable-type '(choice (const nil) @@ -3029,7 +3032,7 @@ The %U (status), %R (replied) and %z (zcore) specs have to be handled with care. For reasons of efficiency, Gnus will compute what column these characters will end up in, and \"hard-code\" that. This means that -it is invalid to have these specs after a variable-length spec. Well, +it is invalid to have these specs after a variable-length spec. Well, you might not be arrested, but your summary buffer will look strange, which is bad enough. @@ -3412,7 +3415,7 @@ (defun gnus-group-read-only-p (&optional group) "Check whether GROUP supports editing or not. -If GROUP is nil, `gnus-newsgroup-name' will be checked instead. Note +If GROUP is nil, `gnus-newsgroup-name' will be checked instead. Note that that variable is buffer-local to the summary buffers." (let ((group (or group gnus-newsgroup-name))) (not (gnus-check-backend-function 'request-replace-article group)))) @@ -3503,27 +3506,27 @@ ;; Perhaps it is already in the cache. (mapc (lambda (name-method) - (if (equal (cdr name-method) method) - (throw 'server-name (car name-method)))) - gnus-server-method-cache) + (if (equal (cdr name-method) method) + (throw 'server-name (car name-method)))) + gnus-server-method-cache) (mapc (lambda (server-alist) (mapc (lambda (name-method) - (when (gnus-methods-equal-p (cdr name-method) method) - (unless (member name-method gnus-server-method-cache) - (push name-method gnus-server-method-cache)) - (throw 'server-name (car name-method)))) - server-alist)) + (when (gnus-methods-equal-p (cdr name-method) method) + (unless (member name-method gnus-server-method-cache) + (push name-method gnus-server-method-cache)) + (throw 'server-name (car name-method)))) + server-alist)) (list gnus-server-alist gnus-predefined-server-alist)) (let* ((name (if (member (cadr method) '(nil "")) - (format "%s" (car method)) - (format "%s:%s" (car method) (cadr method)))) - (name-method (cons name method))) + (format "%s" (car method)) + (format "%s:%s" (car method) (cadr method)))) + (name-method (cons name method))) (unless (member name-method gnus-server-method-cache) - (push name-method gnus-server-method-cache)) + (push name-method gnus-server-method-cache)) name))) (defsubst gnus-server-to-method (server) @@ -3553,24 +3556,24 @@ (cadar servers))))) (pop servers)) (car servers)) - ;; This could be some sort of foreign server that I - ;; simply haven't opened (yet). Do a brute-force scan - ;; of the entire gnus-newsrc-alist for the server name - ;; of every method. As a side-effect, loads the - ;; gnus-server-method-cache so this only happens once, - ;; if at all. - (let (match) - (mapcar - (lambda (info) - (let ((info-method (gnus-info-method info))) - (unless (stringp info-method) - (let ((info-server (gnus-method-to-server info-method))) - (when (equal server info-server) - (setq match info-method)))))) - (cdr gnus-newsrc-alist)) - match)))) - (when result - (push (cons server result) gnus-server-method-cache)) + ;; This could be some sort of foreign server that I + ;; simply haven't opened (yet). Do a brute-force scan + ;; of the entire gnus-newsrc-alist for the server name + ;; of every method. As a side-effect, loads the + ;; gnus-server-method-cache so this only happens once, + ;; if at all. + (let (match) + (mapcar + (lambda (info) + (let ((info-method (gnus-info-method info))) + (unless (stringp info-method) + (let ((info-server (gnus-method-to-server info-method))) + (when (equal server info-server) + (setq match info-method)))))) + (cdr gnus-newsrc-alist)) + match)))) + (when result + (push (cons server result) gnus-server-method-cache)) result))) (defsubst gnus-server-get-method (group method) @@ -3837,7 +3840,7 @@ (if simple-results ;; Found results; return them. (car simple-results) - ;; We didn't found it there, try `gnus-parameters'. + ;; We didn't find it there, try `gnus-parameters'. (let ((result nil) (head nil) (tail gnus-parameters)) @@ -4084,7 +4087,7 @@ (not method))) (defun gnus-server-extend-method (group method) - ;; This function "extends" a virtual server. If the server is + ;; This function "extends" a virtual server. If the server is ;; "hello", and the select method is ("hello" (my-var "something")) ;; in the group "alt.alt", this will result in a new virtual server ;; called "hello+alt.alt". @@ -4123,8 +4126,13 @@ (or gnus-override-method (and (not group) gnus-select-method) - (and (not (gnus-group-entry group)) ;; a new group - (gnus-group-name-to-method group)) + (and (not (gnus-group-entry group)) + ;; Killed or otherwise unknown group. + (or + ;; If we know a virtual server by that name, return its method. + (gnus-server-to-method (gnus-group-server group)) + ;; Guess a new method as last resort. + (gnus-group-name-to-method group))) (let ((info (or info (gnus-get-info group))) method) (if (or (not info) @@ -4230,10 +4238,10 @@ "Say whether METHOD is covered by the agent." (or (eq (car gnus-agent-method-p-cache) method) (setq gnus-agent-method-p-cache - (cons method - (member (if (stringp method) - method - (gnus-method-to-server method)) gnus-agent-covered-methods)))) + (cons method + (member (if (stringp method) + method + (gnus-method-to-server method)) gnus-agent-covered-methods)))) (cdr gnus-agent-method-p-cache)) (defun gnus-online (method) Index: gnus/lisp/hashcash.el diff -u gnus/lisp/hashcash.el:7.18 gnus/lisp/hashcash.el:7.19 --- gnus/lisp/hashcash.el:7.18 Sat Apr 15 20:12:07 2006 +++ gnus/lisp/hashcash.el Sat Mar 24 18:20:56 2007 @@ -1,6 +1,6 @@ ;;; hashcash.el --- Add hashcash payments to email -;; Copyright (C) 2003, 2004, 2005 Free Software Foundation +;; Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation ;; Written by: Paul Foley (1997-2002) ;; Maintainer: Paul Foley @@ -164,7 +164,8 @@ (defun hashcash-generate-payment-async (str val callback) "Generate a hashcash payment by finding a VAL-bit collison on STR. Return immediately. Call CALLBACK with process and result when ready." - (if (> val 0) + (if (and (> val 0) + hashcash-path) (let ((process (apply 'start-process "hashcash" nil hashcash-path "-m" "-q" "-b" (number-to-string val) str @@ -174,7 +175,7 @@ hashcash-process-alist)) (set-process-filter process `(lambda (process output) (funcall ,callback process output)))) - (funcall callback nil))) + (funcall callback nil nil))) (defun hashcash-check-payment (token str val) "Check the validity of a hashcash payment." Index: gnus/lisp/hex-util.el diff -u gnus/lisp/hex-util.el:7.5 gnus/lisp/hex-util.el:7.6 --- gnus/lisp/hex-util.el:7.5 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/hex-util.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; hex-util.el --- Functions to encode/decode hexadecimal string. ;; Copyright (C) 1999, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Shuhei KOBAYASHI ;; Keywords: data Index: gnus/lisp/html2text.el diff -u gnus/lisp/html2text.el:7.16 gnus/lisp/html2text.el:7.18 --- gnus/lisp/html2text.el:7.16 Fri Feb 17 01:25:20 2006 +++ gnus/lisp/html2text.el Wed Jan 24 08:15:37 2007 @@ -1,6 +1,6 @@ ;;; html2text.el --- a simple html to plain text converter -;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Joakim Hove @@ -456,7 +456,9 @@ (p3) (p4)) (search-backward "<" (point-min) t) (setq p1 (point)) - (search-forward (format "" tag) (point-max) t) + (unless (search-forward (format "" tag) (point-max) t) + (goto-char p2) + (insert (format "" tag))) (setq p4 (point)) (search-backward " ;; This file is part of GNU Emacs. Index: gnus/lisp/imap.el diff -u gnus/lisp/imap.el:7.28 gnus/lisp/imap.el:7.30 --- gnus/lisp/imap.el:7.28 Mon Apr 17 18:04:54 2006 +++ gnus/lisp/imap.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; imap.el --- imap library ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Keywords: mail @@ -80,7 +80,7 @@ ;; LOGINDISABLED) (with use of external library starttls.el and ;; program starttls), and the GSSAPI / kerberos V4 sections of RFC1731 ;; (with use of external program `imtest'), RFC2971 (ID). It also -;; take advantage the UNSELECT extension in Cyrus IMAPD. +;; takes advantage of the UNSELECT extension in Cyrus IMAPD. ;; ;; Without the work of John McClary Prevost and Jim Radford this library ;; would not have seen the light of day. Many thanks. Index: gnus/lisp/legacy-gnus-agent.el diff -u gnus/lisp/legacy-gnus-agent.el:1.6 gnus/lisp/legacy-gnus-agent.el:1.8 --- gnus/lisp/legacy-gnus-agent.el:1.6 Thu Jun 16 07:51:57 2005 +++ gnus/lisp/legacy-gnus-agent.el Wed Jan 24 08:15:37 2007 @@ -1,10 +1,39 @@ +;;; gnus-agent.el --- Legacy unplugged support for Gnus + +;; Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + +;; Author: Kevin Greiner +;; Keywords: news + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; Conversion functions for the Agent. + +;;; Code: (require 'gnus-start) (require 'gnus-util) (require 'gnus-range) (require 'gnus-agent) -; Oort Gnus v0.08 - This release updated agent to no longer use -; history file and to support a compressed alist. +;; Oort Gnus v0.08 - This release updated agent to no longer use +;; history file and to support a compressed alist. (defvar gnus-agent-compressed-agentview-search-only nil) @@ -224,4 +253,7 @@ ;; the .newsrc.eld file. (gnus-convert-mark-converter-prompt 'gnus-agent-unhook-expire-days t) -;;; arch-tag: 845c7b8a-88f7-4468-b8d7-94e8fc72cf1a +(provide 'legacy-gnus-agent) + +;; arch-tag: 845c7b8a-88f7-4468-b8d7-94e8fc72cf1a +;;; legacy-gnus-agent.el ends here Index: gnus/lisp/lpath.el diff -u gnus/lisp/lpath.el:7.20 gnus/lisp/lpath.el:7.28 --- gnus/lisp/lpath.el:7.20 Thu Apr 27 18:08:50 2006 +++ gnus/lisp/lpath.el Wed Jan 24 14:13:25 2007 @@ -10,33 +10,36 @@ (mapcar (lambda (var) (unless (boundp var) (set var nil))) args)) (maybe-fbind '(Info-directory - Info-menu create-image display-graphic-p - display-time-event-handler find-coding-system find-image - image-size image-type-available-p insert-image - line-number-at-pos make-mode-line-mouse-map make-temp-file - propertize put-image replace-regexp-in-string - rmail-msg-is-pruned rmail-msg-restore-non-pruned-header - sort-coding-systems tool-bar-add-item - tool-bar-add-item-from-menu tool-bar-local-item-from-menu + Info-menu clear-string cp-supported-codepages create-image + custom-autoload display-graphic-p display-time-event-handler + epg-check-configuration find-coding-system find-image image-size + image-type-available-p insert-image line-number-at-pos + make-mode-line-mouse-map make-network-process make-temp-file + propertize put-image rmail-msg-is-pruned + rmail-msg-restore-non-pruned-header sort-coding-systems + tool-bar-add-item tool-bar-add-item-from-menu + tool-bar-local-item-from-menu unicode-precedence-list url-generic-parse-url url-http-file-exists-p url-insert-file-contents vcard-pretty-print w32-focus-frame w3m-detect-meta-charset w3m-region x-focus-frame)) (maybe-bind '(eudc-protocol filladapt-mode rmail-insert-mime-forwarded-message-function - w3-meta-charset-content-type-regexp + url-version w3-meta-charset-content-type-regexp w3-meta-content-type-charset-regexp)) (if (featurep 'xemacs) (progn (maybe-fbind '(codepage-setup - delete-overlay detect-coding-string eudc-expand-inline - event-click-count event-end event-start + delete-overlay detect-coding-string display-images-p + eudc-expand-inline event-click-count event-end event-start find-coding-systems-for-charsets find-coding-systems-region find-coding-systems-string mail-abbrevs-setup mouse-minibuffer-check mouse-movement-p mouse-scroll-subr overlay-lists posn-point posn-window read-event set-buffer-multibyte - select-frame-set-input-focus track-mouse window-edges)) + select-frame-set-input-focus select-safe-coding-system + string-as-multibyte timer-set-function track-mouse + window-edges)) (maybe-bind '(adaptive-fill-first-line-regexp buffer-display-table buffer-file-coding-system current-language-environment cursor-in-non-selected-windows @@ -44,21 +47,21 @@ enable-multibyte-characters gnus-agent-expire-current-dirs language-info-alist mark-active mouse-selection-click-count mouse-selection-click-count-buffer pgg-parse-crc24 - temporary-file-directory transient-mark-mode))) + temporary-file-directory timer-list transient-mark-mode))) (maybe-fbind '(bbdb-complete-name delete-annotation delete-extent device-connection dfw-device - events-to-keys font-lock-set-defaults frame-device + events-to-keys find-face font-lock-set-defaults frame-device get-char-table glyph-height glyph-width ldap-search-entries mail-aliases-setup make-annotation make-event make-glyph - make-network-process map-extents message-xmas-redefine - put-char-table set-extent-property temp-directory + map-extents message-xmas-redefine put-char-table + set-extent-property set-itimer-function temp-directory valid-image-instantiator-format-p w3-coding-system-for-mime-charset w3-do-setup w3-prepare-buffer w3-region window-pixel-height window-pixel-width)) - (maybe-bind '(help-echo-owns-message mail-mode-hook mm-w3m-mode-map - show-nonbreak-escape - nobreak-char-display))) + (maybe-bind '(help-echo-owns-message + itimer-list mail-mode-hook mm-w3m-mode-map nobreak-char-display + show-nonbreak-escape))) (when (and (featurep 'xemacs) (not (featurep 'mule))) @@ -68,9 +71,10 @@ pgg-parse-crc24-string)) (unless (featurep 'file-coding) (maybe-fbind '(coding-system-base - coding-system-list coding-system-p decode-coding-region - decode-coding-string detect-coding-region - encode-coding-region encode-coding-string)))) + coding-system-change-eol-conversion coding-system-list + coding-system-p decode-coding-region decode-coding-string + detect-coding-region encode-coding-region + encode-coding-string)))) (defun nnkiboze-score-file (a) ) Index: gnus/lisp/mail-parse.el diff -u gnus/lisp/mail-parse.el:7.6 gnus/lisp/mail-parse.el:7.9 --- gnus/lisp/mail-parse.el:7.6 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/mail-parse.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; mail-parse.el --- Interface functions for parsing mail -;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; This file is part of GNU Emacs. @@ -71,6 +71,8 @@ (defalias 'mail-encode-encoded-word-string 'rfc2047-encode-string) (defalias 'mail-decode-encoded-word-region 'rfc2047-decode-region) (defalias 'mail-decode-encoded-word-string 'rfc2047-decode-string) +(defalias 'mail-decode-encoded-address-region 'rfc2047-decode-address-region) +(defalias 'mail-decode-encoded-address-string 'rfc2047-decode-address-string) (provide 'mail-parse) Index: gnus/lisp/mail-prsvr.el diff -u gnus/lisp/mail-prsvr.el:7.5 gnus/lisp/mail-prsvr.el:7.7 --- gnus/lisp/mail-prsvr.el:7.5 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/mail-prsvr.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; mail-prsvr.el --- Interface variables for parsing mail -;; Copyright (C) 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; This file is part of GNU Emacs. Index: gnus/lisp/mail-source.el diff -u gnus/lisp/mail-source.el:7.17 gnus/lisp/mail-source.el:7.19 --- gnus/lisp/mail-source.el:7.17 Sun Apr 30 11:44:06 2006 +++ gnus/lisp/mail-source.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; mail-source.el --- functions for fetching mail ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news, mail @@ -62,184 +62,186 @@ See Info node `(gnus)Mail Source Specifiers'." :group 'mail-source :link '(custom-manual "(gnus)Mail Source Specifiers") - :type `(repeat - (choice :format "%[Value Menu%] %v" - :value (file) - (cons :tag "Spool file" - (const :format "" file) - (checklist :tag "Options" :greedy t - (group :inline t - (const :format "" :value :path) - file))) - (cons :tag "Several files in a directory" - (const :format "" directory) - (checklist :tag "Options" :greedy t - (group :inline t - (const :format "" :value :path) - (directory :tag "Path")) - (group :inline t - (const :format "" :value :suffix) - (string :tag "Suffix")) - (group :inline t - (const :format "" :value :predicate) - (function :tag "Predicate")) - (group :inline t - (const :format "" :value :prescript) - (choice :tag "Prescript" - :value nil - (string :format "%v") - (function :format "%v"))) - (group :inline t - (const :format "" :value :postscript) - (choice :tag "Postscript" - :value nil - (string :format "%v") - (function :format "%v"))) - (group :inline t - (const :format "" :value :plugged) - (boolean :tag "Plugged")))) - (cons :tag "POP3 server" - (const :format "" pop) - (checklist :tag "Options" :greedy t - (group :inline t - (const :format "" :value :server) - (string :tag "Server")) - (group :inline t - (const :format "" :value :port) - (choice :tag "Port" - :value "pop3" - (integer :format "%v") - (string :format "%v"))) - (group :inline t - (const :format "" :value :user) - (string :tag "User")) - (group :inline t - (const :format "" :value :password) - (string :tag "Password")) - (group :inline t - (const :format "" :value :program) - (string :tag "Program")) - (group :inline t - (const :format "" :value :prescript) - (choice :tag "Prescript" - :value nil - (string :format "%v") - (function :format "%v") - (const :tag "None" nil))) - (group :inline t - (const :format "" :value :postscript) - (choice :tag "Postscript" - :value nil - (string :format "%v") - (function :format "%v") - (const :tag "None" nil))) - (group :inline t - (const :format "" :value :function) - (function :tag "Function")) - (group :inline t - (const :format "" - :value :authentication) - (choice :tag "Authentication" - :value apop - (const password) - (const apop))) - (group :inline t - (const :format "" :value :plugged) - (boolean :tag "Plugged")) - (group :inline t - (const :format "" :value :stream) - (choice :tag "Stream" - :value nil - (const :tag "Clear" nil) - (const starttls) - (const :tag "SSL/TLS" ssl))))) - (cons :tag "Maildir (qmail, postfix...)" - (const :format "" maildir) - (checklist :tag "Options" :greedy t - (group :inline t - (const :format "" :value :path) - (directory :tag "Path")) - (group :inline t - (const :format "" :value :plugged) - (boolean :tag "Plugged")))) - (cons :tag "IMAP server" - (const :format "" imap) - (checklist :tag "Options" :greedy t - (group :inline t - (const :format "" :value :server) - (string :tag "Server")) - (group :inline t - (const :format "" :value :port) - (choice :tag "Port" - :value 143 - integer string)) - (group :inline t - (const :format "" :value :user) - (string :tag "User")) - (group :inline t - (const :format "" :value :password) - (string :tag "Password")) - (group :inline t - (const :format "" :value :stream) - (choice :tag "Stream" - :value network - ,@mail-source-imap-streams)) - (group :inline t - (const :format "" :value :program) - (string :tag "Program")) - (group :inline t - (const :format "" - :value :authenticator) - (choice :tag "Authenticator" - :value login - ,@mail-source-imap-authenticators)) - (group :inline t - (const :format "" :value :mailbox) - (string :tag "Mailbox" - :value "INBOX")) - (group :inline t - (const :format "" :value :predicate) - (string :tag "Predicate" - :value "UNSEEN UNDELETED")) - (group :inline t - (const :format "" :value :fetchflag) - (string :tag "Fetchflag" - :value "\\Deleted")) - (group :inline t - (const :format "" - :value :dontexpunge) - (boolean :tag "Dontexpunge")) - (group :inline t - (const :format "" :value :plugged) - (boolean :tag "Plugged")))) - (cons :tag "Webmail server" - (const :format "" webmail) - (checklist :tag "Options" :greedy t - (group :inline t - (const :format "" :value :subtype) - ;; Should be generated from - ;; `webmail-type-definition', but we - ;; can't require webmail without W3. - (choice :tag "Subtype" - :value hotmail - (const hotmail) - (const yahoo) - (const netaddress) - (const netscape) - (const my-deja))) - (group :inline t - (const :format "" :value :user) - (string :tag "User")) - (group :inline t - (const :format "" :value :password) - (string :tag "Password")) - (group :inline t - (const :format "" - :value :dontexpunge) - (boolean :tag "Dontexpunge")) - (group :inline t - (const :format "" :value :plugged) - (boolean :tag "Plugged"))))))) + :type `(choice + (const nil) + (repeat + (choice :format "%[Value Menu%] %v" + :value (file) + (cons :tag "Spool file" + (const :format "" file) + (checklist :tag "Options" :greedy t + (group :inline t + (const :format "" :value :path) + file))) + (cons :tag "Several files in a directory" + (const :format "" directory) + (checklist :tag "Options" :greedy t + (group :inline t + (const :format "" :value :path) + (directory :tag "Path")) + (group :inline t + (const :format "" :value :suffix) + (string :tag "Suffix")) + (group :inline t + (const :format "" :value :predicate) + (function :tag "Predicate")) + (group :inline t + (const :format "" :value :prescript) + (choice :tag "Prescript" + :value nil + (string :format "%v") + (function :format "%v"))) + (group :inline t + (const :format "" :value :postscript) + (choice :tag "Postscript" + :value nil + (string :format "%v") + (function :format "%v"))) + (group :inline t + (const :format "" :value :plugged) + (boolean :tag "Plugged")))) + (cons :tag "POP3 server" + (const :format "" pop) + (checklist :tag "Options" :greedy t + (group :inline t + (const :format "" :value :server) + (string :tag "Server")) + (group :inline t + (const :format "" :value :port) + (choice :tag "Port" + :value "pop3" + (integer :format "%v") + (string :format "%v"))) + (group :inline t + (const :format "" :value :user) + (string :tag "User")) + (group :inline t + (const :format "" :value :password) + (string :tag "Password")) + (group :inline t + (const :format "" :value :program) + (string :tag "Program")) + (group :inline t + (const :format "" :value :prescript) + (choice :tag "Prescript" + :value nil + (string :format "%v") + (function :format "%v") + (const :tag "None" nil))) + (group :inline t + (const :format "" :value :postscript) + (choice :tag "Postscript" + :value nil + (string :format "%v") + (function :format "%v") + (const :tag "None" nil))) + (group :inline t + (const :format "" :value :function) + (function :tag "Function")) + (group :inline t + (const :format "" + :value :authentication) + (choice :tag "Authentication" + :value apop + (const password) + (const apop))) + (group :inline t + (const :format "" :value :plugged) + (boolean :tag "Plugged")) + (group :inline t + (const :format "" :value :stream) + (choice :tag "Stream" + :value nil + (const :tag "Clear" nil) + (const starttls) + (const :tag "SSL/TLS" ssl))))) + (cons :tag "Maildir (qmail, postfix...)" + (const :format "" maildir) + (checklist :tag "Options" :greedy t + (group :inline t + (const :format "" :value :path) + (directory :tag "Path")) + (group :inline t + (const :format "" :value :plugged) + (boolean :tag "Plugged")))) + (cons :tag "IMAP server" + (const :format "" imap) + (checklist :tag "Options" :greedy t + (group :inline t + (const :format "" :value :server) + (string :tag "Server")) + (group :inline t + (const :format "" :value :port) + (choice :tag "Port" + :value 143 + integer string)) + (group :inline t + (const :format "" :value :user) + (string :tag "User")) + (group :inline t + (const :format "" :value :password) + (string :tag "Password")) + (group :inline t + (const :format "" :value :stream) + (choice :tag "Stream" + :value network + ,@mail-source-imap-streams)) + (group :inline t + (const :format "" :value :program) + (string :tag "Program")) + (group :inline t + (const :format "" + :value :authenticator) + (choice :tag "Authenticator" + :value login + ,@mail-source-imap-authenticators)) + (group :inline t + (const :format "" :value :mailbox) + (string :tag "Mailbox" + :value "INBOX")) + (group :inline t + (const :format "" :value :predicate) + (string :tag "Predicate" + :value "UNSEEN UNDELETED")) + (group :inline t + (const :format "" :value :fetchflag) + (string :tag "Fetchflag" + :value "\\Deleted")) + (group :inline t + (const :format "" + :value :dontexpunge) + (boolean :tag "Dontexpunge")) + (group :inline t + (const :format "" :value :plugged) + (boolean :tag "Plugged")))) + (cons :tag "Webmail server" + (const :format "" webmail) + (checklist :tag "Options" :greedy t + (group :inline t + (const :format "" :value :subtype) + ;; Should be generated from + ;; `webmail-type-definition', but we + ;; can't require webmail without W3. + (choice :tag "Subtype" + :value hotmail + (const hotmail) + (const yahoo) + (const netaddress) + (const netscape) + (const my-deja))) + (group :inline t + (const :format "" :value :user) + (string :tag "User")) + (group :inline t + (const :format "" :value :password) + (string :tag "Password")) + (group :inline t + (const :format "" + :value :dontexpunge) + (boolean :tag "Dontexpunge")) + (group :inline t + (const :format "" :value :plugged) + (boolean :tag "Plugged")))))))) (defcustom mail-source-ignore-errors nil "*Ignore errors when querying mail sources. Index: gnus/lisp/mailcap.el diff -u gnus/lisp/mailcap.el:7.9 gnus/lisp/mailcap.el:7.10 --- gnus/lisp/mailcap.el:7.9 Tue Jan 31 02:11:48 2006 +++ gnus/lisp/mailcap.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; mailcap.el --- MIME media types configuration ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: William M. Perry ;; Lars Magne Ingebrigtsen Index: gnus/lisp/message.el diff -u gnus/lisp/message.el:7.170 gnus/lisp/message.el:7.211 --- gnus/lisp/message.el:7.170 Sun Apr 30 12:26:47 2006 +++ gnus/lisp/message.el Fri Apr 27 10:39:17 2007 @@ -1,7 +1,7 @@ ;;; message.el --- composing mail and news messages ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: mail, news @@ -51,6 +51,7 @@ (require 'rfc822) (require 'ecomplete) + (defgroup message '((user-mail-address custom-variable) (user-full-name custom-variable)) "Mail and news message composing." @@ -154,7 +155,6 @@ :group 'message-interface :type 'regexp) -;;;###autoload (defcustom message-from-style 'default "*Specifies how \"From\" headers look. @@ -188,14 +188,13 @@ Don't touch this variable unless you really know what you're doing. -Checks include `subject-cmsg', `multiple-headers', `sendsys', -`message-id', `from', `long-lines', `control-chars', `size', -`new-text', `quoting-style', `redirected-followup', `signature', -`approved', `sender', `empty', `empty-headers', `message-id', `from', -`subject', `shorten-followup-to', `existing-newsgroups', -`buffer-file-name', `unchanged', `newsgroups', `reply-to', -`continuation-headers', `long-header-lines', `invisible-text' and -`illegible-text'." +Checks include `approved', `continuation-headers', `control-chars', +`empty', `existing-newsgroups', `from', `illegible-text', +`invisible-text', `long-header-lines', `long-lines', `message-id', +`multiple-headers', `new-text', `newsgroups', `quoting-style', +`repeated-newsgroups', `reply-to', `sender', `sendsys', `shoot', +`shorten-followup-to', `signature', `size', `subject', `subject-cmsg' +and `valid-newsgroups'." :group 'message-news :type '(repeat sexp)) ; Fixme: improve this @@ -210,7 +209,7 @@ :link '(custom-manual "(message)Message Headers") :type '(repeat sexp)) -(defcustom message-draft-headers '(References From) +(defcustom message-draft-headers '(References From Date) "*Headers to be generated when saving a draft message." :version "22.1" :group 'message-news @@ -225,7 +224,7 @@ "*Headers to be generated or prompted for when posting an article. RFC977 and RFC1036 require From, Date, Newsgroups, Subject, Message-ID. Organization, Lines, In-Reply-To, Expires, and -User-Agent are optional. If don't you want message to insert some +User-Agent are optional. If you don't want message to insert some header, remove it from this list." :group 'message-news :group 'message-headers @@ -303,7 +302,7 @@ :version "22.1" :type '(choice (const :tag "never" nil) (const :tag "always strip" t) - (const ask)) + (const ask)) :link '(custom-manual "(message)Message Headers") :group 'message-various) @@ -410,7 +409,6 @@ ;;; End of variables adopted from `message-utils.el'. -;;;###autoload (defcustom message-signature-separator "^-- *$" "Regexp matching the signature separator." :type 'regexp @@ -432,16 +430,36 @@ :type 'boolean) (defcustom message-generate-new-buffers 'unique - "*Non-nil means create a new message buffer whenever `message-setup' is called. -If this is a function, call that function with three parameters: The type, -the to address and the group name. (Any of these may be nil.) The function -should return the new buffer name." + "*Say whether to create a new message buffer to compose a message. +Valid values include: + +nil + Generate the buffer name in the Message way (e.g., *mail*, *news*, + *mail to whom*, *news on group*, etc.) and continue editing in the + existing buffer of that name. If there is no such buffer, it will + be newly created. + +`unique' or t + Create the new buffer with the name generated in the Message way. + +`unsent' + Similar to `unique' but the buffer name begins with \"*unsent \". + +`standard' + Similar to nil but the buffer name is simpler like *mail message*. + +function + If this is a function, call that function with three parameters: + The type, the To address and the group name (any of these may be nil). + The function should return the new buffer name." :group 'message-buffers :link '(custom-manual "(message)Message Buffers") - :type '(choice (const :tag "off" nil) - (const :tag "unique" unique) - (const :tag "unsent" unsent) - (function fun))) + :type '(choice (const nil) + (sexp :tag "unique" :format "unique\n" :value unique + :match (lambda (widget value) (memq value '(unique t)))) + (const unsent) + (const standard) + (function :format "\n %{%t%}: %v"))) (defcustom message-kill-buffer-on-exit nil "*Non-nil means that the message buffer will be killed after sending a message." @@ -470,7 +488,6 @@ :type '(choice string (const :tag "consult file" t))) -;;;###autoload (defcustom message-user-organization-file (let (orgfile) (dolist (f (list "/etc/organization" @@ -587,7 +604,13 @@ :version "22.1" :group 'message-insertion :link '(custom-manual "(message)Insertion Variables") - :type 'regexp) + :type 'regexp + :set (lambda (symbol value) + (prog1 + (custom-set-default symbol value) + (if (boundp 'gnus-message-cite-prefix-regexp) + (setq gnus-message-cite-prefix-regexp + (concat "^\\(?:" value "\\)")))))) (defcustom message-cancel-message "I am canceling my own article.\n" "Message to be inserted in the cancel message." @@ -596,7 +619,6 @@ :type 'string) ;; Useful to set in site-init.el -;;;###autoload (defcustom message-send-mail-function (let ((program (if (boundp 'sendmail-program) ;; see paths.el @@ -766,6 +788,14 @@ :link '(custom-manual "(message)Mail Variables") :group 'message-sending) +(defcustom message-sendmail-extra-arguments nil + "Additional arguments to `sendmail-program'." + ;; E.g. '("-a" "account") for msmtp + :version "23.0" ;; No Gnus + :type '(repeat string) + ;; :link '(custom-manual "(message)Mail Variables") + :group 'message-sending) + ;; qmail-related stuff (defcustom message-qmail-inject-program "/var/qmail/bin/qmail-inject" "Location of the qmail-inject program." @@ -822,9 +852,18 @@ :group 'message-headers :link '(custom-manual "(message)Message Headers") :type '(choice (const :tag "None" nil) - (const :tag "References" '(references)) - (const :tag "All" t) - (repeat (sexp :tag "Header")))) + (const :tag "References" '(references)) + (const :tag "All" t) + (repeat (sexp :tag "Header")))) + +(defcustom message-fill-column 72 + "Column beyond which automatic line-wrapping should happen. +Local value for message buffers. If non-nil, also turn on +auto-fill in message buffers." + :group 'message-various + ;; :link '(custom-manual "(message)Message Headers") + :type '(choice (const :tag "Don't turn on auto fill" nil) + (integer))) (defcustom message-setup-hook nil "Normal hook, run each time a new outgoing message is initialized. @@ -871,7 +910,6 @@ :version "22.1" :group 'message-various) -;;;###autoload (defcustom message-citation-line-function 'message-insert-citation-line "*Function called to insert the \"Whomever writes:\" line. @@ -890,7 +928,7 @@ :link '(custom-manual "(message)Insertion Variables") :group 'message-insertion) -(defcustom message-citation-line-format "On %a, %b %d %Y, %n wrote:" +(defcustom message-citation-line-format "On %a, %b %d %Y, %N wrote:" "Format of the \"Whomever writes:\" line. The string is formatted using `format-spec'. The following @@ -917,7 +955,6 @@ :version "23.0" ;; No Gnus :group 'message-insertion) -;;;###autoload (defcustom message-yank-prefix "> " "*Prefix inserted on the lines of yanked messages. Fix `message-cite-prefix-regexp' if it is set to an abnormal value. @@ -950,7 +987,6 @@ :link '(custom-manual "(message)Insertion Variables") :type 'integer) -;;;###autoload (defcustom message-cite-function 'message-cite-original "*Function for citing an original message. Predefined functions include `message-cite-original' and @@ -963,7 +999,6 @@ :link '(custom-manual "(message)Insertion Variables") :group 'message-insertion) -;;;###autoload (defcustom message-indent-citation-function 'message-indent-citation "*Function for modifying a citation just inserted in the mail buffer. This can also be a list of functions. Each function can find the @@ -973,7 +1008,6 @@ :link '(custom-manual "(message)Insertion Variables") :group 'message-insertion) -;;;###autoload (defcustom message-signature t "*String to be inserted at the end of the message buffer. If t, the `message-signature-file' file will be inserted instead. @@ -983,16 +1017,26 @@ :link '(custom-manual "(message)Insertion Variables") :group 'message-insertion) -;;;###autoload (defcustom message-signature-file "~/.signature" "*Name of file containing the text inserted at end of message buffer. Ignored if the named file doesn't exist. -If nil, don't insert a signature." +If nil, don't insert a signature. +If a path is specified, the value of `message-signature-directory' is ignored, +even if set." :type '(choice file (const :tags "None" nil)) :link '(custom-manual "(message)Insertion Variables") :group 'message-insertion) -;;;###autoload +(defcustom message-signature-directory nil + "*Name of directory containing signature files. +Comes in handy if you have many such files, handled via posting styles for +instance. +If nil, `message-signature-file' is expected to specify the directory if +needed." + :type '(choice string (const :tags "None" nil)) + :link '(custom-manual "(message)Insertion Variables") + :group 'message-insertion) + (defcustom message-signature-insert-empty-line t "*If non-nil, insert an empty line before the signature separator." :version "22.1" @@ -1160,13 +1204,18 @@ (defcustom message-dont-reply-to-names (and (boundp 'rmail-dont-reply-to-names) rmail-dont-reply-to-names) - "*A regexp specifying addresses to prune when doing wide replies. -A value of nil means exclude your own user name only." + "*Addresses to prune when doing wide replies. +This can be a regexp or a list of regexps. Also, a value of nil means +exclude your own user name only." :version "21.1" :group 'message :link '(custom-manual "(message)Wide Reply") :type '(choice (const :tag "Yourself" nil) - regexp)) + regexp + (repeat :tag "Regexp List" regexp))) + +(defsubst message-dont-reply-to-names () + (gmm-regexp-concat message-dont-reply-to-names)) (defvar message-shoot-gnksa-feet nil "*A list of GNKSA feet you are allowed to shoot. @@ -1178,7 +1227,7 @@ `quoted-text-only' Allow you to post quoted text only; `multiple-copies' Allow you to post multiple copies; `cancel-messages' Allow you to cancel or supersede messages from - your other email addresses.") + your other email addresses.") (defsubst message-gnksa-enable-p (feature) (or (not (listp message-shoot-gnksa-feet)) @@ -1568,10 +1617,16 @@ (defcustom message-generate-hashcash (if (executable-find "hashcash") t) "*Whether to generate X-Hashcash: headers. +If `t', always generate hashcash headers. If `opportunistic', +only generate hashcash headers if it can be done without the user +waiting (i.e., only asynchronously). + You must have the \"hashcash\" binary installed, see `hashcash-path'." :group 'message-headers :link '(custom-manual "(message)Mail Headers") - :type 'boolean) + :type '(choice (const :tag "Always" t) + (const :tag "Never" nil) + (const :tag "Opportunistic" opportunistic))) ;;; Internal variables. @@ -1686,7 +1741,7 @@ (defvar message-send-mail-real-function nil "Internal send mail function.") -(defvar message-bogus-system-names "^localhost\\." +(defvar message-bogus-system-names "^localhost\\.\\|\\.local$" "The regexp of bogus system names.") (defcustom message-valid-fqdn-regexp @@ -1722,6 +1777,7 @@ (autoload 'gnus-output-to-mail "gnus-util") (autoload 'gnus-output-to-rmail "gnus-util") (autoload 'gnus-request-post "gnus-int") + (autoload 'gnus-select-frame-set-input-focus "gnus-util") (autoload 'gnus-server-string "gnus") (autoload 'idna-to-ascii "idna") (autoload 'message-setup-toolbar "messagexmas") @@ -1895,6 +1951,96 @@ (substring subject (match-end 0)) subject)) +(defcustom message-replacement-char "." + "Replacement character used instead of unprintable or not decodable chars." + :group 'message-various + :version "22.1" ;; Gnus 5.10.9 + :type '(choice string + (const ".") + (const "?"))) + +;; FIXME: We also should call `message-strip-subject-encoded-words' +;; when forwarding. Probably in `message-make-forward-subject' and +;; `message-forward-make-body'. + +(defun message-strip-subject-encoded-words (subject) + "Fix non-decodable words in SUBJECT." + ;; Cf. `gnus-simplify-subject-fully'. + (let* ((case-fold-search t) + (replacement-chars (format "[%s%s%s]" + message-replacement-char + message-replacement-char + message-replacement-char)) + (enc-word-re "=\\?\\([^?]+\\)\\?\\([QB]\\)\\?\\([^?]+\\)\\(\\?=\\)") + cs-string + (have-marker + (with-temp-buffer + (insert subject) + (goto-char (point-min)) + (when (re-search-forward enc-word-re nil t) + (setq cs-string (match-string 1))))) + cs-coding q-or-b word-beg word-end) + (if (or (not have-marker) ;; No encoded word found... + ;; ... or double encoding was correct: + (and (stringp cs-string) + (setq cs-string (downcase cs-string)) + (mm-coding-system-p (intern cs-string)) + (not (prog1 + (y-or-n-p + (format "\ +Decoded Subject \"%s\" +contains a valid encoded word. Decode again? " + subject)) + (setq cs-coding (intern cs-string)))))) + subject + (with-temp-buffer + (insert subject) + (goto-char (point-min)) + (while (re-search-forward enc-word-re nil t) + (setq cs-string (downcase (match-string 1)) + q-or-b (match-string 2) + word-beg (match-beginning 0) + word-end (match-end 0)) + (setq cs-coding + (if (mm-coding-system-p (intern cs-string)) + (setq cs-coding (intern cs-string)) + nil)) + ;; No double encoded subject? => bogus charset. + (unless cs-coding + (setq cs-coding + (mm-read-coding-system + (format "\ +Decoded Subject \"%s\" +contains an encoded word. The charset `%s' is unknown or invalid. +Hit RET to replace non-decodable characters with \"%s\" or enter replacement +charset: " + subject cs-string message-replacement-char))) + (if cs-coding + (replace-match (concat "=?" (symbol-name cs-coding) + "?\\2?\\3\\4\\5")) + (save-excursion + (goto-char word-beg) + (re-search-forward "=\\?\\([^?]+\\)\\?\\([QB]\\)\\?" word-end t) + (replace-match "") + ;; QP or base64 + (if (string-match "\\`Q\\'" q-or-b) + ;; QP + (progn + (message "Replacing non-decodable characters with \"%s\"." + message-replacement-char) + (while (re-search-forward "\\(=[A-F0-9][A-F0-9]\\)+" + word-end t) + (replace-match message-replacement-char))) + ;; base64 + (message "Replacing non-decodable characters with \"%s\"." + replacement-chars) + (re-search-forward "[^?]+" word-end t) + (replace-match replacement-chars)) + (re-search-forward "\\?=") + (replace-match ""))))) + (rfc2047-decode-region (point-min) (point-max)) + (buffer-string))))) + ;;; Start of functions adopted from `message-utils.el'. (defun message-strip-subject-trailing-was (subject) @@ -2601,7 +2747,7 @@ C-c C-f C-w move to Fcc C-c C-f C-r move to Reply-To C-c C-f C-u move to Summary C-c C-f C-n move to Newsgroups C-c C-f C-k move to Keywords C-c C-f C-d move to Distribution - C-c C-f C-o move to From (\"Originator\") + C-c C-f C-o move to From (\"Originator\") C-c C-f C-f move to Followup-To C-c C-f C-m move to Mail-Followup-To C-c C-f C-e move to Expires @@ -2653,6 +2799,9 @@ (set (make-local-variable 'message-checksum) nil) (set (make-local-variable 'message-mime-part) 0) (message-setup-fill-variables) + (when message-fill-column + (setq fill-column message-fill-column) + (turn-on-auto-fill)) ;; Allow using comment commands to add/remove quoting. ;; (set (make-local-variable 'comment-start) message-yank-prefix) (when message-yank-prefix @@ -2869,11 +3018,11 @@ prefix FORCE is given." (interactive "P") (let* ((mct (message-fetch-reply-field "mail-copies-to")) - (dont (and mct (or (equal (downcase mct) "never") + (dont (and mct (or (equal (downcase mct) "never") (equal (downcase mct) "nobody")))) - (to (or (message-fetch-reply-field "mail-reply-to") - (message-fetch-reply-field "reply-to") - (message-fetch-reply-field "from")))) + (to (or (message-fetch-reply-field "mail-reply-to") + (message-fetch-reply-field "reply-to") + (message-fetch-reply-field "from")))) (when (and dont to) (message (if force @@ -2913,21 +3062,21 @@ ;; (mail-strip-quoted-names "Foo Bar , bla@fasel (Bla Fasel)") (dolist (header headers) (let* ((header-name (symbol-name (car header))) - (new-header (cdr header)) - (synonyms (loop for synonym in message-header-synonyms + (new-header (cdr header)) + (synonyms (loop for synonym in message-header-synonyms when (memq (car header) synonym) return synonym)) - (old-header - (loop for synonym in synonyms + (old-header + (loop for synonym in synonyms for old-header = (mail-fetch-field (symbol-name synonym)) when (and old-header (string-match new-header old-header)) return synonym))) (if old-header - (message "already have `%s' in `%s'" new-header old-header) + (message "already have `%s' in `%s'" new-header old-header) (when (and (message-position-on-field header-name) - (setq old-header (mail-fetch-field header-name)) - (not (string-match "\\` *\\'" old-header))) + (setq old-header (mail-fetch-field header-name)) + (not (string-match "\\` *\\'" old-header))) (insert ", ")) - (insert new-header))))) + (insert new-header))))) (defun message-widen-reply () "Widen the reply to include maximum recipients." @@ -3133,13 +3282,21 @@ ((listp message-signature) (eval message-signature)) (t message-signature))) - (signature + signature-file) + (setq signature (cond ((stringp signature) signature) - ((and (eq t signature) - message-signature-file - (file-exists-p message-signature-file)) - signature)))) + ((and (eq t signature) message-signature-file) + (setq signature-file + (if (and message-signature-directory + ;; don't actually use the signature directory + ;; if message-signature-file contains a path. + (not (file-name-directory + message-signature-file))) + (nnheader-concat message-signature-directory + message-signature-file) + message-signature-file)) + (file-exists-p signature-file)))) (when signature (goto-char (point-max)) ;; Insert the signature. @@ -3149,7 +3306,7 @@ (insert "\n")) (insert "-- \n") (if (eq signature t) - (insert-file-contents message-signature-file) + (insert-file-contents signature-file) (insert signature)) (goto-char (point-max)) (or (bolp) (insert "\n"))))) @@ -3254,17 +3411,17 @@ (substring table ?a (+ ?a n)) (substring table (+ ?a 26) 255)))) -(defun message-caesar-buffer-body (&optional rotnum) +(defun message-caesar-buffer-body (&optional rotnum wide) "Caesar rotate all letters in the current buffer by 13 places. Used to encode/decode possibly offensive messages (commonly in rec.humor). With prefix arg, specifies the number of places to rotate each letter forward. -Mail and USENET news headers are not rotated." +Mail and USENET news headers are not rotated unless WIDE is non-nil." (interactive (if current-prefix-arg (list (prefix-numeric-value current-prefix-arg)) (list nil))) (save-excursion (save-restriction - (when (message-goto-body) + (when (and (not wide) (message-goto-body)) (narrow-to-region (point) (point-max))) (message-caesar-region (point-min) (point-max) rotnum)))) @@ -3311,14 +3468,15 @@ (let ((fill-prefix message-yank-prefix)) (fill-individual-paragraphs (point) (point-max) justifyp)))) -(defun message-indent-citation () +(defun message-indent-citation (&optional start end yank-only) "Modify text just inserted from a message to be cited. The inserted text should be the region. When this function returns, the region is again around the modified text. Normally, indent each nonblank line `message-indentation-spaces' spaces. However, if `message-yank-prefix' is non-nil, insert that prefix on each line." - (let ((start (point))) + (unless start (setq start (point))) + (unless yank-only ;; Remove unwanted headers. (when message-ignored-cited-headers (let (all-removed) @@ -3346,21 +3504,32 @@ (insert "\n")) (while (and (zerop (forward-line -1)) (looking-at "$")) - (message-delete-line)) - ;; Do the indentation. - (if (null message-yank-prefix) - (indent-rigidly start (mark t) message-indentation-spaces) - (save-excursion - (goto-char start) - (while (< (point) (mark t)) - (cond ((looking-at ">") - (insert message-yank-cited-prefix)) - ((looking-at "^$") - (insert message-yank-empty-prefix)) - (t - (insert message-yank-prefix))) - (forward-line 1)))) - (goto-char start))) + (message-delete-line))) + ;; Do the indentation. + (if (null message-yank-prefix) + (indent-rigidly start (or end (mark t)) message-indentation-spaces) + (save-excursion + (goto-char start) + (while (< (point) (or end (mark t))) + (cond ((looking-at ">") + (insert message-yank-cited-prefix)) + ((looking-at "^$") + (insert message-yank-empty-prefix)) + (t + (insert message-yank-prefix))) + (forward-line 1)))) + (goto-char start)) + +(defvar message-cite-reply-above nil + "If non-nil, start own text above the quote. + +Note: Top posting is bad netiquette. Don't use it unless you +really must. You probably want to set variable only for specific +groups, e.g. using `gnus-posting-styles': + + (eval (set (make-local-variable 'message-cite-reply-above) t)) + +This variable has no effect in news postings.") (defun message-yank-original (&optional arg) "Insert the message being replied to, if any. @@ -3373,18 +3542,42 @@ Just \\[universal-argument] as argument means don't indent, insert no prefix, and don't delete any headers." (interactive "P") - (let ((modified (buffer-modified-p))) + (let ((modified (buffer-modified-p)) + body-text) (when (and message-reply-buffer message-cite-function) + (when message-cite-reply-above + (if (and (not (message-news-p)) + (or (eq message-cite-reply-above 'is-evil) + (y-or-n-p "\ +Top posting is bad netiquette. Please don't top post unless you really must. +Really top post? "))) + (save-excursion + (setq body-text + (buffer-substring (message-goto-body) + (point-max))) + (delete-region (message-goto-body) (point-max))) + (set (make-local-variable 'message-cite-reply-above) nil))) (delete-windows-on message-reply-buffer t) (push-mark (save-excursion (insert-buffer-substring message-reply-buffer) + (unless (bolp) + (insert ?\n)) (point))) (unless arg - (funcall message-cite-function)) - (message-exchange-point-and-mark) - (unless (bolp) - (insert ?\n)) + (funcall message-cite-function) + (unless (eq (char-before (mark t)) ?\n) + (let ((pt (point))) + (goto-char (mark t)) + (insert-before-markers ?\n) + (goto-char pt)))) + (when message-cite-reply-above + (message-goto-body) + (insert body-text) + (insert (if (bolp) "\n" "\n\n")) + (message-goto-body)) + ;; Add a `message-setup-very-last-hook' here? + ;; Add `gnus-article-highlight-citation' here? (unless modified (setq message-checksum (message-checksum)))))) @@ -3435,7 +3628,7 @@ (setq x-no-archive (message-fetch-field "x-no-archive")) (vector 0 (or (message-fetch-field "subject") "none") - (message-fetch-field "from") + (or (message-fetch-field "from") "nobody") (message-fetch-field "date") (message-fetch-field "message-id" t) (message-fetch-field "references") @@ -3467,6 +3660,7 @@ (undo-boundary) (delete-region (point) (mark t)) (insert "> [Quoted text removed due to X-No-Archive]\n") + (push-mark) (forward-line -1))))) (defun message-cite-original () @@ -3504,7 +3698,7 @@ date ;; We need Gnus functionality if the user wants date or time from ;; the original article: - (when (string-match "%[^EFLn]" message-citation-line-format) + (when (string-match "%[^fnNFL]" message-citation-line-format) (autoload 'gnus-date-get-time "gnus-util") (gnus-date-get-time (mail-header-date message-reply-headers))))) (flist @@ -3524,19 +3718,19 @@ (setq fname name lname "")))) ;; The following letters are not used in `format-time-string': - (push ?E lst) (push net lst) + (push ?E lst) (push "" lst) (push ?F lst) (push fname lst) ;; We might want to use "" instead of "" later. (push ?J lst) (push "" lst) (push ?K lst) (push "" lst) (push ?L lst) (push lname lst) - (push ?N lst) (push "" lst) + (push ?N lst) (push name-or-net lst) (push ?O lst) (push "" lst) (push ?P lst) (push "

" lst) (push ?Q lst) (push "" lst) - (push ?f lst) (push "" lst) + (push ?f lst) (push from lst) (push ?i lst) (push "" lst) - (push ?n lst) (push name-or-net lst) + (push ?n lst) (push net lst) (push ?o lst) (push "" lst) (push ?q lst) (push "" lst) (push ?t lst) (push "" lst) @@ -3855,8 +4049,10 @@ (setq choice (gnus-multiple-choice "Non-printable characters found. Continue sending?" - '((?d "Remove non-printable characters and send") - (?r "Replace non-printable characters with dots and send") + `((?d "Remove non-printable characters and send") + (?r ,(format + "Replace non-printable characters with \"%s\" and send" + message-replacement-char)) (?i "Ignore non-printable characters and send") (?e "Continue editing")))) (if (eq choice ?e) @@ -3879,7 +4075,7 @@ (message-kill-all-overlays) (delete-char 1) (when (eq choice ?r) - (insert ".")))) + (insert message-replacement-char)))) (forward-char) (skip-chars-forward mm-7bit-chars)))))) @@ -3992,7 +4188,8 @@ (gnus-setup-posting-charset nil) message-posting-charset)) (headers message-required-mail-headers)) - (when message-generate-hashcash + (when (and message-generate-hashcash + (not (eq message-generate-hashcash 'opportunistic))) (message "Generating hashcash...") ;; Wait for calculations already started to finish... (hashcash-wait-async) @@ -4016,6 +4213,16 @@ (let ((message-deletable-headers (if news nil message-deletable-headers))) (message-generate-headers headers)) + ;; Check continuation headers. + (message-check 'continuation-headers + (goto-char (point-min)) + (while (re-search-forward "^[^ \t\n][^ \t\n:]*[ \t\n]" nil t) + (goto-char (match-beginning 0)) + (if (y-or-n-p "Fix continuation lines? ") + (insert " ") + (forward-line 1) + (unless (y-or-n-p "Send anyway? ") + (error "Failed to send the message"))))) ;; Let the user do all of the above. (run-hooks 'message-header-hook)) (unwind-protect @@ -4134,10 +4341,17 @@ 'call-process-region (append (list (point-min) (point-max) - (if (boundp 'sendmail-program) - sendmail-program - "/usr/lib/sendmail") + (cond ((boundp 'sendmail-program) + sendmail-program) + ((file-exists-p "/usr/sbin/sendmail") + "/usr/sbin/sendmail") + ((file-exists-p "/usr/lib/sendmail") + "/usr/lib/sendmail") + ((file-exists-p "/usr/ucblib/sendmail") + "/usr/ucblib/sendmail") + (t "fakemail")) nil errbuf nil "-oi") + message-sendmail-extra-arguments ;; Always specify who from, ;; since some systems have broken sendmails. ;; But some systems are more broken with -f, so @@ -4202,9 +4416,9 @@ ;; free for -inject-arguments -- a big win for the user and for us ;; since we don't have to play that double-guessing game and the user ;; gets full control (no gestapo'ish -f's, for instance). --sj - (if (functionp message-qmail-inject-args) - (funcall message-qmail-inject-args) - message-qmail-inject-args))) + (if (functionp message-qmail-inject-args) + (funcall message-qmail-inject-args) + message-qmail-inject-args))) ;; qmail-inject doesn't say anything on it's stdout/stderr, ;; we have to look at the retval instead (0 nil) @@ -4572,11 +4786,11 @@ (message-check 'continuation-headers (goto-char (point-min)) (let ((do-posting t)) - (while (re-search-forward "^[^ \t\n][^:\n]*$" nil t) + (while (re-search-forward "^[^ \t\n][^ \t\n:]*[ \t\n]" nil t) + (goto-char (match-beginning 0)) (if (y-or-n-p "Fix continuation lines? ") - (progn - (goto-char (match-beginning 0)) - (insert " ")) + (insert " ") + (forward-line 1) (unless (y-or-n-p "Send anyway? ") (setq do-posting nil)))) do-posting)) @@ -5001,13 +5215,32 @@ (msg-id (mail-header-message-id message-reply-headers))) (when from (let ((name (mail-extract-address-components from))) - (concat msg-id (if msg-id " (") - (or (car name) - (nth 1 name)) - "'s message of \"" - (if (or (not date) (string= date "")) - "(unknown date)" date) - "\"" (if msg-id ")"))))))) + (concat + msg-id (if msg-id " (") + (if (car name) + (if (string-match "[^\000-\177]" (car name)) + ;; Quote a string containing non-ASCII characters. + ;; It will make the RFC2047 encoder cause an error + ;; if there are special characters. + (let ((default-enable-multibyte-characters t)) + (with-temp-buffer + (insert (car name)) + (goto-char (point-min)) + (while (search-forward "\"" nil t) + (when (prog2 + (backward-char) + (zerop (% (skip-chars-backward "\\\\") 2)) + (goto-char (match-beginning 0))) + (insert "\\")) + (forward-char)) + ;; Those quotes will be removed by the RFC2047 encoder. + (concat "\"" (buffer-string) "\""))) + (car name)) + (nth 1 name)) + "'s message of \"" + (if (or (not date) (string= date "")) + "(unknown date)" date) + "\"" (if msg-id ")"))))))) (defun message-make-distribution () "Make a Distribution header." @@ -5035,14 +5268,14 @@ (concat message-user-path "!" login-name)) (t login-name)))) -(defun message-make-from () +(defun message-make-from (&optional name address ) "Make a From header." (let* ((style message-from-style) - (login (message-make-address)) - (fullname - (or (and (boundp 'user-full-name) - user-full-name) - (user-full-name)))) + (login (or address (message-make-address))) + (fullname (or name + (and (boundp 'user-full-name) + user-full-name) + (user-full-name)))) (when (string= fullname "&") (setq fullname (user-login-name))) (with-temp-buffer @@ -5063,15 +5296,15 @@ (string-match "[\\()]" tmp))))) (insert fullname) (goto-char (point-min)) - ;; Look for a character that cannot appear unquoted - ;; according to RFC 822. - (when (re-search-forward "[^- !#-'*+/-9=?A-Z^-~]" nil 1) - ;; Quote fullname, escaping specials. - (goto-char (point-min)) - (insert "\"") - (while (re-search-forward "[\"\\]" nil 1) - (replace-match "\\\\\\&" t)) - (insert "\"")) + ;; Look for a character that cannot appear unquoted + ;; according to RFC 822. + (when (re-search-forward "[^- !#-'*+/-9=?A-Z^-~]" nil 1) + ;; Quote fullname, escaping specials. + (goto-char (point-min)) + (insert "\"") + (while (re-search-forward "[\"\\]" nil 1) + (replace-match "\\\\\\&" t)) + (insert "\"")) (insert " <" login ">")) (t ; 'parens or default (insert login " (") @@ -5137,8 +5370,8 @@ (stringp message-user-fqdn) (string-match message-valid-fqdn-regexp message-user-fqdn) (not (string-match message-bogus-system-names message-user-fqdn))) + ;; `message-user-fqdn' seems to be valid message-user-fqdn) - ;; `message-user-fqdn' seems to be valid ((and (string-match message-valid-fqdn-regexp system-name) (not (string-match message-bogus-system-names system-name))) ;; `system-name' returned the right result. @@ -5639,7 +5872,7 @@ "Return a new (unique) buffer name based on TYPE and TO." (cond ;; Generate a new buffer name The Message Way. - ((eq message-generate-new-buffers 'unique) + ((memq message-generate-new-buffers '(unique t)) (generate-new-buffer-name (concat "*" type (if to @@ -5663,20 +5896,51 @@ "") (if (and group (not (string= group ""))) (concat " on " group) "") "*"))) - ;; Use standard name. + ;; Search for the existing message buffer with the specified name. (t - (format "*%s message*" type)))) + (let* ((new (if (eq message-generate-new-buffers 'standard) + (generate-new-buffer-name (concat "*" type " message*")) + (let ((message-generate-new-buffers 'unique)) + (message-buffer-name type to group)))) + (regexp (concat "\\`" + (regexp-quote + (if (string-match "<[0-9]+>\\'" new) + (substring new 0 (match-beginning 0)) + new)) + "\\(?:<\\([0-9]+\\)>\\)?\\'")) + (case-fold-search nil)) + (or (cdar + (last + (sort + (delq nil + (mapcar + (lambda (b) + (when (and (string-match regexp (setq b (buffer-name b))) + (eq (with-current-buffer b major-mode) + 'message-mode)) + (cons (string-to-number (or (match-string 1 b) "1")) + b))) + (buffer-list))) + 'car-less-than-car))) + new))))) (defun message-pop-to-buffer (name) "Pop to buffer NAME, and warn if it already exists and is modified." (let ((buffer (get-buffer name))) (if (and buffer (buffer-name buffer)) - (progn - (set-buffer (pop-to-buffer buffer)) + (let ((window (get-buffer-window buffer 0))) + (if window + ;; Raise the frame already displaying the message buffer. + (progn + (gnus-select-frame-set-input-focus (window-frame window)) + (select-window window)) + (set-buffer (pop-to-buffer buffer))) (when (and (buffer-modified-p) - (not (y-or-n-p - "Message already being composed; erase? "))) + (not (prog1 + (y-or-n-p + "Message already being composed; erase? ") + (message nil)))) (error "Message being composed"))) (set-buffer (pop-to-buffer name))) (erase-buffer) @@ -5736,7 +6000,8 @@ nil mua))) -(defun message-setup (headers &optional replybuffer actions switch-function) +(defun message-setup (headers &optional replybuffer actions + continue switch-function) (let ((mua (message-mail-user-agent)) subject to field yank-action) (if (not (and message-this-is-mail mua)) @@ -5759,11 +6024,11 @@ (format "%s" (car item)) (cdr item))) headers) - nil switch-function yank-action actions))))) + continue switch-function yank-action actions))))) (defun message-headers-to-generate (headers included-headers excluded-headers) "Return a list that includes all headers from HEADERS. -If INCLUDED-HEADERS is a list, just include those headers. If if is +If INCLUDED-HEADERS is a list, just include those headers. If it is t, include all headers. In any case, headers from EXCLUDED-HEADERS are not included." (let ((result nil) @@ -5906,11 +6171,21 @@ other-headers continue switch-function yank-action send-actions) "Start editing a mail message to be sent. -OTHER-HEADERS is an alist of header/value pairs." +OTHER-HEADERS is an alist of header/value pairs. CONTINUE says whether +to continue editing a message already being composed. SWITCH-FUNCTION +is a function used to switch to and display the mail buffer." (interactive) (let ((message-this-is-mail t) replybuffer) (unless (message-mail-user-agent) - (message-pop-to-buffer (message-buffer-name "mail" to))) + (funcall + (or switch-function 'message-pop-to-buffer) + ;; Search for the existing message buffer if `continue' is non-nil. + (let ((message-generate-new-buffers + (when (or (not continue) + (eq message-generate-new-buffers 'standard) + (functionp message-generate-new-buffers)) + message-generate-new-buffers))) + (message-buffer-name "mail" to)))) ;; FIXME: message-mail should do something if YANK-ACTION is not ;; insert-buffer. (and (consp yank-action) (eq (car yank-action) 'insert-buffer) @@ -5919,7 +6194,7 @@ (nconc `((To . ,(or to "")) (Subject . ,(or subject ""))) (when other-headers other-headers)) - replybuffer send-actions) + replybuffer send-actions continue switch-function) ;; FIXME: Should return nil if failure. t)) @@ -5934,7 +6209,7 @@ (defun message-get-reply-headers (wide &optional to-address address-headers) (let (follow-to mct never-mct to cc author mft recipients extra) - ;; Find all relevant headers we need. + ;; Find all relevant headers we need. (save-restriction (message-narrow-to-headers-or-head) ;; Gmane renames "To". Look at "Original-To", too, if it is present in @@ -6023,7 +6298,7 @@ (while (string-match "[ \t][ \t]+" recipients) (setq recipients (replace-match " " t t recipients))) ;; Remove addresses that match `rmail-dont-reply-to-names'. - (let ((rmail-dont-reply-to-names message-dont-reply-to-names)) + (let ((rmail-dont-reply-to-names (message-dont-reply-to-names))) (setq recipients (rmail-dont-reply-to recipients))) ;; Perhaps "Mail-Copies-To: never" removed the only address? (if (string-equal recipients "") @@ -6069,6 +6344,39 @@ (push (cons 'Cc recipients) follow-to))) follow-to)) +(defcustom message-simplify-subject-functions + '(message-strip-list-identifiers + message-strip-subject-re + message-strip-subject-trailing-was + message-strip-subject-encoded-words) + "List of functions taking a string argument that simplify subjects. +The functions are applied when replying to a message. + +Useful functions to put in this list include: +`message-strip-list-identifiers', `message-strip-subject-re', +`message-strip-subject-trailing-was', and +`message-strip-subject-encoded-words'." + :version "22.1" ;; Gnus 5.10.9 + :group 'message-various + :type '(repeat function)) + +(defun message-simplify-subject (subject &optional functions) + "Return simplified SUBJECT." + (unless functions + ;; Simplify fully: + (setq functions message-simplify-subject-functions)) + (when (and (memq 'message-strip-list-identifiers functions) + gnus-list-identifiers) + (setq subject (message-strip-list-identifiers subject))) + (when (memq 'message-strip-subject-re functions) + (setq subject (concat "Re: " (message-strip-subject-re subject)))) + (when (and (memq 'message-strip-subject-trailing-was functions) + message-subject-trailing-was-query) + (setq subject (message-strip-subject-trailing-was subject))) + (when (memq 'message-strip-subject-encoded-words functions) + (setq subject (message-strip-subject-encoded-words subject))) + subject) + ;;;###autoload (defun message-reply (&optional to-address wide) "Start editing a reply to the article in the current buffer." @@ -6096,13 +6404,11 @@ (setq message-id (message-fetch-field "message-id" t) references (message-fetch-field "references") date (message-fetch-field "date") - from (message-fetch-field "from") + from (or (message-fetch-field "from") "nobody") subject (or (message-fetch-field "subject") "none")) - (when gnus-list-identifiers - (setq subject (message-strip-list-identifiers subject))) - (setq subject (concat "Re: " (message-strip-subject-re subject))) - (when message-subject-trailing-was-query - (setq subject (message-strip-subject-trailing-was subject))) + + ;; Strip list identifiers, "Re: ", and "was:" + (setq subject (message-simplify-subject subject)) (when (and (setq gnus-warning (message-fetch-field "gnus-warning")) (string-match "<[^>]+>" gnus-warning)) @@ -6172,11 +6478,8 @@ (let ((case-fold-search t)) (string-match "world" distribution))) (setq distribution nil)) - (if gnus-list-identifiers - (setq subject (message-strip-list-identifiers subject))) - (setq subject (concat "Re: " (message-strip-subject-re subject))) - (when message-subject-trailing-was-query - (setq subject (message-strip-subject-trailing-was subject))) + ;; Strip list identifiers, "Re: ", and "was:" + (setq subject (message-simplify-subject subject)) (widen)) (message-pop-to-buffer (message-buffer-name "followup" from newsgroups)) @@ -6614,6 +6917,62 @@ (message-forward-make-body-digest-mime forward-buffer) (message-forward-make-body-digest-plain forward-buffer))) +(eval-and-compile + (autoload 'mm-uu-dissect-text-parts "mm-uu") + (autoload 'mm-uu-dissect "mm-uu")) + +(defun message-signed-or-encrypted-p (&optional dont-emulate-mime handles) + "Say whether the current buffer contains signed or encrypted message. +If DONT-EMULATE-MIME is nil, this function does the MIME emulation on +messages that don't conform to PGP/MIME described in RFC2015. HANDLES +is for the internal use." + (unless handles + (let ((mm-decrypt-option 'never) + (mm-verify-option 'never)) + (if (setq handles (mm-dissect-buffer nil t)) + (unless dont-emulate-mime + (mm-uu-dissect-text-parts handles)) + (unless dont-emulate-mime + (setq handles (mm-uu-dissect)))))) + ;; Check text/plain message in which there is a signed or encrypted + ;; body that has been encoded by B or Q. + (unless (or handles dont-emulate-mime) + (let ((cur (current-buffer)) + (mm-decrypt-option 'never) + (mm-verify-option 'never)) + (with-temp-buffer + (insert-buffer-substring cur) + (when (setq handles (mm-dissect-buffer t t)) + (if (and (prog1 + (bufferp (car handles)) + (mm-destroy-parts handles)) + (equal (mm-handle-media-type handles) "text/plain")) + (progn + (mm-decode-content-transfer-encoding + (mm-handle-encoding handles)) + (setq handles (mm-uu-dissect))) + (setq handles nil)))))) + (when handles + (prog1 + (catch 'found + (dolist (handle (if (stringp (car handles)) + (if (member (car handles) + '("multipart/signed" + "multipart/encrypted")) + (throw 'found t) + (cdr handles)) + (list handles))) + (if (stringp (car handle)) + (when (message-signed-or-encrypted-p dont-emulate-mime handle) + (throw 'found t)) + (when (and (bufferp (car handle)) + (equal (mm-handle-media-type handle) + "message/rfc822")) + (with-current-buffer (mm-handle-buffer handle) + (when (message-signed-or-encrypted-p dont-emulate-mime) + (throw 'found t))))))) + (mm-destroy-parts handles)))) + ;;;###autoload (defun message-forward-make-body (forward-buffer &optional digest) ;; Put point where we want it before inserting the forwarded @@ -6626,11 +6985,13 @@ (if message-forward-as-mime (if (and message-forward-show-mml (not (and (eq message-forward-show-mml 'best) + ;; Use the raw form in the body if it contains + ;; signed or encrypted message so as not to be + ;; destroyed by re-encoding. (with-current-buffer forward-buffer - (goto-char (point-min)) - (re-search-forward - "Content-Type: *multipart/\\(signed\\|encrypted\\)" - nil t))))) + (condition-case nil + (message-signed-or-encrypted-p) + (error t)))))) (message-forward-make-body-mml forward-buffer) (message-forward-make-body-mime forward-buffer)) (message-forward-make-body-plain forward-buffer))) @@ -6747,7 +7108,7 @@ (goto-char boundary) (when (re-search-backward "^.?From .*\n" nil t) (delete-region (match-beginning 0) (match-end 0))))) - (mm-enable-multibyte) + (mime-to-mml) (save-restriction (message-narrow-to-head-1) (message-remove-header message-ignored-bounced-headers t) @@ -6772,7 +7133,7 @@ (message-pop-to-buffer (message-buffer-name "mail" to)))) (let ((message-this-is-mail t)) (message-setup `((To . ,(or to "")) (Subject . ,(or subject ""))) - nil nil 'switch-to-buffer-other-window))) + nil nil nil 'switch-to-buffer-other-window))) ;;;###autoload (defun message-mail-other-frame (&optional to subject) @@ -6787,7 +7148,7 @@ (message-pop-to-buffer (message-buffer-name "mail" to)))) (let ((message-this-is-mail t)) (message-setup `((To . ,(or to "")) (Subject . ,(or subject ""))) - nil nil 'switch-to-buffer-other-frame))) + nil nil nil 'switch-to-buffer-other-frame))) ;;;###autoload (defun message-news-other-window (&optional newsgroups subject) @@ -7318,7 +7679,7 @@ (defun message-put-addresses-in-ecomplete () (dolist (header '("to" "cc" "from" "reply-to")) - (let ((value (message-fetch-field header))) + (let ((value (message-field-value header))) (dolist (string (mail-header-parse-addresses value 'raw)) (setq string (gnus-replace-in-string Index: gnus/lisp/messcompat.el diff -u gnus/lisp/messcompat.el:7.5 gnus/lisp/messcompat.el:7.7 --- gnus/lisp/messcompat.el:7.5 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/messcompat.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; messcompat.el --- making message mode compatible with mail mode -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: mail, news Index: gnus/lisp/mm-bodies.el diff -u gnus/lisp/mm-bodies.el:7.13 gnus/lisp/mm-bodies.el:7.14 --- gnus/lisp/mm-bodies.el:7.13 Thu Jan 19 07:01:23 2006 +++ gnus/lisp/mm-bodies.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; mm-bodies.el --- Functions for decoding MIME things ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; MORIOKA Tomohiko Index: gnus/lisp/mm-decode.el diff -u gnus/lisp/mm-decode.el:7.45 gnus/lisp/mm-decode.el:7.50 --- gnus/lisp/mm-decode.el:7.45 Wed Apr 26 14:31:41 2006 +++ gnus/lisp/mm-decode.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; mm-decode.el --- Functions for decoding MIME things ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; MORIOKA Tomohiko @@ -562,7 +562,7 @@ description) (setq type (split-string (car ctl) "/")) (setq subtype (cadr type) - type (pop type)) + type (car type)) (setq result (cond @@ -639,16 +639,15 @@ (defun mm-copy-to-buffer () "Copy the contents of the current buffer to a fresh buffer." - (save-excursion (let ((obuf (current-buffer)) beg) (goto-char (point-min)) (search-forward-regexp "^\n" nil t) (setq beg (point)) - (set-buffer + (with-current-buffer ;; Preserve the data's unibyteness (for url-insert-file-contents). (let ((default-enable-multibyte-characters (mm-multibyte-p))) - (generate-new-buffer " *mm*"))) + (generate-new-buffer " *mm*")) (insert-buffer-substring obuf beg) (current-buffer)))) @@ -699,7 +698,8 @@ (forward-line 1) (mm-insert-inline handle (mm-get-part handle)) 'inline) - (if (and method ;; If nil, we always use "save". + (setq external + (and method ;; If nil, we always use "save". (stringp method) ;; 'mailcap-save-binary-file (or (eq mm-enable-external t) (and (eq mm-enable-external 'ask) @@ -712,9 +712,7 @@ (concat " \"" (format method filename) "\"") "") - "? "))))) - (setq external t) - (setq external nil)) + "? ")))))) (if external (mm-display-external handle (or method 'mailcap-save-binary-file)) @@ -883,13 +881,21 @@ ;; a vector in Emacs but is a list in XEmacs) ;; requires that it is lexically scoped. (timer (run-at-time 2.0 nil 'ignore))) - (lambda (process state) - (when (eq 'exit (process-status process)) - (if (memq timer timer-list) - (timer-set-function timer fn) - (funcall fn)) - (ignore-errors (eval fm)) - (message "%s" done)))))) + (if (boundp 'itimer-list) + (lambda (process state) + (when (eq 'exit (process-status process)) + (if (memq timer itimer-list) + (set-itimer-function timer fn) + (funcall fn)) + (ignore-errors (eval fm)) + (message "%s" done))) + (lambda (process state) + (when (eq 'exit (process-status process)) + (if (memq timer timer-list) + (timer-set-function timer fn) + (funcall fn)) + (ignore-errors (eval fm)) + (message "%s" done))))))) (mm-handle-set-external-undisplayer handle (cons file buffer))) (message "Displaying %s..." command)) @@ -1017,10 +1023,12 @@ methods nil))) result)) -(defun mm-inlinable-p (handle) - "Say whether HANDLE can be displayed inline." +(defun mm-inlinable-p (handle &optional type) + "Say whether HANDLE can be displayed inline. +TYPE is the mime-type of the object; it defaults to the one given +in HANDLE." + (unless type (setq type (mm-handle-media-type handle))) (let ((alist mm-inline-media-tests) - (type (mm-handle-media-type handle)) test) (while alist (when (string-match (caar alist) type) @@ -1133,7 +1141,7 @@ (with-current-buffer (mm-handle-buffer handle) (buffer-string))) ((mm-multibyte-p) - (mm-string-as-multibyte (mm-get-part handle no-cache))) + (mm-string-to-multibyte (mm-get-part handle no-cache))) (t (mm-get-part handle no-cache)))))) @@ -1202,17 +1210,13 @@ (defun mm-save-part-to-file (handle file) (mm-with-unibyte-buffer (mm-insert-part handle) - (let ((coding-system-for-write 'binary) - (current-file-modes (default-file-modes)) + (let ((current-file-modes (default-file-modes))) + (set-default-file-modes mm-attachment-file-modes) + (unwind-protect ;; Don't re-compress .gz & al. Arguably we should make ;; `file-name-handler-alist' nil, but that would chop ;; ange-ftp, which is reasonable to use here. - (inhibit-file-name-operation 'write-region) - (inhibit-file-name-handlers - (cons 'jka-compr-handler inhibit-file-name-handlers))) - (set-default-file-modes mm-attachment-file-modes) - (unwind-protect - (write-region (point-min) (point-max) file) + (mm-write-region (point-min) (point-max) file nil nil nil 'binary t) (set-default-file-modes current-file-modes))))) (defun mm-pipe-part (handle) Index: gnus/lisp/mm-encode.el diff -u gnus/lisp/mm-encode.el:7.9 gnus/lisp/mm-encode.el:7.10 --- gnus/lisp/mm-encode.el:7.9 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/mm-encode.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; mm-encode.el --- Functions for encoding MIME things ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; MORIOKA Tomohiko Index: gnus/lisp/mm-extern.el diff -u gnus/lisp/mm-extern.el:7.9 gnus/lisp/mm-extern.el:7.11 --- gnus/lisp/mm-extern.el:7.9 Wed Apr 12 04:00:49 2006 +++ gnus/lisp/mm-extern.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; mm-extern.el --- showing message/external-body ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: message external-body @@ -97,7 +97,7 @@ (subject (or (cdr (assq 'subject params)) "none")) (buf (current-buffer)) info) - (if (y-or-n-p (format "Send a request message to %s?" server)) + (if (y-or-n-p (format "Send a request message to %s? " server)) (save-window-excursion (message-mail server subject) (message-goto-body) Index: gnus/lisp/mm-partial.el diff -u gnus/lisp/mm-partial.el:7.6 gnus/lisp/mm-partial.el:7.7 --- gnus/lisp/mm-partial.el:7.6 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/mm-partial.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; mm-partial.el --- showing message/partial ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: message partial Index: gnus/lisp/mm-url.el diff -u gnus/lisp/mm-url.el:7.15 gnus/lisp/mm-url.el:7.18 --- gnus/lisp/mm-url.el:7.15 Sun Apr 30 11:44:06 2006 +++ gnus/lisp/mm-url.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,6 @@ ;;; mm-url.el --- a wrapper of url functions/commands for Gnus -;; Copyright (C) 2001, 2002, 2003, 2004, 2005, -;; 2006 Free Software Foundation, Inc. +;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu @@ -57,7 +56,7 @@ '((wget "wget" "--user-agent=mm-url" "-q" "-O" "-") (w3m "w3m" "-dump_source") (lynx "lynx" "-source") - (curl "curl" "--silent" "--user-agent mm-url" "--location"))) + (curl "curl" "--silent" "--user-agent" "mm-url" "--location"))) (defcustom mm-url-program (cond @@ -294,6 +293,13 @@ (list url (buffer-size))) (mm-url-load-url) (let ((name buffer-file-name) + (url-request-extra-headers + ;; ISTM setting a Connection header was a workaround for + ;; older versions of url included with w3, but it does more + ;; harm than good with the one shipped with Emacs. --ansel + (if (not (and (boundp 'url-version) + (equal url-version "Emacs"))) + (list (cons "Connection" "Close")))) (url-package-name (or mm-url-package-name url-package-name)) (url-package-version (or mm-url-package-version Index: gnus/lisp/mm-util.el diff -u gnus/lisp/mm-util.el:7.51 gnus/lisp/mm-util.el:7.65 --- gnus/lisp/mm-util.el:7.51 Sun Apr 30 11:44:06 2006 +++ gnus/lisp/mm-util.el Fri Apr 27 00:42:47 2007 @@ -1,7 +1,7 @@ ;;; mm-util.el --- Utility functions for Mule and low level things ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; MORIOKA Tomohiko @@ -100,12 +100,6 @@ ;; (string-to-multibyte s) ~= (decode-coding-string s 'binary) ;; (string-make-multibyte s) ~= (decode-coding-string s locale-coding-system) (string-as-multibyte . identity) - (string-to-multibyte - . (lambda (string) - "Return a multibyte string with the same individual chars as string." - (mapconcat - (lambda (ch) (mm-string-as-multibyte (char-to-string ch))) - string ""))) (multibyte-string-p . ignore) (insert-byte . insert-char) (multibyte-char-to-unibyte . identity) @@ -125,6 +119,19 @@ (string-match (car elem) buffer-name) (throw 'return (cdr elem)))))))))))) +(defalias 'mm-string-to-multibyte + (cond + ((featurep 'xemacs) + 'identity) + ((fboundp 'string-to-multibyte) + 'string-to-multibyte) + (t + (lambda (string) + "Return a multibyte string with the same individual chars as string." + (mapconcat + (lambda (ch) (mm-string-as-multibyte (char-to-string ch))) + string ""))))) + (eval-and-compile (defalias 'mm-char-or-char-int-p (cond @@ -201,39 +208,150 @@ `( ;; Not in XEmacs, but it's not a proper MIME charset anyhow. ,@(unless (mm-coding-system-p 'x-ctext) - '((x-ctext . ctext))) - ;; ISO-8859-15 is very similar to ISO-8859-1. But it's _different_! + '((x-ctext . ctext))) + ;; ISO-8859-15 is very similar to ISO-8859-1. But it's _different_ in 8 + ;; positions! ,@(unless (mm-coding-system-p 'iso-8859-15) - '((iso-8859-15 . iso-8859-1))) + '((iso-8859-15 . iso-8859-1))) ;; BIG-5HKSCS is similar to, but different than, BIG-5. ,@(unless (mm-coding-system-p 'big5-hkscs) '((big5-hkscs . big5))) - ;; Windows-1252 is actually a superset of Latin-1. See also - ;; `gnus-article-dumbquotes-map'. - ,@(unless (mm-coding-system-p 'windows-1252) - (if (mm-coding-system-p 'cp1252) - '((windows-1252 . cp1252)) - '((windows-1252 . iso-8859-1)))) - ;; Windows-1250 is a variant of Latin-2 heavily used by Microsoft - ;; Outlook users in Czech republic. Use this to allow reading of their - ;; e-mails. cp1250 should be defined by M-x codepage-setup. - ,@(if (and (not (mm-coding-system-p 'windows-1250)) - (mm-coding-system-p 'cp1250)) - '((windows-1250 . cp1250))) ;; A Microsoft misunderstanding. - ,@(if (and (not (mm-coding-system-p 'unicode)) - (mm-coding-system-p 'utf-16-le)) - '((unicode . utf-16-le))) + ,@(when (and (not (mm-coding-system-p 'unicode)) + (mm-coding-system-p 'utf-16-le)) + '((unicode . utf-16-le))) ;; A Microsoft misunderstanding. ,@(unless (mm-coding-system-p 'ks_c_5601-1987) (if (mm-coding-system-p 'cp949) '((ks_c_5601-1987 . cp949)) '((ks_c_5601-1987 . euc-kr)))) + ;; Windows-31J is Windows Codepage 932. + ,@(when (and (not (mm-coding-system-p 'windows-31j)) + (mm-coding-system-p 'cp932)) + '((windows-31j . cp932))) + ;; ISO8859-1 is ISO-8859-1 + ,@(when (and (not (mm-coding-system-p 'iso8859-1)) + (mm-coding-system-p 'iso-8859-1)) + '((iso8859-1 . iso-8859-1))) ) - "A mapping from unknown or invalid charset names to the real charset names.") + "A mapping from unknown or invalid charset names to the real charset names. + +See `mm-codepage-iso-8859-list' and `mm-codepage-ibm-list'.") + +(defcustom mm-codepage-iso-8859-list + (list 1250 ;; Windows-1250 is a variant of Latin-2 heavily used by Microsoft + ;; Outlook users in Czech republic. Use this to allow reading of + ;; their e-mails. cp1250 should be defined by M-x codepage-setup + ;; (Emacs 21). + '(1252 . 1) ;; Windows-1252 is a superset of iso-8859-1 (West + ;; Europe). See also `gnus-article-dumbquotes-map'. + '(1254 . 9) ;; Windows-1254 is a superset of iso-8859-9 (Turkish). + '(1255 . 8));; Windows-1255 is a superset of iso-8859-8 (Hebrew). + "A list of Windows codepage numbers and iso-8859 charset numbers. + +If an element is a number corresponding to a supported windows +codepage, appropriate entries to `mm-charset-synonym-alist' are +added by `mm-setup-codepage-iso-8859'. An element may also be a +cons cell where the car is a codepage number and the cdr is the +corresponding number of an iso-8859 charset." + :type '(list (set :inline t + (const 1250 :tag "Central and East European") + (const (1252 . 1) :tag "West European") + (const (1254 . 9) :tag "Turkish") + (const (1255 . 8) :tag "Hebrew")) + (repeat :inline t + :tag "Other options" + (choice + (integer :tag "Windows codepage number") + (cons (integer :tag "Windows codepage number") + (integer :tag "iso-8859 charset number"))))) + :version "22.1" ;; Gnus 5.10.9 + :group 'mime) + +(defcustom mm-codepage-ibm-list + (list 437 ;; (US etc.) + 860 ;; (Portugal) + 861 ;; (Iceland) + 862 ;; (Israel) + 863 ;; (Canadian French) + 865 ;; (Nordic) + 852 ;; + 850 ;; (Latin 1) + 855 ;; (Cyrillic) + 866 ;; (Cyrillic - Russian) + 857 ;; (Turkish) + 864 ;; (Arabic) + 869 ;; (Greek) + 874);; (Thai) + ;; In Emacs 23 (unicode), cp... and ibm... are aliases. + ;; Cf. http://thread.gmane.org/v9lkng5nwy.fsf@marauder.physik.uni-ulm.de + "List of IBM codepage numbers. + +The codepage mappings slighly differ between IBM and other vendors. +See \"ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/IBM/README.TXT\". + +If an element is a number corresponding to a supported windows +codepage, appropriate entries to `mm-charset-synonym-alist' are +added by `mm-setup-codepage-ibm'." + :type '(list (set :inline t + (const 437 :tag "US etc.") + (const 860 :tag "Portugal") + (const 861 :tag "Iceland") + (const 862 :tag "Israel") + (const 863 :tag "Canadian French") + (const 865 :tag "Nordic") + (const 852) + (const 850 :tag "Latin 1") + (const 855 :tag "Cyrillic") + (const 866 :tag "Cyrillic - Russian") + (const 857 :tag "Turkish") + (const 864 :tag "Arabic") + (const 869 :tag "Greek") + (const 874 :tag "Thai")) + (repeat :inline t + :tag "Other options" + (integer :tag "Codepage number"))) + :version "22.1" ;; Gnus 5.10.9 + :group 'mime) + +(defun mm-setup-codepage-iso-8859 (&optional list) + "Add appropriate entries to `mm-charset-synonym-alist'. +Unless LIST is given, `mm-codepage-iso-8859-list' is used." + (unless list + (setq list mm-codepage-iso-8859-list)) + (dolist (i list) + (let (cp windows iso) + (if (consp i) + (setq cp (intern (format "cp%d" (car i))) + windows (intern (format "windows-%d" (car i))) + iso (intern (format "iso-8859-%d" (cdr i)))) + (setq cp (intern (format "cp%d" i)) + windows (intern (format "windows-%d" i)))) + (unless (mm-coding-system-p windows) + (if (mm-coding-system-p cp) + (add-to-list 'mm-charset-synonym-alist (cons windows cp)) + (add-to-list 'mm-charset-synonym-alist (cons windows iso))))))) + +(defun mm-setup-codepage-ibm (&optional list) + "Add appropriate entries to `mm-charset-synonym-alist'. +Unless LIST is given, `mm-codepage-ibm-list' is used." + (unless list + (setq list mm-codepage-ibm-list)) + (dolist (number list) + (let ((ibm (intern (format "ibm%d" number))) + (cp (intern (format "cp%d" number)))) + (when (and (not (mm-coding-system-p ibm)) + (mm-coding-system-p cp)) + (add-to-list 'mm-charset-synonym-alist (cons ibm cp)))))) + +;; Initialize: +(mm-setup-codepage-iso-8859) +(mm-setup-codepage-ibm) (defcustom mm-charset-override-alist - `((iso-8859-1 . windows-1252)) + '((iso-8859-1 . windows-1252) + (iso-8859-8 . windows-1255) + (iso-8859-9 . windows-1254)) "A mapping from undesired charset names to their replacement. You may add pairs like (iso-8859-1 . windows-1252) here, @@ -241,12 +359,14 @@ superset of iso-8859-1." :type '(list (set :inline t (const (iso-8859-1 . windows-1252)) + (const (iso-8859-8 . windows-1255)) + (const (iso-8859-9 . windows-1254)) (const (undecided . windows-1252))) (repeat :inline t :tag "Other options" (cons (symbol :tag "From charset") (symbol :tag "To charset")))) - :version "23.0" ;; No Gnus + :version "22.1" ;; Gnus 5.10.9 :group 'mime) (defcustom mm-charset-eval-alist @@ -263,7 +383,7 @@ evaluated. This allows to load additional libraries providing charsets on demand. If supported by your Emacs version, you could use `autoload-coding-system' here." - :version "23.0" ;; No Gnus + :version "22.1" ;; Gnus 5.10.9 :type '(list (set :inline t (const (windows-1250 . (mm-codepage-setup 1250 t))) (const (windows-1251 . (mm-codepage-setup 1251 t))) @@ -361,14 +481,17 @@ (iso-2022-jp-3 latin-jisx0201 japanese-jisx0208-1978 japanese-jisx0208 japanese-jisx0213-1 japanese-jisx0213-2) (shift_jis latin-jisx0201 katakana-jisx0201 japanese-jisx0208) - ,(if (or (not (fboundp 'charsetp)) ;; non-Mule case - (charsetp 'unicode-a) - (not (mm-coding-system-p 'mule-utf-8))) - '(utf-8 unicode-a unicode-b unicode-c unicode-d unicode-e) - ;; If we have utf-8 we're in Mule 5+. - (append '(utf-8) - (delete 'ascii - (coding-system-get 'mule-utf-8 'safe-charsets))))) + ,(cond ((fboundp 'unicode-precedence-list) + (cons 'utf-8 (delq 'ascii (mapcar 'charset-name + (unicode-precedence-list))))) + ((or (not (fboundp 'charsetp)) ;; non-Mule case + (charsetp 'unicode-a) + (not (mm-coding-system-p 'mule-utf-8))) + '(utf-8 unicode-a unicode-b unicode-c unicode-d unicode-e)) + (t ;; If we have utf-8 we're in Mule 5+. + (append '(utf-8) + (delete 'ascii + (coding-system-get 'mule-utf-8 'safe-charsets)))))) "Alist of MIME-charset/MULE-charsets.") (defun mm-enrich-utf-8-by-mule-ucs () @@ -376,10 +499,6 @@ This function will run when the `un-define' module is loaded under XEmacs, and fill the `utf-8' entry in `mm-mime-mule-charset-alist' with Mule charsets. It is completely useless for Emacs." - (unless (cdr (delete '(mm-enrich-utf-8-by-mule-ucs) - (assoc "un-define" after-load-alist))) - (setq after-load-alist - (delete '("un-define") after-load-alist))) (when (boundp 'unicode-basic-translation-charset-order-list) (condition-case nil (let ((val (delq @@ -983,7 +1102,7 @@ (nreverse out))) (defvar mm-inhibit-file-name-handlers - '(jka-compr-handler image-file-handler) + '(jka-compr-handler image-file-handler epa-file-handler) "A list of handlers doing (un)compression (etc) thingies.") (defun mm-insert-file-contents (filename &optional visit beg end replace @@ -1102,15 +1221,11 @@ (setq file (concat file suffix))) (if dir-flag (make-directory file) - (if (featurep 'xemacs) - ;; NOTE: This is unsafe if XEmacs users - ;; don't use a secure temp directory. - (if (file-exists-p file) - (signal 'file-already-exists - (list "File exists" file)) - (write-region "" nil file nil 'silent)) - (write-region "" nil file nil 'silent - nil 'excl))) + ;; NOTE: This is unsafe if Emacs 20 + ;; users and XEmacs users don't use + ;; a secure temp directory. + (gmm-write-region "" nil file nil 'silent + nil 'excl)) nil) (file-already-exists t) ;; The XEmacs version of `make-directory' issues Index: gnus/lisp/mm-uu.el diff -u gnus/lisp/mm-uu.el:7.40 gnus/lisp/mm-uu.el:7.43 --- gnus/lisp/mm-uu.el:7.40 Fri Apr 28 07:17:40 2006 +++ gnus/lisp/mm-uu.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; mm-uu.el --- Return uu stuff as mm handles ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: postscript uudecode binhex shar forward gnatsweb pgp @@ -482,8 +482,16 @@ mm-security-handle 'gnus-details (format "Clear verification not supported by `%s'.\n" mml2015-use)))) (goto-char (point-min)) - (if (search-forward "\n\n" nil t) - (delete-region (point-min) (point))) + (forward-line) + ;; We need to be careful not to strip beyond the armor headers. + ;; Previously, an attacker could replace the text inside our + ;; markup with trailing garbage by injecting whitespace into the + ;; message. + (while (looking-at "Hash:") ; The only header allowed in cleartext + (forward-line)) ; signatures according to RFC2440. + (when (looking-at "[\t ]*$") + (forward-line)) + (delete-region (point-min) (point)) (if (re-search-forward mm-uu-pgp-beginning-signature nil t) (delete-region (match-beginning 0) (point-max))) (goto-char (point-min)) Index: gnus/lisp/mm-view.el diff -u gnus/lisp/mm-view.el:7.42 gnus/lisp/mm-view.el:7.48 --- gnus/lisp/mm-view.el:7.42 Thu Apr 20 00:17:04 2006 +++ gnus/lisp/mm-view.el Thu Apr 19 12:08:11 2007 @@ -1,7 +1,7 @@ ;;; mm-view.el --- functions for viewing MIME objects ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; This file is part of GNU Emacs. @@ -30,13 +30,14 @@ (require 'mailcap) (require 'mm-bodies) (require 'mm-decode) +(require 'smime) (eval-and-compile (autoload 'gnus-article-prepare-display "gnus-art") (autoload 'vcard-parse-string "vcard") (autoload 'vcard-format-string "vcard") (autoload 'fill-flowed "flow-fill") - (autoload 'html2text "html2text")) + (autoload 'html2text "html2text" nil t)) (defvar gnus-article-mime-handles) (defvar gnus-newsgroup-charset) @@ -236,7 +237,8 @@ (mm-setup-w3m) (let ((text (mm-get-part handle)) (b (point)) - (charset (mail-content-type-get (mm-handle-type handle) 'charset))) + (charset (or (mail-content-type-get (mm-handle-type handle) 'charset) + mail-parse-charset))) (save-excursion (insert (if charset (mm-decode-string text charset) text)) (save-restriction @@ -300,7 +302,9 @@ "Render a text/html part using w3m." (if (mm-w3m-standalone-supports-m17n-p) (let ((source (mm-get-part handle)) - (charset (mail-content-type-get (mm-handle-type handle) 'charset)) + (charset (or (mail-content-type-get (mm-handle-type handle) + 'charset) + (symbol-name mail-parse-charset))) cs) (unless (and charset (setq cs (mm-charset-to-coding-system charset)) @@ -366,7 +370,8 @@ (defun mm-inline-render-with-function (handle func &rest args) (let ((source (mm-get-part handle)) - (charset (mail-content-type-get (mm-handle-type handle) 'charset))) + (charset (or (mail-content-type-get (mm-handle-type handle) 'charset) + mail-parse-charset))) (mm-insert-inline handle (mm-with-multibyte-buffer Index: gnus/lisp/mml-sec.el diff -u gnus/lisp/mml-sec.el:7.11 gnus/lisp/mml-sec.el:7.16 --- gnus/lisp/mml-sec.el:7.11 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/mml-sec.el Tue Mar 6 06:16:37 2007 @@ -1,7 +1,7 @@ ;;; mml-sec.el --- A package with security functions for MML documents ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Simon Josefsson @@ -26,14 +26,20 @@ ;;; Code: -(require 'mml-smime) (eval-when-compile (require 'cl)) +(require 'password) (autoload 'mml2015-sign "mml2015") (autoload 'mml2015-encrypt "mml2015") (autoload 'mml1991-sign "mml1991") (autoload 'mml1991-encrypt "mml1991") (autoload 'message-goto-body "message") (autoload 'mml-insert-tag "mml") +(autoload 'mml-smime-sign "mml-smime") +(autoload 'mml-smime-encrypt "mml-smime") +(autoload 'mml-smime-sign-query "mml-smime") +(autoload 'mml-smime-encrypt-query "mml-smime") +(autoload 'mml-smime-verify "mml-smime") +(autoload 'mml-smime-verify-test "mml-smime") (defvar mml-sign-alist '(("smime" mml-smime-sign-buffer mml-smime-sign-query) @@ -95,6 +101,23 @@ (string :tag "User defined")) (choice (const :tag "Separate" separate) (const :tag "Combined" combined))))) + +(defcustom mml-secure-verbose nil + "If non-nil, ask the user about the current operation more verbosely." + :group 'message + :type 'boolean) + +(defcustom mml-secure-cache-passphrase password-cache + "If t, cache passphrase." + :group 'message + :type 'boolean) + +(defcustom mml-secure-passphrase-cache-expiry password-cache-expiry + "How many seconds the passphrase is cached. +Whether the passphrase is cached at all is controlled by +`mml-secure-cache-passphrase'." + :group 'message + :type 'integer) ;;; Configuration/helper functions Index: gnus/lisp/mml-smime.el diff -u gnus/lisp/mml-smime.el:7.12 gnus/lisp/mml-smime.el:7.17 --- gnus/lisp/mml-smime.el:7.12 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/mml-smime.el Tue Mar 6 06:57:07 2007 @@ -1,7 +1,7 @@ ;;; mml-smime.el --- S/MIME support for MML ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Keywords: Gnus, MIME, S/MIME, MML @@ -31,10 +31,82 @@ (require 'smime) (require 'mm-decode) +(require 'mml-sec) (autoload 'message-narrow-to-headers "message") (autoload 'message-fetch-field "message") +(defvar mml-smime-use 'openssl) + +(defvar mml-smime-function-alist + '((openssl mml-smime-openssl-sign + mml-smime-openssl-encrypt + mml-smime-openssl-sign-query + mml-smime-openssl-encrypt-query + mml-smime-openssl-verify + mml-smime-openssl-verify-test) + (epg mml-smime-epg-sign + mml-smime-epg-encrypt + nil + nil + mml-smime-epg-verify + mml-smime-epg-verify-test))) + +(defcustom mml-smime-verbose mml-secure-verbose + "If non-nil, ask the user about the current operation more verbosely." + :group 'mime-security + :type 'boolean) + +(defcustom mml-smime-cache-passphrase mml-secure-cache-passphrase + "If t, cache passphrase." + :group 'mime-security + :type 'boolean) + +(defcustom mml-smime-passphrase-cache-expiry mml-secure-passphrase-cache-expiry + "How many seconds the passphrase is cached. +Whether the passphrase is cached at all is controlled by +`mml-smime-cache-passphrase'." + :group 'mime-security + :type 'integer) + +(defcustom mml-smime-signers nil + "A list of your own key ID which will be used to sign a message." + :group 'mime-security + :type '(repeat (string :tag "Key ID"))) + (defun mml-smime-sign (cont) + (let ((func (nth 1 (assq mml-smime-use mml-smime-function-alist)))) + (if func + (funcall func cont) + (error "Cannot find sign function")))) + +(defun mml-smime-encrypt (cont) + (let ((func (nth 2 (assq mml-smime-use mml-smime-function-alist)))) + (if func + (funcall func cont) + (error "Cannot find encrypt function")))) + +(defun mml-smime-sign-query () + (let ((func (nth 3 (assq mml-smime-use mml-smime-function-alist)))) + (if func + (funcall func)))) + +(defun mml-smime-encrypt-query () + (let ((func (nth 4 (assq mml-smime-use mml-smime-function-alist)))) + (if func + (funcall func)))) + +(defun mml-smime-verify (handle ctl) + (let ((func (nth 5 (assq mml-smime-use mml-smime-function-alist)))) + (if func + (funcall func handle ctl) + handle))) + +(defun mml-smime-verify-test (handle ctl) + (let ((func (nth 6 (assq mml-smime-use mml-smime-function-alist)))) + (if func + (funcall func handle ctl)))) + +(defun mml-smime-openssl-sign (cont) (when (null smime-keys) (customize-variable 'smime-keys) (error "No S/MIME keys configured, use customize to add your key")) @@ -44,7 +116,7 @@ (replace-match "\n" t t)) (goto-char (point-max))) -(defun mml-smime-encrypt (cont) +(defun mml-smime-openssl-encrypt (cont) (let (certnames certfiles tmp file tmpfiles) ;; xxx tmp files are always an security issue (while (setq tmp (pop cont)) @@ -70,7 +142,7 @@ nil)) (goto-char (point-max))) -(defun mml-smime-sign-query () +(defun mml-smime-openssl-sign-query () ;; query information (what certificate) from user when MML tag is ;; added, for use later by the signing process (when (null smime-keys) @@ -142,7 +214,7 @@ (quit)) result)) -(defun mml-smime-encrypt-query () +(defun mml-smime-openssl-encrypt-query () ;; todo: try dns/ldap automatically first, before prompting user (let (certs done) (while (not done) @@ -158,7 +230,7 @@ (setq done (not (y-or-n-p "Add more recipients? ")))) certs)) -(defun mml-smime-verify (handle ctl) +(defun mml-smime-openssl-verify (handle ctl) (with-temp-buffer (insert-buffer-substring (mm-handle-multipart-original-buffer ctl)) (goto-char (point-min)) @@ -223,8 +295,248 @@ (buffer-string) "\n"))))) handle) -(defun mml-smime-verify-test (handle ctl) +(defun mml-smime-openssl-verify-test (handle ctl) smime-openssl-program) + +(eval-and-compile + (autoload 'epg-make-context "epg")) + +(eval-when-compile + (defvar epg-user-id-alist) + (defvar epg-digest-algorithm-alist) + (defvar inhibit-redisplay) + (autoload 'epg-context-set-armor "epg") + (autoload 'epg-context-set-signers "epg") + (autoload 'epg-context-result-for "epg") + (autoload 'epg-new-signature-digest-algorithm "epg") + (autoload 'epg-verify-result-to-string "epg") + (autoload 'epg-list-keys "epg") + (autoload 'epg-decrypt-string "epg") + (autoload 'epg-verify-string "epg") + (autoload 'epg-sign-string "epg") + (autoload 'epg-encrypt-string "epg") + (autoload 'epg-passphrase-callback-function "epg") + (autoload 'epg-context-set-passphrase-callback "epg") + (autoload 'epg-configuration "epg-config") + (autoload 'epg-expand-group "epg-config") + (autoload 'epa-select-keys "epa")) + +(eval-when-compile + (defvar password-cache-expiry) + (autoload 'password-read "password") + (autoload 'password-cache-add "password") + (autoload 'password-cache-remove "password")) + +(defvar mml-smime-epg-secret-key-id-list nil) + +(defun mml-smime-epg-passphrase-callback (context key-id ignore) + (if (eq key-id 'SYM) + (epg-passphrase-callback-function context key-id nil) + (let* (entry + (passphrase + (password-read + (if (eq key-id 'PIN) + "Passphrase for PIN: " + (if (setq entry (assoc key-id epg-user-id-alist)) + (format "Passphrase for %s %s: " key-id (cdr entry)) + (format "Passphrase for %s: " key-id))) + (if (eq key-id 'PIN) + "PIN" + key-id)))) + (when passphrase + (let ((password-cache-expiry mml-smime-passphrase-cache-expiry)) + (password-cache-add key-id passphrase)) + (setq mml-smime-epg-secret-key-id-list + (cons key-id mml-smime-epg-secret-key-id-list)) + (copy-sequence passphrase))))) + +(defun mml-smime-epg-find-usable-key (keys usage) + (catch 'found + (while keys + (let ((pointer (epg-key-sub-key-list (car keys)))) + (while pointer + (if (and (memq usage (epg-sub-key-capability (car pointer))) + (not (memq (epg-sub-key-validity (car pointer)) + '(revoked expired)))) + (throw 'found (car keys))) + (setq pointer (cdr pointer)))) + (setq keys (cdr keys))))) + +(defun mml-smime-epg-sign (cont) + (let* ((inhibit-redisplay t) + (context (epg-make-context 'CMS)) + (boundary (mml-compute-boundary cont)) + signer-key + (signers + (or (message-options-get 'mml-smime-epg-signers) + (message-options-set + 'mml-smime-epg-signers + (if mml-smime-verbose + (epa-select-keys context "\ +Select keys for signing. +If no one is selected, default secret key is used. " + mml-smime-signers t) + (if mml-smime-signers + (mapcar + (lambda (signer) + (setq signer-key (mml-smime-epg-find-usable-key + (epg-list-keys context signer t) + 'sign)) + (unless (or signer-key + (y-or-n-p + (format "No secret key for %s; skip it? " + signer))) + (error "No secret key for %s" signer)) + signer-key) + mml-smime-signers)))))) + signature micalg) + (epg-context-set-signers context signers) + (if mml-smime-cache-passphrase + (epg-context-set-passphrase-callback + context + #'mml-smime-epg-passphrase-callback)) + (condition-case error + (setq signature (epg-sign-string context + (mm-replace-in-string (buffer-string) + "\n" "\r\n") + t) + mml-smime-epg-secret-key-id-list nil) + (error + (while mml-smime-epg-secret-key-id-list + (password-cache-remove (car mml-smime-epg-secret-key-id-list)) + (setq mml-smime-epg-secret-key-id-list + (cdr mml-smime-epg-secret-key-id-list))) + (signal (car error) (cdr error)))) + (if (epg-context-result-for context 'sign) + (setq micalg (epg-new-signature-digest-algorithm + (car (epg-context-result-for context 'sign))))) + (goto-char (point-min)) + (insert (format "Content-Type: multipart/signed; boundary=\"%s\";\n" + boundary)) + (if micalg + (insert (format "\tmicalg=%s; " + (downcase + (cdr (assq micalg + epg-digest-algorithm-alist)))))) + (insert "protocol=\"application/pkcs7-signature\"\n") + (insert (format "\n--%s\n" boundary)) + (goto-char (point-max)) + (insert (format "\n--%s\n" boundary)) + (insert "Content-Type: application/pkcs7-signature; name=smime.p7s +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename=smime.p7s + +") + (insert (base64-encode-string signature) "\n") + (goto-char (point-max)) + (insert (format "--%s--\n" boundary)) + (goto-char (point-max)))) + +(defun mml-smime-epg-encrypt (cont) + (let ((inhibit-redisplay t) + (context (epg-make-context 'CMS)) + (config (epg-configuration)) + (recipients (message-options-get 'mml-smime-epg-recipients)) + cipher signers + (boundary (mml-compute-boundary cont)) + recipient-key) + (unless recipients + (setq recipients + (apply #'nconc + (mapcar + (lambda (recipient) + (or (epg-expand-group config recipient) + (list recipient))) + (split-string + (or (message-options-get 'message-recipients) + (message-options-set 'message-recipients + (read-string "Recipients: "))) + "[ \f\t\n\r\v,]+")))) + (if mml-smime-verbose + (setq recipients + (epa-select-keys context "\ +Select recipients for encryption. +If no one is selected, symmetric encryption will be performed. " + recipients)) + (setq recipients + (mapcar + (lambda (recipient) + (setq recipient-key (mml-smime-epg-find-usable-key + (epg-list-keys context recipient) + 'encrypt)) + (unless (or recipient-key + (y-or-n-p + (format "No public key for %s; skip it? " + recipient))) + (error "No public key for %s" recipient)) + recipient-key) + recipients)) + (unless recipients + (error "No recipient specified"))) + (message-options-set 'mml-smime-epg-recipients recipients)) + (if mml-smime-cache-passphrase + (epg-context-set-passphrase-callback + context + #'mml-smime-epg-passphrase-callback)) + (condition-case error + (setq cipher + (epg-encrypt-string context (buffer-string) recipients) + mml-smime-epg-secret-key-id-list nil) + (error + (while mml-smime-epg-secret-key-id-list + (password-cache-remove (car mml-smime-epg-secret-key-id-list)) + (setq mml-smime-epg-secret-key-id-list + (cdr mml-smime-epg-secret-key-id-list))) + (signal (car error) (cdr error)))) + (delete-region (point-min) (point-max)) + (goto-char (point-min)) + (insert "\ +Content-Type: application/pkcs7-mime; + smime-type=enveloped-data; + name=smime.p7m +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename=smime.p7m + +") + (insert (base64-encode-string cipher)) + (goto-char (point-max)))) + +(defun mml-smime-epg-verify (handle ctl) + (catch 'error + (let ((inhibit-redisplay t) + context plain signature-file part signature) + (when (or (null (setq part (mm-find-raw-part-by-type + ctl (or (mm-handle-multipart-ctl-parameter + ctl 'protocol) + "application/pkcs7-signature") + t))) + (null (setq signature (mm-find-part-by-type + (cdr handle) + "application/pkcs7-signature" + nil t)))) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-info "Corrupted") + (throw 'error handle)) + (setq part (mm-replace-in-string part "\n" "\r\n" t) + context (epg-make-context 'CMS)) + (condition-case error + (setq plain (epg-verify-string context (mm-get-part signature) part)) + (error + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-info "Failed") + (if (eq (car error) 'quit) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-details "Quit.") + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-details (format "%S" error))) + (throw 'error handle))) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-info + (epg-verify-result-to-string (epg-context-result-for context 'verify))) + handle))) + +(defun mml-smime-epg-verify-test (handle ctl) + t) (provide 'mml-smime) Index: gnus/lisp/mml.el diff -u gnus/lisp/mml.el:7.48 gnus/lisp/mml.el:7.51 --- gnus/lisp/mml.el:7.48 Wed Apr 26 16:57:36 2006 +++ gnus/lisp/mml.el Tue Feb 20 00:27:42 2007 @@ -1,7 +1,7 @@ ;;; mml.el --- A package for parsing and validating MML documents ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; This file is part of GNU Emacs. @@ -70,6 +70,46 @@ :type '(repeat (symbol :tag "Parameter")) :group 'message) +(defcustom mml-content-disposition-alist + '((text (rtf . "attachment") (t . "inline")) + (t . "attachment")) + "Alist of MIME types or regexps matching file names and default dispositions. +Each element should be one of the following three forms: + + (REGEXP . DISPOSITION) + (SUPERTYPE (SUBTYPE . DISPOSITION) (SUBTYPE . DISPOSITION)...) + (TYPE . DISPOSITION) + +Where REGEXP is a string which matches the file name (if any) of an +attachment, SUPERTYPE, SUBTYPE and TYPE should be symbols which are a +MIME supertype (e.g., text), a MIME subtype (e.g., plain) and a MIME +type (e.g., text/plain) respectively, and DISPOSITION should be either +the string \"attachment\" or the string \"inline\". The value t for +SUPERTYPE, SUBTYPE or TYPE matches any of those types. The first +match found will be used." + :version "23.0" ;; No Gnus + :type (let ((dispositions '(radio :format "DISPOSITION: %v" + :value "attachment" + (const :format "%v " "attachment") + (const :format "%v\n" "inline")))) + `(repeat + :offset 0 + (choice :format "%[Value Menu%]%v" + (cons :tag "(REGEXP . DISPOSITION)" :extra-offset 4 + (regexp :tag "REGEXP" :value ".*") + ,dispositions) + (cons :tag "(SUPERTYPE (SUBTYPE . DISPOSITION)...)" + :indent 0 + (symbol :tag " SUPERTYPE" :value text) + (repeat :format "%v%i\n" :offset 0 :extra-offset 4 + (cons :format "%v" :extra-offset 5 + (symbol :tag "SUBTYPE" :value t) + ,dispositions))) + (cons :tag "(TYPE . DISPOSITION)" :extra-offset 4 + (symbol :tag "TYPE" :value t) + ,dispositions)))) + :group 'message) + (defcustom mml-insert-mime-headers-always nil "If non-nil, always put Content-Type: text/plain at top of empty parts. It is necessary to work against a bug in certain clients." @@ -505,9 +545,9 @@ (mm-with-unibyte-buffer (cond ((cdr (assq 'buffer cont)) - (insert (with-current-buffer (cdr (assq 'buffer cont)) - (mm-with-unibyte-current-buffer - (buffer-string))))) + (insert (mm-string-as-unibyte + (with-current-buffer (cdr (assq 'buffer cont)) + (buffer-string))))) ((and filename (not (equal (cdr (assq 'nofile cont)) "yes"))) (let ((coding-system-for-read mm-binary-coding-system)) @@ -667,6 +707,30 @@ "") mml-base-boundary)) +(defun mml-content-disposition (type &optional filename) + "Return a default disposition name suitable to TYPE or FILENAME." + (let ((defs mml-content-disposition-alist) + disposition def types) + (while (and (not disposition) defs) + (setq def (pop defs)) + (cond ((stringp (car def)) + (when (and filename + (string-match (car def) filename)) + (setq disposition (cdr def)))) + ((consp (cdr def)) + (when (string= (car (setq types (split-string type "/"))) + (car def)) + (setq type (cadr types) + types (cdr def)) + (while (and (not disposition) types) + (setq def (pop types)) + (when (or (eq (car def) t) (string= type (car def))) + (setq disposition (cdr def)))))) + (t + (when (or (eq (car def) t) (string= type (car def))) + (setq disposition (cdr def)))))) + (or disposition "attachment"))) + (defun mml-insert-mime-headers (cont type charset encoding flowed) (let (parameters id disposition description) (setq parameters @@ -697,7 +761,9 @@ cont mml-content-disposition-parameters)) (when (or (setq disposition (cdr (assq 'disposition cont))) parameters) - (insert "Content-Disposition: " (or disposition "inline")) + (insert "Content-Disposition: " + (or disposition + (mml-content-disposition type (cdr (assq 'filename cont))))) (when parameters (mml-insert-parameter-string cont mml-content-disposition-parameters)) @@ -1056,16 +1122,13 @@ (setq description nil)) description)) -(defun mml-minibuffer-read-disposition (type &optional default) - (unless default (setq default - (if (and (string-match "\\`text/" type) - (not (string-match "\\`text/rtf\\'" type))) - "inline" - "attachment"))) +(defun mml-minibuffer-read-disposition (type &optional default filename) + (unless default + (setq default (mml-content-disposition type filename))) (let ((disposition (completing-read - (format "Disposition (default %s): " default) - '(("attachment") ("inline") ("")) - nil t nil nil default))) + (format "Disposition (default %s): " default) + '(("attachment") ("inline") ("")) + nil t nil nil default))) (if (not (equal disposition "")) disposition default))) @@ -1157,7 +1220,7 @@ (let* ((file (mml-minibuffer-read-file "Attach file: ")) (type (mml-minibuffer-read-type file)) (description (mml-minibuffer-read-description)) - (disposition (mml-minibuffer-read-disposition type))) + (disposition (mml-minibuffer-read-disposition type nil file))) (list file type description disposition))) (save-excursion (unless (message-in-body-p) (goto-char (point-max))) @@ -1188,7 +1251,7 @@ (when (memq 'description mml-dnd-attach-options) (setq description (mml-minibuffer-read-description))) (when (memq 'disposition mml-dnd-attach-options) - (setq disposition (mml-minibuffer-read-disposition type))) + (setq disposition (mml-minibuffer-read-disposition type nil file))) (mml-attach-file file type description disposition))))) (defun mml-attach-buffer (buffer &optional type description) Index: gnus/lisp/mml1991.el diff -u gnus/lisp/mml1991.el:7.10 gnus/lisp/mml1991.el:7.21 --- gnus/lisp/mml1991.el:7.10 Thu Apr 27 09:00:49 2006 +++ gnus/lisp/mml1991.el Wed Jan 24 08:15:37 2007 @@ -1,9 +1,9 @@ ;;; mml1991.el --- Old PGP message format (RFC 1991) support for MML ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. -;; Author: Sascha Lüdecke , +;; Author: Sascha Ldecke , ;; Simon Josefsson (Mailcrypt interface, Gnus glue) ;; Keywords PGP @@ -32,6 +32,8 @@ (require 'cl) (require 'mm-util)) +(require 'mml-sec) + (defvar mc-pgp-always-sign) (autoload 'quoted-printable-decode-region "qp") @@ -46,9 +48,28 @@ (gpg mml1991-gpg-sign mml1991-gpg-encrypt) (pgg mml1991-pgg-sign - mml1991-pgg-encrypt)) + mml1991-pgg-encrypt) + (epg mml1991-epg-sign + mml1991-epg-encrypt)) "Alist of PGP functions.") +(defvar mml1991-verbose mml-secure-verbose + "If non-nil, ask the user about the current operation more verbosely.") + +(defvar mml1991-cache-passphrase mml-secure-cache-passphrase + "If t, cache passphrase.") + +(defvar mml1991-passphrase-cache-expiry mml-secure-passphrase-cache-expiry + "How many seconds the passphrase is cached. +Whether the passphrase is cached at all is controlled by +`mml1991-cache-passphrase'.") + +(defvar mml1991-signers nil + "A list of your own key ID which will be used to sign a message.") + +(defvar mml1991-encrypt-to-self nil + "If t, add your own key ID to recipient list when encryption.") + ;;; mailcrypt wrapper (eval-and-compile @@ -288,6 +309,183 @@ (delete-region (point-min) (point-max)) (insert "\n") (insert-buffer-substring pgg-output-buffer) + t) + +;; epg wrapper + +(eval-and-compile + (autoload 'epg-make-context "epg")) + +(eval-when-compile + (defvar epg-user-id-alist) + (autoload 'epg-passphrase-callback-function "epg") + (autoload 'epa-select-keys "epa") + (autoload 'epg-list-keys "epg") + (autoload 'epg-context-set-armor "epg") + (autoload 'epg-context-set-textmode "epg") + (autoload 'epg-context-set-signers "epg") + (autoload 'epg-context-set-passphrase-callback "epg") + (autoload 'epg-sign-string "epg") + (autoload 'epg-encrypt-string "epg") + (autoload 'epg-configuration "epg-config") + (autoload 'epg-expand-group "epg-config")) + +(eval-when-compile + (defvar password-cache-expiry) + (autoload 'password-read "password") + (autoload 'password-cache-add "password") + (autoload 'password-cache-remove "password")) + +(defvar mml1991-epg-secret-key-id-list nil) + +(defun mml1991-epg-passphrase-callback (context key-id ignore) + (if (eq key-id 'SYM) + (epg-passphrase-callback-function context key-id nil) + (let* ((entry (assoc key-id epg-user-id-alist)) + (passphrase + (password-read + (format "GnuPG passphrase for %s: " + (if entry + (cdr entry) + key-id)) + (if (eq key-id 'PIN) + "PIN" + key-id)))) + (when passphrase + (let ((password-cache-expiry mml1991-passphrase-cache-expiry)) + (password-cache-add key-id passphrase)) + (setq mml1991-epg-secret-key-id-list + (cons key-id mml1991-epg-secret-key-id-list)) + (copy-sequence passphrase))))) + +(defun mml1991-epg-sign (cont) + (let ((context (epg-make-context)) + headers cte signers signature) + (if mml1991-verbose + (setq signers (epa-select-keys context "Select keys for signing. +If no one is selected, default secret key is used. " + mml1991-signers t)) + (if mml1991-signers + (setq signers (mapcar (lambda (name) + (car (epg-list-keys context name t))) + mml1991-signers)))) + (epg-context-set-armor context t) + (epg-context-set-textmode context t) + (epg-context-set-signers context signers) + (if mml1991-cache-passphrase + (epg-context-set-passphrase-callback + context + #'mml1991-epg-passphrase-callback)) + ;; Don't sign headers. + (goto-char (point-min)) + (when (re-search-forward "^$" nil t) + (setq headers (buffer-substring (point-min) (point))) + (save-restriction + (narrow-to-region (point-min) (point)) + (setq cte (mail-fetch-field "content-transfer-encoding"))) + (forward-line 1) + (delete-region (point-min) (point)) + (when cte + (setq cte (intern (downcase cte))) + (mm-decode-content-transfer-encoding cte))) + (condition-case error + (setq signature (epg-sign-string context (buffer-string) 'clear) + mml1991-epg-secret-key-id-list nil) + (error + (while mml1991-epg-secret-key-id-list + (password-cache-remove (car mml1991-epg-secret-key-id-list)) + (setq mml1991-epg-secret-key-id-list + (cdr mml1991-epg-secret-key-id-list))) + (signal (car error) (cdr error)))) + (delete-region (point-min) (point-max)) + (mm-with-unibyte-current-buffer + (insert signature) + (goto-char (point-min)) + (while (re-search-forward "\r+$" nil t) + (replace-match "" t t)) + (when cte + (mm-encode-content-transfer-encoding cte)) + (goto-char (point-min)) + (when headers + (insert headers)) + (insert "\n")) + t)) + +(defun mml1991-epg-encrypt (cont &optional sign) + (goto-char (point-min)) + (when (re-search-forward "^$" nil t) + (let ((cte (save-restriction + (narrow-to-region (point-min) (point)) + (mail-fetch-field "content-transfer-encoding")))) + ;; Strip MIME headers since it will be ASCII armoured. + (forward-line 1) + (delete-region (point-min) (point)) + (when cte + (mm-decode-content-transfer-encoding (intern (downcase cte)))))) + (let ((context (epg-make-context)) + (recipients + (if (message-options-get 'message-recipients) + (split-string + (message-options-get 'message-recipients) + "[ \f\t\n\r\v,]+"))) + cipher signers config) + ;; We should remove this check if epg-0.0.6 is released. + (if (and (condition-case nil + (require 'epg-config) + (error)) + (functionp #'epg-expand-group)) + (setq config (epg-configuration) + recipients + (apply #'nconc + (mapcar (lambda (recipient) + (or (epg-expand-group config recipient) + (list recipient))) + recipients)))) + (if mml1991-verbose + (setq recipients + (epa-select-keys context "Select recipients for encryption. +If no one is selected, symmetric encryption will be performed. " + recipients)) + (setq recipients + (delq nil (mapcar (lambda (name) + (car (epg-list-keys context name))) + recipients)))) + (if mml1991-encrypt-to-self + (if mml1991-signers + (setq recipients + (nconc recipients + (mapcar (lambda (name) + (car (epg-list-keys context name))) + mml1991-signers))) + (error "mml1991-signers not set"))) + (when sign + (if mml1991-verbose + (setq signers (epa-select-keys context "Select keys for signing. +If no one is selected, default secret key is used. " + mml1991-signers t)) + (if mml1991-signers + (setq signers (mapcar (lambda (name) + (car (epg-list-keys context name t))) + mml1991-signers)))) + (epg-context-set-signers context signers)) + (epg-context-set-armor context t) + (epg-context-set-textmode context t) + (if mml1991-cache-passphrase + (epg-context-set-passphrase-callback + context + #'mml1991-epg-passphrase-callback)) + (condition-case error + (setq cipher + (epg-encrypt-string context (buffer-string) recipients sign) + mml1991-epg-secret-key-id-list nil) + (error + (while mml1991-epg-secret-key-id-list + (password-cache-remove (car mml1991-epg-secret-key-id-list)) + (setq mml1991-epg-secret-key-id-list + (cdr mml1991-epg-secret-key-id-list))) + (signal (car error) (cdr error)))) + (delete-region (point-min) (point-max)) + (insert "\n" cipher)) t) ;;;###autoload Index: gnus/lisp/mml2015.el diff -u gnus/lisp/mml2015.el:7.15 gnus/lisp/mml2015.el:7.45 --- gnus/lisp/mml2015.el:7.15 Fri Apr 28 07:17:40 2006 +++ gnus/lisp/mml2015.el Wed Feb 28 23:19:09 2007 @@ -1,7 +1,7 @@ ;;; mml2015.el --- MIME Security with Pretty Good Privacy (PGP) ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: PGP MIME MML @@ -34,10 +34,17 @@ (require 'mm-decode) (require 'mm-util) (require 'mml) +(require 'mml-sec) (defvar mc-pgp-always-sign) (defvar mml2015-use (or + (condition-case nil + (progn + (require 'epg-config) + (epg-check-configuration (epg-configuration)) + 'epg) + (error)) (progn (ignore-errors ;; Avoid the "Recursive load suspected" error @@ -58,7 +65,7 @@ (fboundp 'mc-cleanup-recipient-headers) 'mailcrypt))) "The package used for PGP/MIME. -Valid packages include `pgg', `gpg' and `mailcrypt'.") +Valid packages include `epg', `pgg', `gpg' and `mailcrypt'.") ;; Something is not RFC2015. (defvar mml2015-function-alist @@ -79,7 +86,13 @@ mml2015-pgg-verify mml2015-pgg-decrypt mml2015-pgg-clear-verify - mml2015-pgg-clear-decrypt)) + mml2015-pgg-clear-decrypt) + (epg mml2015-epg-sign + mml2015-epg-encrypt + mml2015-epg-verify + mml2015-epg-decrypt + mml2015-epg-clear-verify + mml2015-epg-clear-decrypt)) "Alist of PGP/MIME functions.") (defvar mml2015-result-buffer nil) @@ -96,6 +109,38 @@ :type '(repeat (cons (regexp :tag "GnuPG output regexp") (boolean :tag "Trust key")))) +(defcustom mml2015-verbose mml-secure-verbose + "If non-nil, ask the user about the current operation more verbosely." + :group 'mime-security + :type 'boolean) + +(defcustom mml2015-cache-passphrase mml-secure-cache-passphrase + "If t, cache passphrase." + :group 'mime-security + :type 'boolean) + +(defcustom mml2015-passphrase-cache-expiry mml-secure-passphrase-cache-expiry + "How many seconds the passphrase is cached. +Whether the passphrase is cached at all is controlled by +`mml2015-cache-passphrase'." + :group 'mime-security + :type 'integer) + +(defcustom mml2015-signers nil + "A list of your own key ID which will be used to sign a message." + :group 'mime-security + :type '(repeat (string :tag "Key ID"))) + +(defcustom mml2015-encrypt-to-self nil + "If t, add your own key ID to recipient list when encryption." + :group 'mime-security + :type 'boolean) + +(defcustom mml2015-always-trust t + "If t, GnuPG skip key validation on encryption." + :group 'mime-security + :type 'boolean) + ;;; mailcrypt wrapper (eval-and-compile @@ -479,9 +524,8 @@ (with-temp-buffer (setq message (current-buffer)) (insert part) - ;; Convert to in verify mode. Sign and - ;; clearsign use --textmode. The conversion is not necessary. - ;; In clearverify, the conversion is not necessary either. + ;; Convert to in signed text. If --textmode is + ;; specified when signing, the conversion is not necessary. (goto-char (point-min)) (end-of-line) (while (not (eobp)) @@ -738,9 +782,8 @@ handle) (with-temp-buffer (insert part) - ;; Convert to in verify mode. Sign and - ;; clearsign use --textmode. The conversion is not necessary. - ;; In clearverify, the conversion is not necessary either. + ;; Convert to in signed text. If --textmode is + ;; specified when signing, the conversion is not necessary. (goto-char (point-min)) (end-of-line) (while (not (eobp)) @@ -789,7 +832,7 @@ (if (condition-case err (prog1 (mm-with-unibyte-buffer - (insert (encode-coding-string text coding-system)) + (insert (mm-encode-coding-string text coding-system)) (pgg-verify-region (point-min) (point-max) nil t)) (goto-char (point-min)) (while (search-forward "\r\n" nil t) @@ -871,6 +914,393 @@ (insert (format "--%s\n" boundary)) (insert "Content-Type: application/octet-stream\n\n") (insert-buffer-substring pgg-output-buffer) + (goto-char (point-max)) + (insert (format "--%s--\n" boundary)) + (goto-char (point-max)))) + +;;; epg wrapper + +(eval-and-compile + (autoload 'epg-make-context "epg")) + +(eval-when-compile + (defvar epg-user-id-alist) + (defvar epg-digest-algorithm-alist) + (defvar inhibit-redisplay) + (autoload 'epg-context-set-armor "epg") + (autoload 'epg-context-set-textmode "epg") + (autoload 'epg-context-set-signers "epg") + (autoload 'epg-context-result-for "epg") + (autoload 'epg-new-signature-digest-algorithm "epg") + (autoload 'epg-verify-result-to-string "epg") + (autoload 'epg-list-keys "epg") + (autoload 'epg-decrypt-string "epg") + (autoload 'epg-verify-string "epg") + (autoload 'epg-sign-string "epg") + (autoload 'epg-encrypt-string "epg") + (autoload 'epg-passphrase-callback-function "epg") + (autoload 'epg-context-set-passphrase-callback "epg") + (autoload 'epg-key-sub-key-list "epg") + (autoload 'epg-sub-key-capability "epg") + (autoload 'epg-sub-key-validity "epg") + (autoload 'epg-configuration "epg-config") + (autoload 'epg-expand-group "epg-config") + (autoload 'epa-select-keys "epa")) + +(eval-when-compile + (defvar password-cache-expiry) + (autoload 'password-read "password") + (autoload 'password-cache-add "password") + (autoload 'password-cache-remove "password")) + +(defvar mml2015-epg-secret-key-id-list nil) + +(defun mml2015-epg-passphrase-callback (context key-id ignore) + (if (eq key-id 'SYM) + (epg-passphrase-callback-function context key-id nil) + (let* (entry + (passphrase + (password-read + (if (eq key-id 'PIN) + "Passphrase for PIN: " + (if (setq entry (assoc key-id epg-user-id-alist)) + (format "Passphrase for %s %s: " key-id (cdr entry)) + (format "Passphrase for %s: " key-id))) + (if (eq key-id 'PIN) + "PIN" + key-id)))) + (when passphrase + (let ((password-cache-expiry mml2015-passphrase-cache-expiry)) + (password-cache-add key-id passphrase)) + (setq mml2015-epg-secret-key-id-list + (cons key-id mml2015-epg-secret-key-id-list)) + (copy-sequence passphrase))))) + +(defun mml2015-epg-find-usable-key (keys usage) + (catch 'found + (while keys + (let ((pointer (epg-key-sub-key-list (car keys)))) + (while pointer + (if (and (memq usage (epg-sub-key-capability (car pointer))) + (not (memq (epg-sub-key-validity (car pointer)) + '(revoked expired)))) + (throw 'found (car keys))) + (setq pointer (cdr pointer)))) + (setq keys (cdr keys))))) + +(defun mml2015-epg-decrypt (handle ctl) + (catch 'error + (let ((inhibit-redisplay t) + context plain child handles result decrypt-status) + (unless (setq child (mm-find-part-by-type + (cdr handle) + "application/octet-stream" nil t)) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-info "Corrupted") + (throw 'error handle)) + (setq context (epg-make-context)) + (if mml2015-cache-passphrase + (epg-context-set-passphrase-callback + context + #'mml2015-epg-passphrase-callback)) + (condition-case error + (setq plain (epg-decrypt-string context (mm-get-part child)) + mml2015-epg-secret-key-id-list nil) + (error + (while mml2015-epg-secret-key-id-list + (password-cache-remove (car mml2015-epg-secret-key-id-list)) + (setq mml2015-epg-secret-key-id-list + (cdr mml2015-epg-secret-key-id-list))) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-info "Failed") + (if (eq (car error) 'quit) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-details "Quit.") + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-details (mml2015-format-error error))) + (throw 'error handle))) + (with-temp-buffer + (insert plain) + (goto-char (point-min)) + (while (search-forward "\r\n" nil t) + (replace-match "\n" t t)) + (setq handles (mm-dissect-buffer t)) + (mm-destroy-parts handle) + (if (epg-context-result-for context 'verify) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-info + (concat "OK\n" + (epg-verify-result-to-string + (epg-context-result-for context 'verify)))) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-info "OK")) + (if (stringp (car handles)) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-details + (mm-handle-multipart-ctl-parameter handles 'gnus-details)))) + (if (listp (car handles)) + handles + (list handles))))) + +(defun mml2015-epg-clear-decrypt () + (let ((inhibit-redisplay t) + (context (epg-make-context)) + plain) + (if mml2015-cache-passphrase + (epg-context-set-passphrase-callback + context + #'mml2015-epg-passphrase-callback)) + (condition-case error + (setq plain (epg-decrypt-string context (buffer-string)) + mml2015-epg-secret-key-id-list nil) + (error + (while mml2015-epg-secret-key-id-list + (password-cache-remove (car mml2015-epg-secret-key-id-list)) + (setq mml2015-epg-secret-key-id-list + (cdr mml2015-epg-secret-key-id-list))) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-info "Failed") + (if (eq (car error) 'quit) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-details "Quit.") + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-details (mml2015-format-error error))))) + (when plain + (erase-buffer) + ;; Treat data which epg returns as a unibyte string. + (mm-disable-multibyte) + (insert plain) + (goto-char (point-min)) + (while (search-forward "\r\n" nil t) + (replace-match "\n" t t)) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-info "OK") + (if (epg-context-result-for context 'verify) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-details + (epg-verify-result-to-string + (epg-context-result-for context 'verify))))))) + +(defun mml2015-epg-verify (handle ctl) + (catch 'error + (let ((inhibit-redisplay t) + context plain signature-file part signature) + (when (or (null (setq part (mm-find-raw-part-by-type + ctl (or (mm-handle-multipart-ctl-parameter + ctl 'protocol) + "application/pgp-signature") + t))) + (null (setq signature (mm-find-part-by-type + (cdr handle) "application/pgp-signature" + nil t)))) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-info "Corrupted") + (throw 'error handle)) + (setq part (mm-replace-in-string part "\n" "\r\n" t) + signature (mm-get-part signature) + context (epg-make-context)) + (condition-case error + (setq plain (epg-verify-string context signature part)) + (error + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-info "Failed") + (if (eq (car error) 'quit) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-details "Quit.") + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-details (mml2015-format-error error))) + (throw 'error handle))) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-info + (epg-verify-result-to-string (epg-context-result-for context 'verify))) + handle))) + +(defun mml2015-epg-clear-verify () + (let ((inhibit-redisplay t) + (context (epg-make-context)) + (signature (mm-encode-coding-string (buffer-string) + buffer-file-coding-system)) + plain) + (condition-case error + (setq plain (epg-verify-string context signature)) + (error + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-info "Failed") + (if (eq (car error) 'quit) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-details "Quit.") + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-details (mml2015-format-error error))))) + (if plain + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-info + (epg-verify-result-to-string + (epg-context-result-for context 'verify)))))) + +(defun mml2015-epg-sign (cont) + (let* ((inhibit-redisplay t) + (context (epg-make-context)) + (boundary (mml-compute-boundary cont)) + signer-key + (signers + (or (message-options-get 'mml2015-epg-signers) + (message-options-set + 'mml2015-epg-signers + (if mml2015-verbose + (epa-select-keys context "\ +Select keys for signing. +If no one is selected, default secret key is used. " + mml2015-signers t) + (if mml2015-signers + (mapcar + (lambda (signer) + (setq signer-key (mml2015-epg-find-usable-key + (epg-list-keys context signer t) + 'sign)) + (unless (or signer-key + (y-or-n-p + (format "No secret key for %s; skip it? " + signer))) + (error "No secret key for %s" signer)) + signer-key) + mml2015-signers)))))) + signature micalg) + (epg-context-set-armor context t) + (epg-context-set-textmode context t) + (epg-context-set-signers context signers) + (if mml2015-cache-passphrase + (epg-context-set-passphrase-callback + context + #'mml2015-epg-passphrase-callback)) + (condition-case error + (setq signature (epg-sign-string context (buffer-string) t) + mml2015-epg-secret-key-id-list nil) + (error + (while mml2015-epg-secret-key-id-list + (password-cache-remove (car mml2015-epg-secret-key-id-list)) + (setq mml2015-epg-secret-key-id-list + (cdr mml2015-epg-secret-key-id-list))) + (signal (car error) (cdr error)))) + (if (epg-context-result-for context 'sign) + (setq micalg (epg-new-signature-digest-algorithm + (car (epg-context-result-for context 'sign))))) + (goto-char (point-min)) + (insert (format "Content-Type: multipart/signed; boundary=\"%s\";\n" + boundary)) + (if micalg + (insert (format "\tmicalg=pgp-%s; " + (downcase + (cdr (assq micalg + epg-digest-algorithm-alist)))))) + (insert "protocol=\"application/pgp-signature\"\n") + (insert (format "\n--%s\n" boundary)) + (goto-char (point-max)) + (insert (format "\n--%s\n" boundary)) + (insert "Content-Type: application/pgp-signature\n\n") + (insert signature) + (goto-char (point-max)) + (insert (format "--%s--\n" boundary)) + (goto-char (point-max)))) + +(defun mml2015-epg-encrypt (cont &optional sign) + (let ((inhibit-redisplay t) + (context (epg-make-context)) + (config (epg-configuration)) + (recipients (message-options-get 'mml2015-epg-recipients)) + cipher signers + (boundary (mml-compute-boundary cont)) + recipient-key signer-key) + (unless recipients + (setq recipients + (apply #'nconc + (mapcar + (lambda (recipient) + (or (epg-expand-group config recipient) + (list (concat "<" recipient ">")))) + (split-string + (or (message-options-get 'message-recipients) + (message-options-set 'message-recipients + (read-string "Recipients: "))) + "[ \f\t\n\r\v,]+")))) + (when mml2015-encrypt-to-self + (unless mml2015-signers + (error "mml2015-signers not set")) + (setq recipients (nconc recipients mml2015-signers))) + (if mml2015-verbose + (setq recipients + (epa-select-keys context "\ +Select recipients for encryption. +If no one is selected, symmetric encryption will be performed. " + recipients)) + (setq recipients + (mapcar + (lambda (recipient) + (setq recipient-key (mml2015-epg-find-usable-key + (epg-list-keys context recipient) + 'encrypt)) + (unless (or recipient-key + (y-or-n-p + (format "No public key for %s; skip it? " + recipient))) + (error "No public key for %s" recipient)) + recipient-key) + recipients)) + (unless recipients + (error "No recipient specified"))) + (message-options-set 'mml2015-epg-recipients recipients)) + (when sign + (setq signers + (or (message-options-get 'mml2015-epg-signers) + (message-options-set + 'mml2015-epg-signers + (if mml2015-verbose + (epa-select-keys context "\ +Select keys for signing. +If no one is selected, default secret key is used. " + mml2015-signers t) + (if mml2015-signers + (mapcar + (lambda (signer) + (setq signer-key (mml2015-epg-find-usable-key + (epg-list-keys context signer t) + 'sign)) + (unless (or signer-key + (y-or-n-p + (format + "No secret key for %s; skip it? " + signer))) + (error "No secret key for %s" signer)) + signer-key) + mml2015-signers)))))) + (epg-context-set-signers context signers)) + (epg-context-set-armor context t) + (epg-context-set-textmode context t) + (if mml2015-cache-passphrase + (epg-context-set-passphrase-callback + context + #'mml2015-epg-passphrase-callback)) + (condition-case error + (setq cipher + (epg-encrypt-string context (buffer-string) recipients sign + mml2015-always-trust) + mml2015-epg-secret-key-id-list nil) + (error + (while mml2015-epg-secret-key-id-list + (password-cache-remove (car mml2015-epg-secret-key-id-list)) + (setq mml2015-epg-secret-key-id-list + (cdr mml2015-epg-secret-key-id-list))) + (signal (car error) (cdr error)))) + (delete-region (point-min) (point-max)) + (goto-char (point-min)) + (insert (format "Content-Type: multipart/encrypted; boundary=\"%s\";\n" + boundary)) + (insert "\tprotocol=\"application/pgp-encrypted\"\n\n") + (insert (format "--%s\n" boundary)) + (insert "Content-Type: application/pgp-encrypted\n\n") + (insert "Version: 1\n\n") + (insert (format "--%s\n" boundary)) + (insert "Content-Type: application/octet-stream\n\n") + (insert cipher) (goto-char (point-max)) (insert (format "--%s--\n" boundary)) (goto-char (point-max)))) Index: gnus/lisp/netrc.el diff -u gnus/lisp/netrc.el:7.13 gnus/lisp/netrc.el:7.15 --- gnus/lisp/netrc.el:7.13 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/netrc.el Wed Feb 28 23:26:30 2007 @@ -1,6 +1,6 @@ ;;; netrc.el --- .netrc parsing functionality ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Modularizer: Ted Zlatanov @@ -169,7 +169,7 @@ (with-temp-buffer (insert-file-contents netrc-services-file) (while (search-forward "#" nil t) - (delete-region (1- (point)) (line-end-position))) + (delete-region (1- (point)) (point-at-eol))) (goto-char (point-min)) (while (re-search-forward "^ *\\([^ \n\t]+\\)[ \t]+\\([0-9]+\\)/\\([^ \t\n]+\\)" nil t) Index: gnus/lisp/nnagent.el diff -u gnus/lisp/nnagent.el:7.10 gnus/lisp/nnagent.el:7.11 --- gnus/lisp/nnagent.el:7.10 Fri Apr 14 17:58:07 2006 +++ gnus/lisp/nnagent.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nnagent.el --- offline backend for Gnus ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news, mail Index: gnus/lisp/nnbabyl.el diff -u gnus/lisp/nnbabyl.el:7.8 gnus/lisp/nnbabyl.el:7.9 --- gnus/lisp/nnbabyl.el:7.8 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nnbabyl.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nnbabyl.el --- rmail mbox access for Gnus ;; Copyright (C) 1995, 1996, 1997, 1998, 1099, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Masanobu UMEDA Index: gnus/lisp/nndb.el diff -u gnus/lisp/nndb.el:7.12 gnus/lisp/nndb.el:7.13 --- gnus/lisp/nndb.el:7.12 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nndb.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nndb.el --- nndb access for Gnus ;; Copyright (C) 1997, 1998, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Kai Grossjohann Index: gnus/lisp/nndiary.el diff -u gnus/lisp/nndiary.el:7.12 gnus/lisp/nndiary.el:7.14 --- gnus/lisp/nndiary.el:7.12 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nndiary.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nndiary.el --- A diary back end for Gnus ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Didier Verna ;; Maintainer: Didier Verna @@ -144,7 +144,7 @@ NOTE: the units of measure actually express dates, not durations: if you use 'week, messages will pop up on Sundays at 00:00 (or Mondays if -`nndiary-week-starts-on-monday' is non nil) and *not* 7 days before the +`nndiary-week-starts-on-monday' is non-nil) and *not* 7 days before the appointement, if you use 'month, messages will pop up on the first day of each months, at 00:00 and so on. Index: gnus/lisp/nndir.el diff -u gnus/lisp/nndir.el:7.5 gnus/lisp/nndir.el:7.7 --- gnus/lisp/nndir.el:7.5 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nndir.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nndir.el --- single directory newsgroup access for Gnus -;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/nndoc.el diff -u gnus/lisp/nndoc.el:7.9 gnus/lisp/nndoc.el:7.10 --- gnus/lisp/nndoc.el:7.9 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nndoc.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nndoc.el --- single file access for Gnus ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Masanobu UMEDA Index: gnus/lisp/nndraft.el diff -u gnus/lisp/nndraft.el:7.8 gnus/lisp/nndraft.el:7.10 --- gnus/lisp/nndraft.el:7.8 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nndraft.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nndraft.el --- draft article access for Gnus ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -42,6 +42,11 @@ "Where nndraft will store its files." nnmh-directory) +(defvar nndraft-required-headers '(Date) + "*Headers to be generated when saving a draft message. +The headers in this variable and the ones in `message-required-headers' +are generated if and only if they are also in `message-draft-headers'.") + (defvoo nndraft-current-group "" nil nnmh-current-group) @@ -156,7 +161,7 @@ (save-excursion (message-generate-headers (message-headers-to-generate - message-required-headers message-draft-headers nil)))) + nndraft-required-headers message-draft-headers nil)))) (deffoo nndraft-request-associate-buffer (group) "Associate the current buffer with some article in the draft group." Index: gnus/lisp/nneething.el diff -u gnus/lisp/nneething.el:7.8 gnus/lisp/nneething.el:7.10 --- gnus/lisp/nneething.el:7.8 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nneething.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nneething.el --- arbitrary file access for Gnus ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Masanobu UMEDA @@ -303,7 +303,7 @@ (setq buf (cons (string (string-to-number (match-string 1 file) 16)) (cons (substring file pos (match-beginning 0)) buf)) pos (match-end 0))) - (decode-coding-string + (mm-decode-coding-string (apply (function concat) (nreverse (cons (substring file pos) buf))) (or coding-system nnmail-pathname-coding-system)))) Index: gnus/lisp/nnfolder.el diff -u gnus/lisp/nnfolder.el:7.16 gnus/lisp/nnfolder.el:7.17 --- gnus/lisp/nnfolder.el:7.16 Thu Feb 9 00:52:19 2006 +++ gnus/lisp/nnfolder.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nnfolder.el --- mail folder access for Gnus ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Simon Josefsson (adding MARKS) ;; ShengHuo Zhu (adding NOV) Index: gnus/lisp/nngateway.el diff -u gnus/lisp/nngateway.el:7.5 gnus/lisp/nngateway.el:7.6 --- gnus/lisp/nngateway.el:7.5 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nngateway.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nngateway.el --- posting news via mail gateways ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news, mail Index: gnus/lisp/nnheader.el diff -u gnus/lisp/nnheader.el:7.20 gnus/lisp/nnheader.el:7.25 --- gnus/lisp/nnheader.el:7.20 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nnheader.el Wed Jan 24 08:15:37 2007 @@ -2,7 +2,7 @@ ;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, ;; 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Lars Magne Ingebrigtsen @@ -597,17 +597,27 @@ (if (eq nnheader-max-head-length t) ;; Just read the entire file. (nnheader-insert-file-contents file) - ;; Read 1K blocks until we find a separator. + ;; Read blocks of the size specified by `nnheader-head-chop-length' + ;; until we find a separator. (let ((beg 0) - format-alist) + (start (point)) + ;; Use `binary' to prevent the contents from being decoded, + ;; or it will change the number of characters that + ;; `insert-file-contents' returns. + (coding-system-for-read 'binary)) (while (and (eq nnheader-head-chop-length - (nth 1 (nnheader-insert-file-contents + (nth 1 (mm-insert-file-contents file nil beg (incf beg nnheader-head-chop-length)))) - (prog1 (not (search-forward "\n\n" nil t)) + ;; CRLF or CR might be used for the line-break code. + (prog1 (not (re-search-forward "\n\r?\n\\|\r\r" nil t)) (goto-char (point-max))) (or (null nnheader-max-head-length) - (< beg nnheader-max-head-length)))))) + (< beg nnheader-max-head-length)))) + ;; Finally decode the contents. + (when (mm-coding-system-p nnheader-file-coding-system) + (mm-decode-coding-region start (point-max) + nnheader-file-coding-system)))) t)) (defun nnheader-article-p () @@ -980,6 +990,7 @@ (after-insert-file-functions nil) (enable-local-eval nil) (coding-system-for-read nnheader-file-coding-system) + (version-control 'never) (ffh (if (boundp 'find-file-hook) 'find-file-hook 'find-file-hooks)) Index: gnus/lisp/nnimap.el diff -u gnus/lisp/nnimap.el:7.32 gnus/lisp/nnimap.el:7.34 --- gnus/lisp/nnimap.el:7.32 Tue Mar 21 20:58:50 2006 +++ gnus/lisp/nnimap.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nnimap.el --- imap backend for Gnus ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Jim Radford @@ -375,7 +375,10 @@ One useful (and perhaps the only useful) value to change this to would be `UID %s NOT SENTSINCE %s' to make nnimap use the Date: header instead of the internal date of messages. See section 6.4.4 of RFC -2060 for more information on valid strings.") +2060 for more information on valid strings. + +However, if `nnimap-search-uids-not-since-is-evil' is true, this +variable has no effect since the search logic is reversed.") (defvoo nnimap-importantize-dormant t "If non-nil, mark \"dormant\" articles as \"ticked\" for other IMAP clients. Index: gnus/lisp/nnkiboze.el diff -u gnus/lisp/nnkiboze.el:7.8 gnus/lisp/nnkiboze.el:7.10 --- gnus/lisp/nnkiboze.el:7.8 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nnkiboze.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nnkiboze.el --- select virtual news access for Gnus -;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/nnlistserv.el diff -u gnus/lisp/nnlistserv.el:7.7 gnus/lisp/nnlistserv.el:7.9 --- gnus/lisp/nnlistserv.el:7.7 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nnlistserv.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nnlistserv.el --- retrieving articles via web mailing list archives -;; Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news, mail Index: gnus/lisp/nnmail.el diff -u gnus/lisp/nnmail.el:7.24 gnus/lisp/nnmail.el:7.29 --- gnus/lisp/nnmail.el:7.24 Wed Mar 8 10:05:35 2006 +++ gnus/lisp/nnmail.el Sat Mar 31 15:59:41 2007 @@ -1,7 +1,7 @@ ;;; nnmail.el --- mail support functions for the Gnus mail backends ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news, mail @@ -246,6 +246,10 @@ This variable is obsolete; `mail-sources' should be used instead." :group 'nnmail-files :type 'sexp) +(make-obsolete-variable 'nnmail-spool-file + "This option is obsolete in Gnus 5.9. \ +Use `mail-sources' instead.") +;; revision 5.29 / p0-85 / Gnus 5.9 (defcustom nnmail-resplit-incoming nil "*If non-nil, re-split incoming procmail sorted mail." @@ -1130,7 +1134,7 @@ (if (and (symbolp nnmail-split-methods) (fboundp nnmail-split-methods)) (let ((split - (condition-case nil + (condition-case error-info ;; `nnmail-split-methods' is a function, so we ;; just call this function here and use the ;; result. @@ -1138,7 +1142,7 @@ '("bogus")) (error (nnheader-message - 5 "Error in `nnmail-split-methods'; using `bogus' mail group") + 5 "Error in `nnmail-split-methods'; using `bogus' mail group: %S" error-info) (sit-for 1) '("bogus"))))) (setq split (mm-delete-duplicates split)) @@ -1280,10 +1284,20 @@ "Translate TAB characters into SPACE characters." (subst-char-in-region (point-min) (point-max) ?\t ? t)) -(defun nnmail-fix-eudora-headers () - "Eudora has a broken References line, but an OK In-Reply-To." +(defcustom nnmail-broken-references-mailers + "^X-Mailer:.*\\(Eudora\\|Pegasus\\)" + "Header line matching mailer producing bogus References lines. +See `nnmail-ignore-broken-references'." + :group 'nnmail-prepare + :version "23.0" ;; No Gnus + :type 'regexp) + +(defun nnmail-ignore-broken-references () + "Ignore the References line and use In-Reply-To + +Eudora has a broken References line, but an OK In-Reply-To." (goto-char (point-min)) - (when (re-search-forward "^X-Mailer:.*Eudora" nil t) + (when (re-search-forward nnmail-broken-references-mailers nil t) (goto-char (point-min)) (when (re-search-forward "^References:" nil t) (beginning-of-line) @@ -1292,8 +1306,11 @@ (when (re-search-forward "^\\(In-Reply-To:[^\n]+\\)\n[ \t]+" nil t) (replace-match "\\1" t)))) +(defalias 'nnmail-fix-eudora-headers 'nnmail-ignore-broken-references) +(make-obsolete 'nnmail-fix-eudora-headers 'nnmail-ignore-broken-references) + (custom-add-option 'nnmail-prepare-incoming-header-hook - 'nnmail-fix-eudora-headers) + 'nnmail-ignore-broken-references) ;;; Utility functions @@ -1744,7 +1761,8 @@ &optional group spool-func) "Read new incoming mail." (let* ((sources (or mail-sources - (if (listp nnmail-spool-file) nnmail-spool-file + (if (listp nnmail-spool-file) + nnmail-spool-file (list nnmail-spool-file)))) fetching-sources (group-in group) @@ -1890,7 +1908,7 @@ ;; To or From header ((and (equal header 'to-from) (or (string-match (cadr regexp-target-pair) from) - (and (string-match message-dont-reply-to-names from) + (and (string-match (message-dont-reply-to-names) from) (string-match (cadr regexp-target-pair) to)))) (setq target (format-time-string (caddr regexp-target-pair) date))) ((and (not (equal header 'to-from)) Index: gnus/lisp/nnmaildir.el diff -u gnus/lisp/nnmaildir.el:7.11 gnus/lisp/nnmaildir.el:7.12 --- gnus/lisp/nnmaildir.el:7.11 Wed Jul 6 00:34:47 2005 +++ gnus/lisp/nnmaildir.el Tue Oct 10 23:48:57 2006 @@ -481,7 +481,8 @@ (prin1 (vector storage-version num msgid nov) (current-buffer)) (setq file (concat novfile ":")) (nnmaildir--unlink file) - (write-region (point-min) (point-max) file nil 'no-message nil 'excl)) + (gmm-write-region (point-min) (point-max) file nil 'no-message nil + 'excl)) (rename-file file novfile 'replace) (setf (nnmaildir--art-msgid article) msgid) nov))) @@ -1298,8 +1299,8 @@ (throw 'return nil)) (save-excursion (set-buffer buffer) - (write-region (point-min) (point-max) tmpfile nil 'no-message nil - 'excl)) + (gmm-write-region (point-min) (point-max) tmpfile nil 'no-message nil + 'excl)) (unix-sync) ;; no fsync :( (rename-file tmpfile (concat (nnmaildir--cur dir) file suffix) 'replace) t))) @@ -1392,8 +1393,8 @@ (throw 'return nil)))) (condition-case nil (add-name-to-file nnmaildir--file tmpfile) (error - (write-region (point-min) (point-max) tmpfile nil 'no-message nil - 'excl) + (gmm-write-region (point-min) (point-max) tmpfile nil 'no-message nil + 'excl) (unix-sync))) ;; no fsync :( (nnheader-cancel-timer 24h) (condition-case err Index: gnus/lisp/nnmbox.el diff -u gnus/lisp/nnmbox.el:7.7 gnus/lisp/nnmbox.el:7.8 --- gnus/lisp/nnmbox.el:7.7 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nnmbox.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nnmbox.el --- mail mbox access for Gnus ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Masanobu UMEDA Index: gnus/lisp/nnmh.el diff -u gnus/lisp/nnmh.el:7.9 gnus/lisp/nnmh.el:7.10 --- gnus/lisp/nnmh.el:7.9 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nnmh.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nnmh.el --- mhspool access for Gnus ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Masanobu UMEDA Index: gnus/lisp/nnml.el diff -u gnus/lisp/nnml.el:7.18 gnus/lisp/nnml.el:7.20 --- gnus/lisp/nnml.el:7.18 Mon Mar 6 18:50:37 2006 +++ gnus/lisp/nnml.el Sat Jan 13 18:16:57 2007 @@ -1,7 +1,7 @@ ;;; nnml.el --- mail spool access for Gnus ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Authors: Didier Verna (adding compaction) ;; Simon Josefsson (adding MARKS) @@ -88,7 +88,7 @@ "If non-nil, allow using compressed message files. If it is a string, use it as the file extension which specifies -the comression program. You can set it to \".bz2\" if your Emacs +the compression program. You can set it to \".bz2\" if your Emacs supports auto-compression using the bzip2 program. A value of t is equivalent to \".gz\".") @@ -1084,9 +1084,15 @@ (let* ((oldfile (nnml-article-to-file old-number)) (newfile (gnus-replace-in-string - oldfile (concat "\\(" - old-number-string - "\\)\\(\\(\\.gz\\)?\\)$") + oldfile + ;; nnml-use-compressed-files might be any string, but + ;; probably it's sufficient to take into account only + ;; "\\.[a-z0-9]+". Note that we can't only use the + ;; value of nnml-use-compressed-files because old + ;; articles might have been saved with a different + ;; value. + (concat + "\\(" old-number-string "\\)\\(\\(\\.[a-z0-9]+\\)?\\)$") (concat new-number-string "\\2")))) (with-current-buffer nntp-server-buffer (nnmail-find-file oldfile) Index: gnus/lisp/nnoo.el diff -u gnus/lisp/nnoo.el:7.6 gnus/lisp/nnoo.el:7.7 --- gnus/lisp/nnoo.el:7.6 Mon Feb 13 08:16:55 2006 +++ gnus/lisp/nnoo.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nnoo.el --- OO Gnus Backends ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/nnrss.el diff -u gnus/lisp/nnrss.el:7.43 gnus/lisp/nnrss.el:7.47 --- gnus/lisp/nnrss.el:7.43 Mon Jan 16 23:57:40 2006 +++ gnus/lisp/nnrss.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nnrss.el --- interfacing with RSS ;; Copyright (C) 2001, 2002, 2003, 2004, 2005, -;; 2006 Free Software Foundation, Inc. +;; 2006, 2007 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: RSS @@ -418,8 +418,10 @@ (nnheader-remove-cr-followed-by-lf) ;; Decode text according to the encoding attribute. (when (setq cs (nnrss-get-encoding)) - (mm-decode-coding-region (point-min) (point-max) cs) - (mm-enable-multibyte)) + (insert (prog1 + (mm-decode-coding-string (buffer-string) cs) + (erase-buffer) + (mm-enable-multibyte)))) (goto-char (point-min)) ;; Because xml-parse-region can't deal with anything that isn't @@ -576,7 +578,7 @@ (insert-file-contents file) (eval-region (point-min) (point-max)))) (dolist (e nnrss-group-data) - (puthash (or (nth 2 e) (nth 6 e)) t nnrss-group-hashtb) + (puthash (nth 9 e) t nnrss-group-hashtb) (when (and (car e) (> nnrss-group-min (car e))) (setq nnrss-group-min (car e))) (when (and (car e) (< nnrss-group-max (car e))) @@ -658,7 +660,8 @@ (defun nnrss-check-group (group server) (let (file xml subject url extra changed author date feed-subject - enclosure comments rss-ns rdf-ns content-ns dc-ns) + enclosure comments rss-ns rdf-ns content-ns dc-ns + hash-index) (if (and nnrss-use-local (file-exists-p (setq file (expand-file-name (nnrss-translate-file-chars @@ -690,15 +693,12 @@ (dolist (item (nreverse (nnrss-find-el (intern (concat rss-ns "item")) xml))) (when (and (listp item) (string= (concat rss-ns "item") (car item)) - (if (setq url (nnrss-decode-entities-string - (nnrss-node-text rss-ns 'link (cddr item)))) - (not (gethash url nnrss-group-hashtb)) - (setq extra (or (nnrss-node-text content-ns 'encoded item) - (nnrss-node-text rss-ns 'description item))) - (not (gethash extra nnrss-group-hashtb)))) + (progn (setq hash-index (md5 (gnus-prin1-to-string item))) + (not (gethash hash-index nnrss-group-hashtb)))) (setq subject (nnrss-node-text rss-ns 'title item)) - (setq extra (or extra - (nnrss-node-text content-ns 'encoded item) + (setq url (nnrss-decode-entities-string + (nnrss-node-text rss-ns 'link (cddr item)))) + (setq extra (or (nnrss-node-text content-ns 'encoded item) (nnrss-node-text rss-ns 'description item))) (if (setq feed-subject (nnrss-node-text dc-ns 'subject item)) (setq extra (concat feed-subject "

" extra))) @@ -740,9 +740,10 @@ date (and extra (nnrss-decode-entities-string extra)) enclosure - comments) + comments + hash-index) nnrss-group-data) - (puthash (or url extra) t nnrss-group-hashtb) + (puthash hash-index t nnrss-group-hashtb) (setq changed t)) (setq extra nil)) (when changed Index: gnus/lisp/nnslashdot.el diff -u gnus/lisp/nnslashdot.el:7.9 gnus/lisp/nnslashdot.el:7.13 --- gnus/lisp/nnslashdot.el:7.9 Tue Apr 11 14:06:17 2006 +++ gnus/lisp/nnslashdot.el Tue Jan 30 23:19:27 2007 @@ -1,7 +1,7 @@ ;;; nnslashdot.el --- interfacing with Slashdot ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -142,7 +142,7 @@ (setq article (if (and article (< start article)) article start)) (goto-char point) (while (re-search-forward - "\\([^<]+\\).*\n.*\n.*score:\\([^)]+\\))" + "\\([^<]+\\)\\(?:.*\n\\)\\{2,10\\}.*score:\\([^)]+\\))" nil t) (setq cid (match-string 1) subject (match-string 2) @@ -258,7 +258,9 @@ (setq contents (buffer-substring (search-forward "

"))))))) + (progn + (search-forward "
;; Masanobu UMEDA @@ -37,7 +37,7 @@ (nnoo-declare nnsoup) -(defvoo nnsoup-directory "~/SOUP/" +(defvoo nnsoup-directory (nnheader-concat gnus-home-directory "SOUP/") "*SOUP packet directory.") (defvoo nnsoup-tmp-directory @@ -58,7 +58,9 @@ (defvoo nnsoup-active-file (expand-file-name "active" nnsoup-directory) "Active file.") -(defvoo nnsoup-packer "tar cf - %s | gzip > $HOME/Soupin%d.tgz" +(defvoo nnsoup-packer (concat "tar cf - %s | gzip > " + (expand-file-name gnus-home-directory) + "Soupin%d.tgz") "Format string command for packing a SOUP packet. The SOUP files will be inserted where the %s is in the string. This string MUST contain both %s and %d. The file number will be @@ -68,14 +70,14 @@ "*Format string command for unpacking a SOUP packet. The SOUP packet file name will be inserted at the %s.") -(defvoo nnsoup-packet-directory "~/" +(defvoo nnsoup-packet-directory gnus-home-directory "*Where nnsoup will look for incoming packets.") (defvoo nnsoup-packet-regexp "Soupout" "*Regular expression matching SOUP packets in `nnsoup-packet-directory'.") (defvoo nnsoup-always-save t - "If non nil commit the reply buffer on each message send. + "If non-nil commit the reply buffer on each message send. This is necessary if using message mode outside Gnus with nnsoup as a backend for the messages.") Index: gnus/lisp/nnspool.el diff -u gnus/lisp/nnspool.el:7.10 gnus/lisp/nnspool.el:7.12 --- gnus/lisp/nnspool.el:7.10 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nnspool.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nnspool.el --- spool access for GNU Emacs ;; Copyright (C) 1988, 1989, 1990, 1993, 1994, 1995, 1996, 1997, 1998, -;; 2000, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Lars Magne Ingebrigtsen Index: gnus/lisp/nntp.el diff -u gnus/lisp/nntp.el:7.33 gnus/lisp/nntp.el:7.38 --- gnus/lisp/nntp.el:7.33 Mon Apr 17 15:30:51 2006 +++ gnus/lisp/nntp.el Tue Feb 27 02:55:36 2007 @@ -2,7 +2,7 @@ ;; Copyright (C) 1987, 1988, 1989, 1990, 1992, 1993, ;; 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, -;; 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -90,6 +90,21 @@ - `nntp-open-via-rlogin-and-netcat', - `nntp-open-via-telnet-and-telnet'.") +(defvoo nntp-never-echoes-commands nil + "*Non-nil means the nntp server never echoes commands. +It is reported that some nntps server doesn't echo commands. So, you +may want to set this to non-nil in the method for such a server setting +`nntp-open-connection-function' to `nntp-open-ssl-stream' for example. +Note that the `nntp-open-connection-functions-never-echo-commands' +variable overrides the nil value of this variable.") + +(defvoo nntp-open-connection-functions-never-echo-commands + '(nntp-open-network-stream) + "*List of functions that never echo commands. +Add or set a function which you set to `nntp-open-connection-function' +to this list if it does not echo commands. Note that a non-nil value +of the `nntp-never-echoes-commands' variable overrides this variable.") + (defvoo nntp-pre-command nil "*Pre-command to use with the various nntp-open-via-* methods. This is where you would put \"runsocks\" or stuff like that.") @@ -254,6 +269,7 @@ (defvoo nntp-last-command nil) (defvoo nntp-authinfo-password nil) (defvoo nntp-authinfo-user nil) +(defvoo nntp-authinfo-force nil) (defvar nntp-connection-list nil) @@ -478,19 +494,22 @@ nntp-server-buffer wait-for nnheader-callback-function) ;; If nothing to wait for, still remove possibly echo'ed commands. - ;; We don't have echos if nntp-open-connection-function - ;; is `nntp-open-network-stream', so we skip this in that case. + ;; We don't have echoes if `nntp-never-echoes-commands' is non-nil + ;; or the value of `nntp-open-connection-function' is in + ;; `nntp-open-connection-functions-never-echo-commands', so we + ;; skip this in that cases. (unless (or wait-for - (equal nntp-open-connection-function - 'nntp-open-network-stream)) + nntp-never-echoes-commands + (memq + nntp-open-connection-function + nntp-open-connection-functions-never-echo-commands)) (nntp-accept-response) (save-excursion (set-buffer buffer) (goto-char pos) (if (looking-at (regexp-quote command)) (delete-region pos (progn (forward-line 1) - (point-at-bol)))) - ))) + (point-at-bol))))))) (nnheader-report 'nntp "Couldn't open connection to %s." nntp-address)))) @@ -1116,7 +1135,7 @@ .authinfo file has the FORCE token." (let* ((list (netrc-parse nntp-authinfo-file)) (alist (netrc-machine list nntp-address "nntp")) - (force (netrc-get alist "force")) + (force (or (netrc-get alist "force") nntp-authinfo-force)) (user (or (netrc-get alist "login") nntp-authinfo-user)) (passwd (netrc-get alist "password"))) (when (or (not send-if-force) @@ -1204,7 +1223,7 @@ (funcall nntp-open-connection-function pbuffer)) (error nil) (quit - (message "Quit opening connection") + (message "Quit opening connection to %s" nntp-address) (nntp-kill-buffer pbuffer) (signal 'quit nil) nil)))) Index: gnus/lisp/nnultimate.el diff -u gnus/lisp/nnultimate.el:7.6 gnus/lisp/nnultimate.el:7.7 --- gnus/lisp/nnultimate.el:7.6 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nnultimate.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nnultimate.el --- interfacing with the Ultimate Bulletin Board system ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/nnvirtual.el diff -u gnus/lisp/nnvirtual.el:7.9 gnus/lisp/nnvirtual.el:7.10 --- gnus/lisp/nnvirtual.el:7.9 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nnvirtual.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nnvirtual.el --- virtual newsgroups access for Gnus ;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -;; 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: David Moore ;; Lars Magne Ingebrigtsen Index: gnus/lisp/nnwarchive.el diff -u gnus/lisp/nnwarchive.el:7.5 gnus/lisp/nnwarchive.el:7.7 --- gnus/lisp/nnwarchive.el:7.5 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nnwarchive.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nnwarchive.el --- interfacing with web archives -;; Copyright (C) 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: news egroups mail-archive Index: gnus/lisp/nnweb.el diff -u gnus/lisp/nnweb.el:7.21 gnus/lisp/nnweb.el:7.34 --- gnus/lisp/nnweb.el:7.21 Mon May 1 14:22:28 2006 +++ gnus/lisp/nnweb.el Mon Feb 19 01:50:23 2007 @@ -1,7 +1,7 @@ ;;; nnweb.el --- retrieving articles via web search engines ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -360,22 +360,24 @@ (goto-char (point-max)) (widen) (narrow-to-region (point) - (search-forward "\" \n\t]+\\)[^<]*]+next" + "]+href=\"\n?\\([^>\" \n\t]+\\)[^<]*]+src=[^>]+next" nil t)) (>= i nnweb-max-hits)) (setq more nil) @@ -438,7 +440,8 @@ "?" (mm-url-encode-www-form-urlencoded `(("q" . ,search) - ("num" . "100") + ("num" . ,(number-to-string + (min 100 nnweb-max-hits))) ("hq" . "") ("hl" . "en") ("lr" . "") @@ -478,7 +481,7 @@ (from (mail-header-from header)) (subject (mail-header-subject header)) (rfc2047-encoding-type 'mime)) - (when (string-match " \\([^:]+\\):\\([0-9]+\\)" xref) + (when (string-match " \\([^:]+\\)[:/]\\([0-9]+\\)" xref) (mail-header-set-xref header (format "http://article.gmane.org/%s/%s/raw" @@ -494,11 +497,8 @@ (rfc2047-encode-string subject)) (unless (nnweb-get-hashtb (mail-header-xref header)) - (push - (list - (incf (cdr active)) - header) - map) + (mail-header-set-number header (incf (cdr active))) + (push (list (mail-header-number header) header) map) (nnweb-set-hashtb (cadar map) (car map)))))) (forward-line 1))) (nnheader-message 7 "Searching Gmane...done") @@ -523,7 +523,9 @@ "?" (mm-url-encode-www-form-urlencoded `(("query" . ,search) - ("HITSPERPAGE" . ,(number-to-string nnweb-max-hits)))))) + ("HITSPERPAGE" . ,(number-to-string nnweb-max-hits)) + ;;("TOPDOC" . "1000") + )))) (setq buffer-file-name nil) (set-buffer-multibyte t) (mm-decode-coding-region (point-min) (point-max) 'utf-8) Index: gnus/lisp/nnwfm.el diff -u gnus/lisp/nnwfm.el:7.5 gnus/lisp/nnwfm.el:7.6 --- gnus/lisp/nnwfm.el:7.5 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/nnwfm.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; nnwfm.el --- interfacing with a web forum ;; Copyright (C) 2000, 2002, 2003, 2004, 2005, -;; 2006 Free Software Foundation, Inc. +;; 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news Index: gnus/lisp/parse-time.el diff -u gnus/lisp/parse-time.el:7.5 gnus/lisp/parse-time.el:7.6 --- gnus/lisp/parse-time.el:7.5 Fri Feb 10 06:10:01 2006 +++ gnus/lisp/parse-time.el Wed Jan 24 08:15:37 2007 @@ -1,6 +1,6 @@ ;;; parse-time.el --- Parsing time strings -;; Copyright (C) 1996, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +;; Copyright (C) 1996, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 ;; Free Software Foundation, Inc. ;; Author: Erik Naggum Index: gnus/lisp/password.el diff -u gnus/lisp/password.el:7.12 gnus/lisp/password.el:7.13 --- gnus/lisp/password.el:7.12 Sun Apr 30 11:44:06 2006 +++ gnus/lisp/password.el Thu Dec 28 09:40:52 2006 @@ -113,7 +113,9 @@ user again." (let ((password (symbol-value (intern-soft key password-data)))) (when password - (fillarray password ?_) + (if (fboundp 'clear-string) + (clear-string password) + (fillarray password ?_)) (unintern key password-data)))) (defun password-cache-add (key password) Index: gnus/lisp/pgg-def.el diff -u gnus/lisp/pgg-def.el:7.10 gnus/lisp/pgg-def.el:7.12 --- gnus/lisp/pgg-def.el:7.10 Thu Feb 9 06:47:53 2006 +++ gnus/lisp/pgg-def.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; pgg-def.el --- functions/macros for defining PGG functions ;; Copyright (C) 1999, 2002, 2003, 2004, 2005, -;; 2006 Free Software Foundation, Inc. +;; 2006, 2007 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Created: 1999/11/02 @@ -87,7 +87,7 @@ "If t, inform the recipient that the input is text.") (defmacro pgg-truncate-key-identifier (key) - `(if (> (length ,key) 8) (substring ,key 8) ,key)) + `(if (> (length ,key) 8) (substring ,key -8) ,key)) (provide 'pgg-def) Index: gnus/lisp/pgg-gpg.el diff -u gnus/lisp/pgg-gpg.el:7.24 gnus/lisp/pgg-gpg.el:7.27 --- gnus/lisp/pgg-gpg.el:7.24 Thu Apr 27 18:08:50 2006 +++ gnus/lisp/pgg-gpg.el Fri Mar 2 00:43:33 2007 @@ -1,7 +1,7 @@ ;;; pgg-gpg.el --- GnuPG support for PGG. ;; Copyright (C) 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Symmetric encryption support added by: Sascha Wilde @@ -50,7 +50,7 @@ :type '(choice (const :tag "New `--recipient' option" "--recipient") (const :tag "Old `--remote-user' option" "--remote-user"))) -(defcustom pgg-gpg-use-agent nil +(defcustom pgg-gpg-use-agent t "Whether to use gnupg agent for key caching." :group 'pgg-gpg :type 'boolean) @@ -245,7 +245,7 @@ '("--armor" "--always-trust" "--encrypt") (if pgg-text-mode '("--textmode")) (if sign (list "--sign" "--local-user" pgg-gpg-user-id)) - (if recipients + (if (or recipients pgg-encrypt-for-me) (apply #'nconc (mapcar (lambda (rcpt) (list pgg-gpg-recipient-argument rcpt)) Index: gnus/lisp/pgg-parse.el diff -u gnus/lisp/pgg-parse.el:7.9 gnus/lisp/pgg-parse.el:7.10 --- gnus/lisp/pgg-parse.el:7.9 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/pgg-parse.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; pgg-parse.el --- OpenPGP packet parsing ;; Copyright (C) 1999, 2002, 2003, 2004, 2005, -;; 2006 Free Software Foundation, Inc. +;; 2006, 2007 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Created: 1999/10/28 Index: gnus/lisp/pgg-pgp.el diff -u gnus/lisp/pgg-pgp.el:7.12 gnus/lisp/pgg-pgp.el:7.16 --- gnus/lisp/pgg-pgp.el:7.12 Thu Apr 27 18:08:50 2006 +++ gnus/lisp/pgg-pgp.el Fri Mar 2 00:43:33 2007 @@ -1,7 +1,7 @@ ;;; pgg-pgp.el --- PGP 2.* and 6.* support for PGG. ;; Copyright (C) 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Created: 1999/11/02 @@ -63,9 +63,9 @@ (defun pgg-pgp-process-region (start end passphrase program args) (let* ((errors-file-name (pgg-make-temp-file "pgg-errors")) (args - (append args + (concat args pgg-pgp-extra-args - (list (concat "2>" errors-file-name)))) + " 2>" (shell-quote-argument errors-file-name))) (shell-file-name pgg-pgp-shell-file-name) (shell-command-switch pgg-pgp-shell-command-switch) (process-environment process-environment) @@ -83,9 +83,8 @@ (let ((coding-system-for-read 'binary) (coding-system-for-write 'binary)) (setq process - (apply #'funcall - #'start-process-shell-command "*PGP*" output-buffer - program args))) + (start-process-shell-command "*PGP*" output-buffer + (concat program " " args)))) (set-process-sentinel process #'ignore) (when passphrase (process-send-string process (concat passphrase "\n"))) @@ -142,15 +141,14 @@ pgg-pgp-user-id) pgg-pgp-user-id)))) (args - (append - `("+encrypttoself=off +verbose=1" "+batchmode" - "+language=us" "-fate" - ,@(if recipients - (mapcar (lambda (rcpt) (concat "\"" rcpt "\"")) - (append recipients - (if pgg-encrypt-for-me - (list pgg-pgp-user-id)))))) - (if sign '("-s" "-u" pgg-pgp-user-id))))) + (concat + "+encrypttoself=off +verbose=1 +batchmode +language=us -fate " + (if (or recipients pgg-encrypt-for-me) + (mapconcat 'shell-quote-argument + (append recipients + (if pgg-encrypt-for-me + (list pgg-pgp-user-id))))) + (if sign (concat " -s -u " (shell-quote-argument pgg-pgp-user-id)))))) (pgg-pgp-process-region start end nil pgg-pgp-program args) (pgg-process-when-success nil))) @@ -166,7 +164,7 @@ (pgg-read-passphrase (format "PGP passphrase for %s: " pgg-pgp-user-id) key))) (args - '("+verbose=1" "+batchmode" "+language=us" "-f"))) + "+verbose=1 +batchmode +language=us -f")) (pgg-pgp-process-region start end passphrase pgg-pgp-program args) (pgg-process-when-success (if pgg-cache-passphrase @@ -184,9 +182,9 @@ (format "PGP passphrase for %s: " pgg-pgp-user-id) (pgg-pgp-lookup-key pgg-pgp-user-id 'sign)))) (args - (list (if clearsign "-fast" "-fbast") - "+verbose=1" "+language=us" "+batchmode" - "-u" pgg-pgp-user-id))) + (concat (if clearsign "-fast" "-fbast") + " +verbose=1 +language=us +batchmode" + " -u " (shell-quote-argument pgg-pgp-user-id)))) (pgg-pgp-process-region start end passphrase pgg-pgp-program args) (pgg-process-when-success (goto-char (point-min)) @@ -204,7 +202,7 @@ (defun pgg-pgp-verify-region (start end &optional signature) "Verify region between START and END as the detached signature SIGNATURE." (let* ((orig-file (pgg-make-temp-file "pgg")) - (args '("+verbose=1" "+batchmode" "+language=us")) + (args "+verbose=1 +batchmode +language=us") (orig-mode (default-file-modes))) (unwind-protect (progn @@ -216,8 +214,8 @@ (if (stringp signature) (progn (copy-file signature (setq signature (concat orig-file ".asc"))) - (setq args (append args (list signature orig-file)))) - (setq args (append args (list orig-file)))) + (setq args (concat args " " (shell-quote-argument signature))))) + (setq args (concat args " " (shell-quote-argument orig-file))) (pgg-pgp-process-region (point)(point) nil pgg-pgp-program args) (delete-file orig-file) (if signature (delete-file signature)) @@ -237,8 +235,8 @@ "Insert public key at point." (let* ((pgg-pgp-user-id (or pgg-pgp-user-id pgg-default-user-id)) (args - (list "+verbose=1" "+batchmode" "+language=us" "-kxaf" - (concat "\"" pgg-pgp-user-id "\"")))) + (concat "+verbose=1 +batchmode +language=us -kxaf " + (shell-quote-argument pgg-pgp-user-id)))) (pgg-pgp-process-region (point)(point) nil pgg-pgp-program args) (insert-buffer-substring pgg-output-buffer))) @@ -247,8 +245,8 @@ (let* ((pgg-pgp-user-id (or pgg-pgp-user-id pgg-default-user-id)) (key-file (pgg-make-temp-file "pgg")) (args - (list "+verbose=1" "+batchmode" "+language=us" "-kaf" - key-file))) + (concat "+verbose=1 +batchmode +language=us -kaf " + (shell-quote-argument key-file)))) (let ((coding-system-for-write 'raw-text-dos)) (write-region start end key-file)) (pgg-pgp-process-region start end nil pgg-pgp-program args) @@ -257,5 +255,5 @@ (provide 'pgg-pgp) -;;; arch-tag: 076b7801-37b2-49a6-97c3-218fdecde33c +;; arch-tag: 076b7801-37b2-49a6-97c3-218fdecde33c ;;; pgg-pgp.el ends here Index: gnus/lisp/pgg-pgp5.el diff -u gnus/lisp/pgg-pgp5.el:7.9 gnus/lisp/pgg-pgp5.el:7.11 --- gnus/lisp/pgg-pgp5.el:7.9 Thu Apr 27 18:08:50 2006 +++ gnus/lisp/pgg-pgp5.el Fri Mar 2 00:43:33 2007 @@ -1,7 +1,7 @@ ;;; pgg-pgp5.el --- PGP 5.* support for PGG. ;; Copyright (C) 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Created: 1999/11/02 @@ -155,7 +155,7 @@ (args (append `("+NoBatchInvalidKeys=off" "-fat" "+batchmode=1" - ,@(if recipients + ,@(if (or recipients pgg-encrypt-for-me) (apply #'append (mapcar (lambda (rcpt) (list "-r" Index: gnus/lisp/pgg.el diff -u gnus/lisp/pgg.el:7.12 gnus/lisp/pgg.el:7.13 --- gnus/lisp/pgg.el:7.12 Thu Apr 27 18:08:50 2006 +++ gnus/lisp/pgg.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; pgg.el --- glue for the various PGP implementations. ;; Copyright (C) 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Symmetric encryption added by: Sascha Wilde Index: gnus/lisp/pop3.el diff -u gnus/lisp/pop3.el:7.23 gnus/lisp/pop3.el:7.25 --- gnus/lisp/pop3.el:7.23 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/pop3.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; pop3.el --- Post Office Protocol (RFC 1460) interface ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Richard L. Pieri ;; Maintainer: FSF @@ -89,8 +89,12 @@ on the POP server after fetching. Note that POP servers maintain no state information between sessions, so what the client believes is there and what is actually there may not match up. -If they do not, then the whole thing can fall apart and leave you -with a corrupt mailbox." +If they do not, then you may get duplicate mails or the whole +thing can fall apart and leave you with a corrupt mailbox." + ;; We can't use the UILD support from XEmacs mail-lib or cvs.m17n.org: + ;; http://thread.gmane.org/v9lld8fml4.fsf@marauder.physik.uni-ulm.de + ;; http://thread.gmane.org/b9yy8hzy9ej.fsf@jpl.org + ;; Any volunteer to re-implement this? :version "22.1" ;; Oort Gnus :type 'boolean :group 'pop3) @@ -167,6 +171,11 @@ (pop3-dele process n)) (setq n (+ 1 n)) (if pop3-debug (sit-for 1) (sit-for 0.1))) ; why? + (when (and pop3-leave-mail-on-server + (> n 1)) + (message "pop3.el doesn't support UIDL. Setting `pop3-leave-mail-on-server' +to %s might not give the result you'd expect." pop3-leave-mail-on-server) + (sit-for 1)) (pop3-quit process)) (kill-buffer crashbuf)) t) Index: gnus/lisp/qp.el diff -u gnus/lisp/qp.el:7.9 gnus/lisp/qp.el:7.10 --- gnus/lisp/qp.el:7.9 Thu Feb 23 20:59:54 2006 +++ gnus/lisp/qp.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; qp.el --- Quoted-Printable functions ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: mail, extensions Index: gnus/lisp/rfc1843.el diff -u gnus/lisp/rfc1843.el:7.6 gnus/lisp/rfc1843.el:7.8 --- gnus/lisp/rfc1843.el:7.6 Tue Feb 7 06:23:21 2006 +++ gnus/lisp/rfc1843.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; rfc1843.el --- HZ (rfc1843) decoding -;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: news HZ HZ+ mail i18n Index: gnus/lisp/rfc2045.el diff -u gnus/lisp/rfc2045.el:7.5 gnus/lisp/rfc2045.el:7.7 --- gnus/lisp/rfc2045.el:7.5 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/rfc2045.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; rfc2045.el --- Functions for decoding rfc2045 headers -;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; This file is part of GNU Emacs. Index: gnus/lisp/rfc2047.el diff -u gnus/lisp/rfc2047.el:7.51 gnus/lisp/rfc2047.el:7.59 --- gnus/lisp/rfc2047.el:7.51 Tue Apr 11 09:26:47 2006 +++ gnus/lisp/rfc2047.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; rfc2047.el --- functions for encoding and decoding rfc2047 messages -;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; MORIOKA Tomohiko @@ -142,6 +142,42 @@ (re-search-forward ":[ \t\n]*" nil t) (buffer-substring-no-properties (point) (point-max))))) +(defun rfc2047-quote-special-characters-in-quoted-strings (&optional + encodable-regexp) + "Quote special characters with `\\'s in quoted strings. +Quoting will not be done in a quoted string if it contains characters +matching ENCODABLE-REGEXP." + (goto-char (point-min)) + (let ((tspecials (concat "[" ietf-drums-tspecials "]")) + beg end) + (with-syntax-table (standard-syntax-table) + (while (search-forward "\"" nil t) + (setq beg (match-beginning 0)) + (unless (eq (char-before beg) ?\\) + (goto-char beg) + (setq beg (1+ beg)) + (condition-case nil + (progn + (forward-sexp) + (setq end (1- (point))) + (goto-char beg) + (if (and encodable-regexp + (re-search-forward encodable-regexp end t)) + (goto-char (1+ end)) + (save-restriction + (narrow-to-region beg end) + (while (re-search-forward tspecials nil 'move) + (if (eq (char-before) ?\\) + (if (looking-at tspecials) ;; Already quoted. + (forward-char) + (insert "\\")) + (goto-char (match-beginning 0)) + (insert "\\") + (forward-char)))) + (forward-char))) + (error + (goto-char beg)))))))) + (defvar rfc2047-encoding-type 'address-mime "The type of encoding done by `rfc2047-encode-region'. This should be dynamically bound around calls to @@ -158,8 +194,18 @@ (while (not (eobp)) (save-restriction (rfc2047-narrow-to-field) + (setq method nil + alist rfc2047-header-encoding-alist) + (while (setq elem (pop alist)) + (when (or (and (stringp (car elem)) + (looking-at (car elem))) + (eq (car elem) t)) + (setq alist nil + method (cdr elem)))) (if (not (rfc2047-encodable-p)) - (prog1 + (prog2 + (when (eq method 'address-mime) + (rfc2047-quote-special-characters-in-quoted-strings)) (if (and (eq (mm-body-7-or-8) '8bit) (mm-multibyte-p) (mm-coding-system-p @@ -180,14 +226,6 @@ (point)) (point-max)))) ;; We found something that may perhaps be encoded. - (setq method nil - alist rfc2047-header-encoding-alist) - (while (setq elem (pop alist)) - (when (or (and (stringp (car elem)) - (looking-at (car elem))) - (eq (car elem) t)) - (setq alist nil - method (cdr elem)))) (re-search-forward "^[^:]+: *" nil t) (cond ((eq method 'address-mime) @@ -318,6 +356,7 @@ (rfc2047-encode start (point)) (goto-char end)))) ;; `address-mime' case -- take care of quoted words, comments. + (rfc2047-quote-special-characters-in-quoted-strings encodable-regexp) (with-syntax-table rfc2047-syntax-table (goto-char (point-min)) (condition-case err ; in case of unbalanced quotes @@ -792,6 +831,29 @@ the decoder will fully decode each encoded-word before concatenating them.") +(defun rfc2047-strip-backslashes-in-quoted-strings () + "Strip backslashes in quoted strings. `\\\"' remains." + (goto-char (point-min)) + (let (beg) + (with-syntax-table (standard-syntax-table) + (while (search-forward "\"" nil t) + (unless (eq (char-before) ?\\) + (setq beg (match-end 0)) + (goto-char (match-beginning 0)) + (condition-case nil + (progn + (forward-sexp) + (save-restriction + (narrow-to-region beg (1- (point))) + (goto-char beg) + (while (search-forward "\\" nil 'move) + (unless (memq (char-after) '(?\")) + (delete-backward-char 1)) + (forward-char))) + (forward-char)) + (error + (goto-char beg)))))))) + (defun rfc2047-charset-to-coding-system (charset) "Return coding-system corresponding to MIME CHARSET. If your Emacs implementation can't decode CHARSET, return nil." @@ -869,8 +931,10 @@ ;; and worthwhile (is it more correct or not?), e.g. something like ;; `=?iso-8859-1?q?foo?=@'. -(defun rfc2047-decode-region (start end) - "Decode MIME-encoded words in region between START and END." +(defun rfc2047-decode-region (start end &optional address-mime) + "Decode MIME-encoded words in region between START and END. +If ADDRESS-MIME is non-nil, strip backslashes which precede characters +other than `\"' and `\\' in quoted strings." (interactive "r") (let ((case-fold-search t) (eword-regexp (eval-when-compile @@ -881,6 +945,8 @@ (save-excursion (save-restriction (narrow-to-region start end) + (when address-mime + (rfc2047-strip-backslashes-in-quoted-strings)) (goto-char (setq b start)) ;; Look for the encoded-words. (while (setq match (re-search-forward eword-regexp nil t)) @@ -966,8 +1032,16 @@ (not (eq mail-parse-charset 'gnus-decoded))) (mm-decode-coding-region b (point-max) mail-parse-charset)))))) -(defun rfc2047-decode-string (string) - "Decode the quoted-printable-encoded STRING and return the results." +(defun rfc2047-decode-address-region (start end) + "Decode MIME-encoded words in region between START and END. +Backslashes which precede characters other than `\"' and `\\' in quoted +strings are stripped." + (rfc2047-decode-region start end t)) + +(defun rfc2047-decode-string (string &optional address-mime) + "Decode MIME-encoded STRING and return the result. +If ADDRESS-MIME is non-nil, strip backslashes which precede characters +other than `\"' and `\\' in quoted strings." (let ((m (mm-multibyte-p))) (if (string-match "=\\?" string) (with-temp-buffer @@ -981,8 +1055,16 @@ (mm-enable-multibyte)) (insert string) (inline - (rfc2047-decode-region (point-min) (point-max))) + (rfc2047-decode-region (point-min) (point-max) address-mime)) (buffer-string)) + (when address-mime + (setq string + (with-temp-buffer + (when (mm-multibyte-string-p string) + (mm-enable-multibyte)) + (insert string) + (rfc2047-strip-backslashes-in-quoted-strings) + (buffer-string)))) ;; Fixme: As above, `m' here is inappropriate. (if (and m mail-parse-charset @@ -1003,6 +1085,12 @@ string (mm-decode-coding-string string mail-parse-charset)) (mm-string-as-multibyte string))))) + +(defun rfc2047-decode-address-string (string) + "Decode MIME-encoded STRING and return the result. +Backslashes which precede characters other than `\"' and `\\' in quoted +strings are stripped." + (rfc2047-decode-string string t)) (defun rfc2047-pad-base64 (string) "Pad STRING to quartets." Index: gnus/lisp/rfc2104.el diff -u gnus/lisp/rfc2104.el:7.5 gnus/lisp/rfc2104.el:7.7 --- gnus/lisp/rfc2104.el:7.5 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/rfc2104.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; rfc2104.el --- RFC2104 Hashed Message Authentication Codes -;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Keywords: mail Index: gnus/lisp/rfc2231.el diff -u gnus/lisp/rfc2231.el:7.19 gnus/lisp/rfc2231.el:7.22 --- gnus/lisp/rfc2231.el:7.19 Tue Apr 18 10:00:10 2006 +++ gnus/lisp/rfc2231.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; rfc2231.el --- Functions for decoding rfc2231 headers -;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005, -;; 2006 Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, +;; 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; This file is part of GNU Emacs. @@ -162,14 +162,14 @@ (buffer-substring (point) (progn - (forward-sexp) - ;; We might not have reached at the end of - ;; the value because of non-ascii chars, - ;; so we should jump over them if any. - (while (and (not (eobp)) - (> (char-after) ?\177)) + ;; Jump over asterisk, non-ASCII + ;; and non-boundary characters. + (while (and c + (or (eq c ?*) + (> c ?\177) + (not (eq (char-syntax c) ? )))) (forward-char 1) - (forward-sexp)) + (setq c (char-after))) (point))))) (t (error "Invalid header: %s" string))) Index: gnus/lisp/score-mode.el diff -u gnus/lisp/score-mode.el:7.9 gnus/lisp/score-mode.el:7.10 --- gnus/lisp/score-mode.el:7.9 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/score-mode.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; score-mode.el --- mode for editing Gnus score files ;; Copyright (C) 1996, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news, mail Index: gnus/lisp/sha1.el diff -u gnus/lisp/sha1.el:7.7 gnus/lisp/sha1.el:7.8 --- gnus/lisp/sha1.el:7.7 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/sha1.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; sha1.el --- SHA1 Secure Hash Algorithm in Emacs-Lisp ;; Copyright (C) 1999, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Shuhei KOBAYASHI ;; Keywords: SHA1, FIPS 180-1 Index: gnus/lisp/sieve-manage.el diff -u gnus/lisp/sieve-manage.el:7.10 gnus/lisp/sieve-manage.el:7.11 --- gnus/lisp/sieve-manage.el:7.10 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/sieve-manage.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; sieve-manage.el --- Implementation of the managesive protocol in elisp ;; Copyright (C) 2001, 2002, 2003, 2004, 2005, -;; 2006 Free Software Foundation, Inc. +;; 2006, 2007 Free Software Foundation, Inc. ;; Author: Simon Josefsson Index: gnus/lisp/sieve-mode.el diff -u gnus/lisp/sieve-mode.el:7.8 gnus/lisp/sieve-mode.el:7.9 --- gnus/lisp/sieve-mode.el:7.8 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/sieve-mode.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; sieve-mode.el --- Sieve code editing commands for Emacs ;; Copyright (C) 2001, 2002, 2003, 2004, 2005, -;; 2006 Free Software Foundation, Inc. +;; 2006, 2007 Free Software Foundation, Inc. ;; Author: Simon Josefsson Index: gnus/lisp/sieve.el diff -u gnus/lisp/sieve.el:7.10 gnus/lisp/sieve.el:7.11 --- gnus/lisp/sieve.el:7.10 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/sieve.el Wed Jan 24 08:15:37 2007 @@ -1,6 +1,6 @@ ;;; sieve.el --- Utilities to manage sieve scripts -;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Simon Josefsson Index: gnus/lisp/smiley.el diff -u gnus/lisp/smiley.el:7.15 gnus/lisp/smiley.el:7.17 --- gnus/lisp/smiley.el:7.15 Sat Apr 15 18:01:35 2006 +++ gnus/lisp/smiley.el Fri Mar 2 00:43:25 2007 @@ -1,7 +1,7 @@ ;;; smiley.el --- displaying smiley faces ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Dave Love ;; Keywords: news mail multimedia @@ -110,10 +110,10 @@ ("\\(:-|\\)\\W" 1 "indifferent") ("\\(:-[/\\]\\)\\W" 1 "wry") ("\\(:-(\\)\\W" 1 "sad") + ("\\(X-)\\)\\W" 1 "dead") ("\\(:-{\\)\\W" 1 "frown") ("\\(>:-)\\)\\W" 1 "evil") ("\\(;-(\\)\\W" 1 "cry") - ("\\(X-)\\)\\W" 1 "dead") ("\\(:-D\\)\\W" 1 "grin") ;; "smile" must be come after "evil" ("\\(\\^?:-?)\\)\\W" 1 "smile")) Index: gnus/lisp/smime.el diff -u gnus/lisp/smime.el:7.21 gnus/lisp/smime.el:7.22 --- gnus/lisp/smime.el:7.21 Wed Feb 15 14:51:59 2006 +++ gnus/lisp/smime.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; smime.el --- S/MIME support library ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Keywords: SMIME X.509 PEM OpenSSL Index: gnus/lisp/spam-report.el diff -u gnus/lisp/spam-report.el:7.28 gnus/lisp/spam-report.el:7.33 --- gnus/lisp/spam-report.el:7.28 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/spam-report.el Wed Jan 24 08:15:37 2007 @@ -1,6 +1,6 @@ ;;; spam-report.el --- Reporting spam -;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Ted Zlatanov ;; Keywords: network, spam, mail, gmane, report @@ -142,13 +142,30 @@ (string-match spam-report-gmane-regex gnus-newsgroup-name))) (let ((rpt-host (if unspam "unspam.gmane.org" "spam.gmane.org"))) (gnus-message 6 "Reporting article %d to %s..." article rpt-host) - (if spam-report-gmane-use-article-number - (spam-report-url-ping - rpt-host - (format "/%s:%d" - (gnus-group-real-name gnus-newsgroup-name) - article)) + (cond + ;; Special-case nnweb groups -- these have the URL to use in + ;; the Xref headers. + ((eq (car (gnus-find-method-for-group gnus-newsgroup-name)) 'nnweb) + (spam-report-url-ping + rpt-host + (concat + "/" + (gnus-replace-in-string + (gnus-replace-in-string + (gnus-replace-in-string + (mail-header-xref (gnus-summary-article-header article)) + "/raw" ":silent") + "^.*article.gmane.org/" "") + "/" ":")))) + (spam-report-gmane-use-article-number + (spam-report-url-ping + rpt-host + (format "/%s:%d" + (gnus-group-real-name gnus-newsgroup-name) + article))) + (t (with-current-buffer nntp-server-buffer + (erase-buffer) (gnus-request-head article gnus-newsgroup-name) (let ((case-fold-search t) field host report url) @@ -162,7 +179,11 @@ (setq field (or (gnus-fetch-field "X-Report-Spam") (gnus-fetch-field "X-Report-Unspam") (gnus-fetch-field "Archived-At"))) - (when (stringp field) + (if (not (stringp field)) + (if (and (setq field (gnus-fetch-field "Xref")) + (string-match "[^ ]+ +\\([^ ]+\\)" field)) + (setq report (concat "/" (match-string 1 field)) + host rpt-host)) (setq host (progn (string-match @@ -170,7 +191,8 @@ "\\(/[^:/]+[:/][0-9]+\\)") field) (match-string 1 field))) - (setq report (match-string 2 field)) + (setq report (match-string 2 field))) + (when host (when (string-equal "permalink.gmane.org" host) (setq host rpt-host) (setq report (gnus-replace-in-string @@ -181,7 +203,7 @@ 3 "Could not find a spam report header in article %d..." article) (gnus-message 7 "Reporting article through URL %s..." url) - (spam-report-url-ping host report)))))))) + (spam-report-url-ping host report))))))))) (defun spam-report-url-ping (host report) "Ping a host through HTTP, addressing a specific GET resource using @@ -224,7 +246,11 @@ (process-send-string tcp-connection (format "GET %s HTTP/1.1\nUser-Agent: %s\nHost: %s\n\n" - report spam-report-user-agent host))))) + report spam-report-user-agent host)) + ;; Wait until we get something so we don't DOS the host. + (while (and (memq (process-status tcp-connection) '(open run)) + (zerop (buffer-size))) + (accept-process-output tcp-connection))))) ;;;###autoload (defun spam-report-process-queue (&optional file keep) Index: gnus/lisp/spam-stat.el diff -u gnus/lisp/spam-stat.el:7.26 gnus/lisp/spam-stat.el:7.27 --- gnus/lisp/spam-stat.el:7.26 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/spam-stat.el Wed Jan 24 08:15:37 2007 @@ -1,6 +1,6 @@ ;;; spam-stat.el --- detecting spam based on statistics -;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Alex Schroeder ;; Keywords: network Index: gnus/lisp/spam.el diff -u gnus/lisp/spam.el:7.82 gnus/lisp/spam.el:7.94 --- gnus/lisp/spam.el:7.82 Sun Apr 16 18:33:40 2006 +++ gnus/lisp/spam.el Wed Jan 24 08:15:37 2007 @@ -1,6 +1,6 @@ ;;; spam.el --- Identifying spam -;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Maintainer: Ted Zlatanov @@ -414,14 +414,18 @@ "Spam ifile configuration." :group 'spam) -(defcustom spam-ifile-path (executable-find "ifile") - "File path of the ifile executable program." +(make-obsolete-variable 'spam-ifile-path 'spam-ifile-program) +;; "22.1" ;; Gnus 5.10.9 +(defcustom spam-ifile-program (executable-find "ifile") + "Name of the ifile program." :type '(choice (file :tag "Location of ifile") (const :tag "ifile is not installed")) :group 'spam-ifile) -(defcustom spam-ifile-database-path nil - "File path of the ifile database." +(make-obsolete-variable 'spam-ifile-database-path 'spam-ifile-database) +;; "22.1" ;; Gnus 5.10.9 +(defcustom spam-ifile-database nil + "File name of the ifile database." :type '(choice (file :tag "Location of the ifile database") (const :tag "Use the default")) :group 'spam-ifile) @@ -449,8 +453,10 @@ "Spam bogofilter configuration." :group 'spam) -(defcustom spam-bogofilter-path (executable-find "bogofilter") - "File path of the Bogofilter executable program." +(make-obsolete-variable 'spam-bogofilter-path 'spam-bogofilter-program) +;; "22.1" ;; Gnus 5.10.9 +(defcustom spam-bogofilter-program (executable-find "bogofilter") + "Name of the Bogofilter program." :type '(choice (file :tag "Location of bogofilter") (const :tag "Bogofilter is not installed")) :group 'spam-bogofilter) @@ -488,7 +494,8 @@ :group 'spam-bogofilter) (defcustom spam-bogofilter-database-directory nil - "Directory path of the Bogofilter databases." + "Location of the Bogofilter database. +When nil, use the default location." :type '(choice (directory :tag "Location of the Bogofilter database directory") (const :tag "Use the default")) @@ -498,8 +505,10 @@ "Spam bsfilter configuration." :group 'spam) -(defcustom spam-bsfilter-path (executable-find "bsfilter") - "File path of the Bsfilter executable program." +(make-obsolete-variable 'spam-bsfilter-path 'spam-bsfilter-program) +;; "22.1" ;; Gnus 5.10.9 +(defcustom spam-bsfilter-program (executable-find "bsfilter") + "Name of the Bsfilter program." :type '(choice (file :tag "Location of bsfilter") (const :tag "Bsfilter is not installed")) :group 'spam-bsfilter) @@ -519,7 +528,7 @@ :type 'string :group 'spam-bsfilter) -(defcustom spam-bsfilter-ham-switch "--add-ham" +(defcustom spam-bsfilter-ham-switch "--add-clean" "The switch that Bsfilter uses to register ham messages." :type 'string :group 'spam-bsfilter) @@ -562,8 +571,10 @@ "Spam SpamAssassin configuration." :group 'spam) -(defcustom spam-spamassassin-path (executable-find "spamassassin") - "File path of the spamassassin executable program. +(make-obsolete-variable 'spam-spamassassin-path + 'spam-spamassassin-program) ;; "22.1" ;; Gnus 5.10.9 +(defcustom spam-assassin-program (executable-find "spamassassin") + "Name of the spamassassin program. Hint: set this to \"spamc\" if you have spamd running. See the spamc and spamd man pages for more information on these programs." :type '(choice (file :tag "Location of spamc") @@ -592,8 +603,10 @@ :type 'string :group 'spam-spamassassin) -(defcustom spam-sa-learn-path (executable-find "sa-learn") - "File path of the sa-learn executable program." +(make-obsolete-variable 'spam-sa-learn-path 'spam-sa-learn-program) +;; "22.1" ;; Gnus 5.10.9 +(defcustom spam-sa-learn-program (executable-find "sa-learn") + "Name of the sa-learn program." :type '(choice (file :tag "Location of spamassassin") (const :tag "spamassassin is not installed")) :group 'spam-spamassassin) @@ -1154,9 +1167,11 @@ spam-use-spamassassin-headers spam-use-regex-headers) (push 'X-Spam-Status list)) - (when spam-use-bogofilter + (when (or spam-use-bogofilter + spam-use-regex-headers) (push 'X-Bogosity list)) - (when spam-use-crm114 + (when (or spam-use-crm114 + spam-use-regex-headers) (push 'X-CRM114-Status list)) list)) @@ -1180,10 +1195,6 @@ ".*\\b\\(?:score\\|hits\\)=\\(-?[0-9.]+\\)" "Regexp matching SpamAssassin score header. The first group must match the number.") -;; "score" for Spamassassin 3.0 or later: -;; X-Spam-Status: Yes, score=13.1 required=5.0 tests=DNS_FROM_RFC_ABUSE, -;; [...],UNDISC_RECIPS autolearn=disabled version=3.0.3 - (defun spam-extra-header-to-number (header headers) "Transform an extra HEADER to a number, using list of HEADERS. @@ -1197,8 +1208,8 @@ spam-spamassassin-score-regexp "\\1"))) ;; for CRM checking, it's probably faster to just do the string match - ((and spam-use-crm114 (string-match "( pR: \\([0-9.-]+\\)" header-content)) - (string-to-number (match-string 1 header-content))) + ((string-match "( pR: \\([0-9.-]+\\)" header-content) + (- (string-to-number (match-string 1 header-content)))) ((eq header 'X-Bogosity) (string-to-number (gnus-replace-in-string (gnus-replace-in-string @@ -2146,11 +2157,12 @@ ;;; check the ifile backend; return nil if the mail was NOT classified ;;; as spam + (defun spam-get-ifile-database-parameter () - "Get the command-line parameter for ifile's database from - spam-ifile-database-path." - (if spam-ifile-database-path - (format "--db-file=%s" spam-ifile-database-path) + "Return the command-line parameter for ifile's database. +See `spam-ifile-database'." + (if spam-ifile-database + (format "--db-file=%s" spam-ifile-database) nil)) (defun spam-check-ifile () @@ -2163,7 +2175,7 @@ (save-excursion (set-buffer article-buffer-name) (apply 'call-process-region - (point-min) (point-max) spam-ifile-path + (point-min) (point-max) spam-ifile-program nil temp-buffer-name nil "-c" (if db-param `(,db-param "-q") `("-q")))) ;; check the return now (we're back in the temp buffer) @@ -2191,7 +2203,7 @@ (when (stringp article-string) (insert article-string)))) (apply 'call-process-region - (point-min) (point-max) spam-ifile-path + (point-min) (point-max) spam-ifile-program nil nil nil add-or-delete-option category (if db `(,db "-h") `("-h")))))) @@ -2498,7 +2510,7 @@ (setq spam-bogofilter-valid (not (string-match "^bogofilter version 0\\.\\([0-9]\\|1[01]\\)\\." (shell-command-to-string - (format "%s -V" spam-bogofilter-path)))))) + (format "%s -V" spam-bogofilter-program)))))) spam-bogofilter-valid) (defun spam-check-bogofilter (&optional score) @@ -2513,7 +2525,7 @@ (set-buffer article-buffer-name) (apply 'call-process-region (point-min) (point-max) - spam-bogofilter-path + spam-bogofilter-program nil temp-buffer-name nil (if db `("-d" ,db "-v") `("-v")))) (setq return (spam-check-bogofilter-headers score)))) @@ -2541,7 +2553,7 @@ (apply 'call-process-region (point-min) (point-max) - spam-bogofilter-path + spam-bogofilter-program nil nil nil switch (if db `("-d" ,db "-v") `("-v"))))))) (gnus-error 5 "`spam.el' doesn't support obsolete bogofilter versions"))) @@ -2647,7 +2659,7 @@ (save-excursion (set-buffer article-buffer-name) (apply 'call-process-region - (point-min) (point-max) spam-spamassassin-path + (point-min) (point-max) spam-assassin-program nil temp-buffer-name nil spam-spamassassin-arguments)) ;; check the return now (we're back in the temp buffer) (goto-char (point-min)) @@ -2691,7 +2703,7 @@ ;; call sa-learn on all messages at the same time (apply 'call-process-region (point-min) (point-max) - spam-sa-learn-path + spam-sa-learn-program nil nil nil "--mbox" (if spam-sa-learn-rebuild (list action) @@ -2747,7 +2759,7 @@ (set-buffer article-buffer-name) (apply 'call-process-region (point-min) (point-max) - spam-bsfilter-path + spam-bsfilter-program nil temp-buffer-name nil "--pipe" "--insert-flag" @@ -2775,7 +2787,7 @@ (insert article-string) (apply 'call-process-region (point-min) (point-max) - spam-bsfilter-path + spam-bsfilter-program nil nil nil switch "--update" (when spam-bsfilter-database-directory Index: gnus/lisp/starttls.el diff -u gnus/lisp/starttls.el:7.13 gnus/lisp/starttls.el:7.15 --- gnus/lisp/starttls.el:7.13 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/starttls.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; starttls.el --- STARTTLS functions -;; Copyright (C) 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Author: Simon Josefsson Index: gnus/lisp/time-date.el diff -u gnus/lisp/time-date.el:7.8 gnus/lisp/time-date.el:7.9 --- gnus/lisp/time-date.el:7.8 Fri Feb 10 06:10:01 2006 +++ gnus/lisp/time-date.el Wed Jan 24 08:15:37 2007 @@ -1,6 +1,6 @@ ;;; time-date.el --- Date and time handling functions -;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen Index: gnus/lisp/tls.el diff -u gnus/lisp/tls.el:7.10 gnus/lisp/tls.el:7.14 --- gnus/lisp/tls.el:7.10 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/tls.el Tue Apr 10 01:44:06 2007 @@ -1,7 +1,7 @@ ;;; tls.el --- TLS/SSL support via wrapper around GnuTLS ;; Copyright (C) 1996, 1997, 1998, 1999, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Keywords: comm, tls, gnutls, ssl @@ -60,7 +60,7 @@ "openssl s_client -connect %h:%p -no_ssl2") "List of strings containing commands to start TLS stream to a host. Each entry in the list is tried until a connection is successful. -%s is replaced with server hostname, %p with port to connect to. +%h is replaced with server hostname, %p with port to connect to. The program should read input on stdin and write output to stdout. Also see `tls-success' for what the program should output after successful negotiation." @@ -86,7 +86,7 @@ "Name of GnuTLS certtool. Used by `tls-certificate-information'." :version "22.1" - :type '(repeat string) + :type 'string :group 'tls) (defun tls-certificate-information (der) @@ -125,12 +125,17 @@ with any buffer Third arg is name of the host to connect to, or its IP address. Fourth arg PORT is an integer specifying a port to connect to." - (let ((cmds tls-program) cmd done) + (let ((cmds tls-program) + (use-temp-buffer (null buffer)) + process cmd done) + (if use-temp-buffer + (setq buffer (generate-new-buffer " TLS"))) (message "Opening TLS connection to `%s'..." host) (while (and (not done) (setq cmd (pop cmds))) (message "Opening TLS connection with `%s'..." cmd) - (let* ((process-connection-type tls-process-connection-type) - (process (start-process + (let ((process-connection-type tls-process-connection-type) + response) + (setq process (start-process name buffer shell-file-name shell-command-switch (format-spec cmd @@ -139,15 +144,14 @@ ?p (if (integerp port) (int-to-string port) port))))) - response) (while (and process (memq (process-status process) '(open run)) (save-excursion (set-buffer buffer) ;; XXX "blue moon" nntp.el bug (goto-char (point-min)) (not (setq done (re-search-forward tls-success nil t))))) - (accept-process-output process 1) - (sit-for 1)) + (unless (accept-process-output process 1) + (sit-for 1))) (message "Opening TLS connection with `%s'...%s" cmd (if done "done" "failed")) (if done @@ -155,6 +159,9 @@ (delete-process process)))) (message "Opening TLS connection to `%s'...%s" host (if done "done" "failed")) + (when use-temp-buffer + (if done (set-process-buffer process nil)) + (kill-buffer buffer)) done)) (provide 'tls) Index: gnus/lisp/utf7.el diff -u gnus/lisp/utf7.el:7.7 gnus/lisp/utf7.el:7.9 --- gnus/lisp/utf7.el:7.7 Thu Feb 23 20:59:54 2006 +++ gnus/lisp/utf7.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; utf7.el --- UTF-7 encoding/decoding for Emacs -*-coding: iso-8859-1;-*- -;; Copyright (C) 1999, 2000, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Jon K Hellan ;; Maintainer: bugs@gnus.org Index: gnus/lisp/uudecode.el diff -u gnus/lisp/uudecode.el:7.8 gnus/lisp/uudecode.el:7.12 --- gnus/lisp/uudecode.el:7.8 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/uudecode.el Wed Jan 24 14:13:25 2007 @@ -1,7 +1,7 @@ ;;; uudecode.el -- elisp native uudecode ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: uudecode news @@ -98,7 +98,11 @@ (make-temp-name "uu") uudecode-temporary-file-directory)))) (let ((cdir default-directory) - default-process-coding-system) + (default-process-coding-system + (if (featurep 'xemacs) + ;; In XEmacs, `nil' is not a valid coding system. + '(binary . binary) + nil))) (unwind-protect (with-temp-buffer (insert "begin 600 " (file-name-nondirectory tempfile) "\n") @@ -122,6 +126,20 @@ (message "Can not uudecode"))) (ignore-errors (or file-name (delete-file tempfile)))))) +(eval-and-compile + (defalias 'uudecode-string-to-multibyte + (cond + ((featurep 'xemacs) + 'identity) + ((fboundp 'string-to-multibyte) + 'string-to-multibyte) + (t + (lambda (string) + "Return a multibyte string with the same individual chars as string." + (mapconcat + (lambda (ch) (string-as-multibyte (char-to-string ch))) + string "")))))) + ;;;###autoload (defun uudecode-decode-region-internal (start end &optional file-name) "Uudecode region between START and END without using an external program. @@ -199,7 +217,10 @@ (insert (apply 'concat (nreverse result))))) (or (markerp end) (setq end (set-marker (make-marker) end))) (goto-char start) - (insert (apply 'concat (nreverse result))) + (if enable-multibyte-characters + (mapc #'(lambda (x) (insert (uudecode-string-to-multibyte x))) + (nreverse result)) + (insert (apply 'concat (nreverse result)))) (delete-region (point) end)))))) ;;;###autoload Index: gnus/lisp/webmail.el diff -u gnus/lisp/webmail.el:7.6 gnus/lisp/webmail.el:7.7 --- gnus/lisp/webmail.el:7.6 Tue Feb 7 06:23:21 2006 +++ gnus/lisp/webmail.el Wed Jan 24 08:15:37 2007 @@ -1,7 +1,7 @@ ;;; webmail.el --- interface of web mail ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006 Free Software Foundation, Inc. +;; 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: hotmail netaddress my-deja netscape Index: gnus/lisp/yenc.el diff -u gnus/lisp/yenc.el:7.5 gnus/lisp/yenc.el:7.6 --- gnus/lisp/yenc.el:7.5 Wed Feb 8 05:17:15 2006 +++ gnus/lisp/yenc.el Wed Jan 24 08:15:37 2007 @@ -1,6 +1,6 @@ ;;; yenc.el --- elisp native yenc decoder -;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. ;; Author: Jesper Harder ;; Keywords: yenc news Index: gnus/texi/ChangeLog diff -u gnus/texi/ChangeLog:7.273 gnus/texi/ChangeLog:7.322 --- gnus/texi/ChangeLog:7.273 Thu Apr 27 00:27:14 2006 +++ gnus/texi/ChangeLog Thu Apr 12 00:42:02 2007 @@ -1,6 +1,294 @@ +2007-04-11 Katsumi Yamaoka + + * gnus.texi (Group Line Specification, Misc Group Stuff) + (Server Commands): Parenthesize @pxref{Mail Spool}. + +2007-04-11 Didier Verna + + New user option: message-signature-directory. + * gnus-news.texi: Advertise it. + * message.texi (Insertion Variables): Document it. + * gnus.texi (Posting Styles): Ditto. + +2007-04-11 Didier Verna + + * gnus.texi (Group Line Specification): + * gnus.texi (Misc Group Stuff): + * gnus.texi (Server Commands): Document the group compaction feature. + * gnus-news.texi: Ditto. + +2007-04-01 Reiner Steib + + * gnus-faq.texi ([5.2]): Adjust for message-fill-column. + + * gnus-news.texi: Add message-fill-column. + + * message.texi (Various Message Variables): Add message-fill-column. + + * gnus-news.el (gnus-news-header-disclaimer): Add newlines. + +2007-03-31 Eli Zaretskii + + * emacs-mime.texi (Non-MIME): Postscript -> PostScript. + +2007-03-30 Katsumi Yamaoka + + * gnus.texi: Untabify. + +2007-03-28 Didier Verna + + * gnus.texi (Group Parameters): Document the posting-style merging + process in topic-mode. + +2007-03-26 Richard Stallman + + * pgg.texi (Caching passphrase): Clean up previous change. + +2007-03-25 Thien-Thi Nguyen + + * gnus.texi (Setting Process Marks): Fix typo. + +2007-03-24 Thien-Thi Nguyen + + * gnus.texi (Splitting Mail): Reword "splitting"-as-adj to be -as-noun. + + * gnus.texi (Mail Source Specifiers): Fix typo. + +2007-03-24 Reiner Steib + + * gnus.texi (Scoring On Other Headers): Add gnus-inhibit-slow-scoring. + + * gnus-news.el (gnus-news-header-disclaimer, gnus-news-trailer): Switch + to standard GPL text for license. Update copyright for years from + Emacs 21 to present (mainly adding 2001). Text taken from Glenn + Morris' change to GNUS-NEWS in Emacs / v5-10. + +2007-03-23 Katsumi Yamaoka + + * gnus.texi, message.texi: Bump No Gnus version. + +2007-03-15 Katsumi Yamaoka + + * message.texi (Message Buffers): Update documentation for + message-generate-new-buffers. + +2007-03-15 Daiki Ueno + + * pgg.texi (Caching passphrase): Describe pgg-passphrase-coding-system. + +2007-03-11 Andreas Seltenreich + + * gnus.texi (Mail and Post): Update documentation for gnus-user-agent. + The variable now uses a list of symbols instead of just a symbol. + Reported by Christoph Conrad . + +2007-02-27 Chong Yidong + + * pgg.texi (Caching passphrase): Document gpg-agent usage, gpg-agent + problems on the console, and security risk in not using gpg-agent. + +2007-02-27 Katsumi Yamaoka + + * gnus.texi (NNTP): Mention nntp-never-echoes-commands and + nntp-open-connection-functions-never-echo-commands. + +2007-01-28 Andreas Seltenreich + + * gnus.texi (Batching Agents): Fix example. Reported by Tassilo Horn + . + +2007-01-13 Romain Francoise + + * gnus.texi (Mail Spool): Fix typo. + Update copyright. + +2007-01-03 Reiner Steib + + * gnus.texi (Customizing Articles): Use index entries for gnus-treat-* + variables only in info to avoid redundant entries in the printed + manual. + +2007-01-02 Daiki Ueno + + * message.texi (Using PGP/MIME): Document gpg-agent usage. + +2007-01-02 Reiner Steib + + * message.texi (Security): Split into sub-nodes. + +2006-12-31 Lars Magne Ingebrigtsen + + * gnus.texi (Limiting): Add gnus-summary-limit-to-singletons. + +2006-12-30 Andreas Seltenreich + + * gnus.texi (Summary Generation Commands): + * gnus-news.texi: Add gnus-summary-insert-ticked-articles. + +2006-12-29 Reiner Steib + + * gnus.texi (Customizing Articles): Add index entries for all + gnus-treat-* variables. + +2006-12-29 Jouni K. Sepp,Ad(Bnen + + * gnus.texi (IMAP): Fix incorrect explanation of + nnimap-search-uids-not-since-is-evil in documentation for + nnimap-expunge-search-string. + +2006-12-28 Reiner Steib + + * gnus.texi (Mail and Post): Index gnus-message-highlight-citation. + (SpamAssassin back end): Rename spam-spamassassin-path to + spam-spamassassin-program. + (ifile spam filtering): Rename spam-ifile-database-path to + spam-ifile-database. + +2006-12-26 Reiner Steib + + * gnus-news.texi: Add gnus-message-highlight-citation. + + * gnus.texi (Mail and Post): Add gnus-message-highlight-citation. + + * gnus.texi (Spam Package Configuration Examples): Don't encourage to + rebind C-s. + +2006-12-26 Jouni K. Sepp,Ad(Bnen + + * gnus.texi (Group Parameters, Group Maintenance, Topic Commands) + (Mail Group Commands, Expiring Mail, IMAP): Add index entries for + "expiring mail". + (IMAP): Document nnimap-search-uids-not-since-is-evil and + nnimap-nov-is-evil. + +2006-12-24 Chong Yidong + + * pgg.texi (Caching passphrase): Default for pgg-gpg-use-agent changed + to t. + (Prerequisites): Add explanation about gpg-agent. + +2006-12-17 Sascha Wilde + + * pgg.texi: Added short note on gpg-agent to the introduction. + +2006-12-13 Reiner Steib + + * gnus.texi (Hiding Headers): Document that `long-to' and `many-to' + also applies to Cc. + +2006-12-12 Reiner Steib + + * gnus.texi (X-Face): Clarify. Say which programs are required + on Windows. + +2006-11-24 Lars Magne Ingebrigtsen + + * gnus.texi (Limiting): Add gnus-summary-limit-to-headers. + +2006-11-21 Lars Magne Ingebrigtsen + + * message.texi (Mail Headers): Document `opportunistic'. + +2006-10-13 Andreas Seltenreich + + * gnus.texi (Other modes): Fix typo. Add alternative index entry for + gnus-dired-attach. + (Selecting a Group): Fix typo. + +2006-10-06 Reiner Steib + + * gnus.texi (Image Enhancements): Update for Emacs 22. + + * gnus-faq.texi ([1.3]): Update. + +2006-10-02 Reiner Steib + + * gnus.texi (Foreign Groups): Say where change of editing commands are + stored. Add reference to `gnus-parameters'. + +2006-09-20 Reiner Steib + + * emacs-mime.texi (Encoding Customization): Explain how to set + mm-coding-system-priorities per hierarchy. + +2006-09-14 Reiner Steib + + * gnus-news.texi: Addition for `mm-fill-flowed'. + + * gnus.texi (Oort Gnus): Add @xref for `mm-fill-flowed'. + +2006-09-09 Reiner Steib + + * gnus.texi (Mail Source Specifiers): Mention problem of duplicate + mails with pop3-leave-mail-on-server. Fix wording. + (Limiting): Improve gnus-summary-limit-to-articles. + (X-Face): Fix typo. + +2006-07-24 Richard Stallman + + * pgg.texi: Move periods and commas inside quotes. + +2006-07-28 Katsumi Yamaoka + + * gnus.texi (Oort Gnus): Mention that the Lisp files are now installed + in .../site-lisp/gnus/ by default. + [ From gnus-news.texi in the trunk. ] + +2006-07-27 Reiner Steib + + * gnus.texi (MIME Commands): Additions for yEnc. + +2006-07-10 Nick Roberts + + * gnus.texi, message.texi: Fix typos. + +2006-05-29 Stefan Monnier + + * gnus.texi (Example Setup): Use ;; instead of ;;; to better follow + coding conventions. + +2006-06-24 Andreas Seltenreich + + * gnus.texi (Summary Buffer Lines): Fix typo. + +2006-06-22 Reiner Steib + + * gnus.texi (Washing Mail): Add nnmail-ignore-broken-references and + nnmail-broken-references-mailers instead of nnmail-fix-eudora-headers. + +2006-06-19 Katsumi Yamaoka + + * message.texi (News Headers): Update message-syntax-checks section. + +2006-05-30 Didier Verna + + * message.texi (Wide Reply): Update documentation of + message-dont-reply-to-names (now allowing a list of regexps). + +2006-05-29 Katsumi Yamaoka + + * gnus.texi (Saving Articles): Addition. + +2006-05-18 Reiner Steib + + * gnus.texi (Saving Articles): Clarify gnus-summary-save-article-mail. + +2006-05-12 Reiner Steib + + * message.texi (Interface): Add tool bar customization. + (MIME): Index and text additions for mml-attach. + + * gnus.texi (Oort Gnus): Reorder entries in sections. Fix some + entries. + (Starting Up): Add references to "Emacs for Heathens" and to + "Finding the News". Add user-full-name and user-mail-address. + (Group Buffer Format): Add tool bar customization and update. + (Summary Buffer): Add tool bar customization. + (Posting Styles): Add message-alternative-emails. + 2006-04-22 Lars Magne Ingebrigtsen - * gnus.texi (Spam Package Introduction): Fix spam menu and links. + * gnus.texi (Spam Package Introduction): Fix spam menu and links. 2006-04-26 Reiner Steib @@ -16,11 +304,10 @@ * gnus.texi (Spam Statistics Package): Fix typo in @pxref. (Splitting mail using spam-stat): Fix @xref. -2006-04-20 Chong Yidong - - * gnus.texi (Spam Package): Major revision of the text. Previouly - this node was "Filtering Spam Using The Spam ELisp Package". +2006-04-20 Chong Yidong + * gnus.texi (Spam Package): Major revision of the text. + Previouly this node was "Filtering Spam Using The Spam ELisp Package". 2006-04-18 Reiner Steib * gnus-refcard.tex: Remove duplicate \def's. Update date. @@ -3475,7 +3762,7 @@ 2001-12-03 10:00:00 ShengHuo ZHU * infohack.el (infohack): To process write-protected files safely, - make this buffer be writable after `find-file'. + make this buffer be writable after `find-file'. From TSUCHIYA Masatoshi 2001-12-03 08:00:00 ShengHuo ZHU @@ -4012,7 +4299,7 @@ 2001-07-25 22:22:22 Raymond Scholz * gnus.texi (Fancy Mail Splitting): New variable - nnmail-split-fancy-with-parent-ignore-groups + nnmail-split-fancy-with-parent-ignore-groups 2001-07-24 Kai Gro,A_(Bjohann @@ -5065,7 +5352,7 @@ 1999-07-06 05:37:46 Alexandre Oliva - * gnus.texi (Fancy Mail Splitting): Document RESTRICT. + * gnus.texi (Fancy Mail Splitting): Document RESTRICT. 1999-07-07 10:26:59 Robin S. Socha @@ -5158,7 +5445,7 @@ 1999-02-26 20:54:34 Jason R. Mastaler * gnus.texi (Article Date): Added joke by Colin Rafferty - (colin@xemacs.org). + (colin@xemacs.org). 1999-02-26 08:26:10 Lars Magne Ingebrigtsen @@ -5376,6 +5663,7 @@ ;; Local Variables: ;; coding: iso-2022-7bit +;; fill-column: 79 ;; End: ;;; arch-tag: b5708f36-be16-423b-bcca-f70f5fb4781a Index: gnus/texi/emacs-mime.texi diff -u gnus/texi/emacs-mime.texi:7.29 gnus/texi/emacs-mime.texi:7.34 --- gnus/texi/emacs-mime.texi:7.29 Mon Mar 27 19:02:08 2006 +++ gnus/texi/emacs-mime.texi Tue Apr 10 01:44:06 2007 @@ -10,7 +10,7 @@ This file documents the Emacs MIME interface functionality. Copyright @copyright{} 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, -2006 Free Software Foundation, Inc. +2006, 2007 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document @@ -125,7 +125,7 @@ @table @code @item postscript @findex postscript -Postscript file. +PostScript file. @item uu @findex uu @@ -342,7 +342,7 @@ @end lisp Adding @code{"image/.*"} might also be useful. Spammers use images as -the prefered part of @samp{multipart/alternative} messages, so you might +the preferred part of @samp{multipart/alternative} messages, so you might not notice there are other parts. See also @code{gnus-buttonized-mime-types}, @ref{MIME Commands, ,MIME Commands, gnus, Gnus Manual}. After adding @code{"multipart/alternative"} to @@ -863,6 +863,36 @@ ISO-8859-1 if possible, you can set this variable to @code{(iso-8859-1)}. You can override this setting on a per-message basis by using the @code{charset} @acronym{MML} tag (@pxref{MML Definition}). + +As different hierarchies prefer different charsets, you may want to set +@code{mm-coding-system-priorities} according to the hierarchy in Gnus. +Here's an example: + +@c Corrections about preferred charsets are welcome. de, fr and fj +@c should be correct, I don't know about the rest (so these are only +@c examples): +@lisp +(add-to-list 'gnus-newsgroup-variables 'mm-coding-system-priorities) +(setq gnus-parameters + (nconc + ;; Some charsets are just examples! + '(("^cn\\." ;; Chinese + (mm-coding-system-priorities + '(iso-8859-1 cn-big5 chinese-iso-7bit utf-8))) + ("^cz\\.\\|^pl\\." ;; Central and Eastern European + (mm-coding-system-priorities '(iso-8859-2 utf-8))) + ("^de\\." ;; German language + (mm-coding-system-priorities '(iso-8859-1 iso-8859-15 utf-8))) + ("^fr\\." ;; French + (mm-coding-system-priorities '(iso-8859-15 iso-8859-1 utf-8))) + ("^fj\\." ;; Japanese + (mm-coding-system-priorities + '(iso-8859-1 iso-2022-jp iso-2022-jp-2 shift_jis utf-8))) + ("^ru\\." ;; Cyrillic + (mm-coding-system-priorities + '(koi8-r iso-8859-5 iso-8859-1 utf-8)))) + gnus-parameters)) +@end lisp @item mm-content-transfer-encoding-defaults @vindex mm-content-transfer-encoding-defaults Index: gnus/texi/gnus-faq.texi diff -u gnus/texi/gnus-faq.texi:7.12 gnus/texi/gnus-faq.texi:7.16 --- gnus/texi/gnus-faq.texi:7.12 Wed Apr 12 01:23:19 2006 +++ gnus/texi/gnus-faq.texi Sun Apr 1 15:15:23 2007 @@ -1,7 +1,7 @@ @c \input texinfo @c -*-texinfo-*- @c Uncomment 1st line before texing this file alone. @c %**start of header -@c Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +@c Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. @c @c Do not modify this file, it was generated from gnus-faq.xml, available from @c . @@ -172,13 +172,14 @@ @subsubheading Answer -The latest released version of Gnus isn't included in -Emacs 21, therefor you should get the Gnus tarball from -@uref{http://www.gnus.org/dist/gnus.tar.gz} -or via anonymous FTP from +Gnus is released independent from releases of Emacs and XEmacs. +Therefore, the version bundled with Emacs or the version in XEmacs' +package system might not be up to date (e.g. Gnus 5.9 bundled with Emacs +20 is outdated). +@c +You can get the latest released version of Gnus from +@uref{http://www.gnus.org/dist/gnus.tar.gz} or via anonymous FTP from @uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}. -If you use XEmacs instead of Emacs you can use XEmacs' -package system instead. @node [1.4] @subsubheading Question 1.4 @@ -676,7 +677,7 @@ @noindent You might have to tweak the values for stream and/or -authentification, see the Gnus manual node "Mail Source +authentication, see the Gnus manual node "Mail Source Specifiers" for possible values. If you want to use IMAP the way it's intended, you've got to @@ -1286,18 +1287,23 @@ @subsubheading Answer -Say +Starting from No Gnus, automatic word-wrap is already enabled by +default, see the variable message-fill-column. + +For other versions of Gnus, say @example -(add-hook 'message-mode-hook - (lambda () - (setq fill-column 72) - (turn-on-auto-fill))) +(unless (boundp 'message-fill-column) + (add-hook 'message-mode-hook + (lambda () + (setq fill-column 72) + (turn-on-auto-fill)))) @end example @noindent -in ~/.gnus.el. You can reformat a paragraph by hitting -@samp{M-q} (as usual) +in ~/.gnus.el. + +You can reformat a paragraph by hitting @samp{M-q} (as usual). @node [5.3] @subsubheading Question 5.3 @@ -1654,7 +1660,7 @@ @end example @noindent -in ~/.gnus.el. If you use Gnus 5.9 or ealier, you can use this +in ~/.gnus.el. If you use Gnus 5.9 or earlier, you can use this instead (works for newer versions a well): @example @@ -2164,10 +2170,7 @@ @subsubheading Answer -Point your IRC client to irc.my.gnus.org channel -#mygnus. Don't be afraid if people there speak German, -they are willing and capable of switching to -English when people from outside Germany enter. +Point your IRC client to irc.freenode.net, channel #gnus. @node FAQ 9 - Tuning Gnus @subsection Tuning Gnus Index: gnus/texi/gnus-news.el diff -u gnus/texi/gnus-news.el:7.11 gnus/texi/gnus-news.el:7.13 --- gnus/texi/gnus-news.el:7.11 Thu Mar 30 21:49:44 2006 +++ gnus/texi/gnus-news.el Sun Apr 1 15:00:33 2007 @@ -27,34 +27,37 @@ (defvar gnus-news-header-disclaimer "GNUS NEWS -- history of user-visible changes. -Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, - 2006 Free Software Foundation, Inc. -See the end for copying conditions. -Please send Gnus bug reports to bugs\@gnus.org. -For older news, see Gnus info node \"New Features\". +Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, + 2006, 2007 Free Software Foundation, Inc. +See the end of the file for license conditions. -") +Please send Gnus bug reports to bugs@gnus.org. +For older news, see Gnus info node \"New Features\".\n\n") (defvar gnus-news-trailer " * For older news, see Gnus info node \"New Features\". ---------------------------------------------------------------------- -Copyright information: + +This file is part of GNU Emacs. -Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, - 2006 Free Software Foundation, Inc. +GNU Emacs is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Emacs is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Emacs; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. - Permission is granted to anyone to make or distribute verbatim copies - of this document as received, in any medium, provided that the - copyright notice and this permission notice are preserved, - thus giving the recipient permission to redistribute in turn. - - Permission is granted to distribute modified versions - of this document, or of portions of it, - under the above conditions, provided also that they - carry prominent notices stating who last changed them. \nLocal variables:\nmode: outline paragraph-separate: \"[ ]*$\"\nend:\n") Index: gnus/texi/gnus-news.texi diff -u gnus/texi/gnus-news.texi:7.46 gnus/texi/gnus-news.texi:7.51 --- gnus/texi/gnus-news.texi:7.46 Fri Mar 31 20:03:55 2006 +++ gnus/texi/gnus-news.texi Wed Apr 11 17:16:20 2007 @@ -82,6 +82,10 @@ @kbd{/ r} (@code{gnus-summary-limit-to-replied}) and @kbd{/ R} (@code{gnus-summary-limit-to-recipient}). @xref{Limiting}. +@item You can now fetch all ticked articles from the server using +@kbd{Y t} (@code{gnus-summary-insert-ticked-articles}). @xref{Summary +Generation Commands}. + @item Gnus supports a new sort command in the Summary buffer: @kbd{C-c C-s C-t} (@code{gnus-summary-sort-by-recipient}). @xref{Summary Sorting}. @@ -121,8 +125,9 @@ @item The option @code{mm-fill-flowed} can be used to disable treatment of format=flowed messages. Also, flowed text is disabled when sending -inline @acronym{PGP} signed messages. -@xref{Flowed text, ,Flowed text, emacs-mime, The Emacs MIME Manual}. +inline @acronym{PGP} signed messages. @xref{Flowed text, ,Flowed text, +emacs-mime, The Emacs MIME Manual}. (New in Gnus 5.10.7) +@c This entry is also present in the node "Oort Gnus". @end itemize @@ -145,6 +150,17 @@ The @code{References} header is hidden by default. To make all headers visible, use @code{(setq message-hidden-headers nil)}. @xref{Message Headers, ,Message Headers, message, Message Manual}. + +@item You can highlight different levels of citations like in the +article buffer. See @code{gnus-message-highlight-citation}. + +@item @code{auto-fill-mode} is enabled by default in Message mode. +See @code{message-fill-column}. @xref{Various Message Variables, , +Message Headers, message, Message Manual}. + +@item You can now store signature files in a special directory +named @code{message-signature-directory}. + @end itemize @item Changes in back ends @@ -177,6 +193,15 @@ @item The nnml back end allows other compression programs beside @file{gzip} for compressed message files. @xref{Mail Spool}. + +@item The nnml back end supports group compaction. + +This feature, accessible via the functions +@code{gnus-group-compact-group} (@kbd{G z} in the group buffer) and +@code{gnus-server-compact-server} (@kbd{z} in the server buffer) +renumbers all articles in a group, starting from 1 and removing gaps. +As a consequence, you get a correct total article count (until +messages are deleted again). @end itemize @item Appearance Index: gnus/texi/gnus-refcard.tex diff -u gnus/texi/gnus-refcard.tex:7.4 gnus/texi/gnus-refcard.tex:7.6 --- gnus/texi/gnus-refcard.tex:7.4 Tue Apr 18 21:35:22 2006 +++ gnus/texi/gnus-refcard.tex Fri Mar 2 00:43:24 2007 @@ -5,10 +5,18 @@ % gnuslogo-booklet.eps). % % From this LaTeX file (gnus-refcard.tex) plus a single logo (gnus-logo.eps), -% we can generate the refcard and the booklet version. Appropriate Makefile -% rules were added. This simplifies to distribute the refcard with Emacs. +% we can generate the refcard and the booklet version. This simplifies to +% distribute the refcard with Emacs. Appropriate Makefile rules were added in +% gnus/texi/Makefile. + +% For Emacs, we may use the following commands (w/o) using Gnus' Makefile: % -% (Reiner Steib, March 2005) +% latex gnus-refcard.tex && +% dvips -t letter -f gnus-refcard.dvi > gnus-refcard.ps +% +% latex '\def\booklettrue{}\def\letterpapertrue{}\input{gnus-refcard}' && +% mv gnus-refcard.dvi gnus-booklet.dvi && +% dvips -t letter -f gnus-booklet.dvi > gnus-booklet.ps \usepackage{ifthen} \ifthenelse{\isundefined{\booklettrue}}{ @@ -51,17 +59,9 @@ \def\Guide{Booklet}\def\guide{booklet} \def\logoscale{0.5}% FIXME: too large for 2up printing? --rsteib - % FIXME: Use geometry package. --rsteib -% \ifthenelse{\isundefined{\letterpapertrue}}{ -% \textwidth 4.9in \textheight 7.35in \topmargin -1.0in -% }{ -% \textwidth 4.5in \textheight 7.5in \topmargin -1.0in -% } -% \oddsidemargin -0.5in \evensidemargin -0.5in \ifthenelse{\isundefined{\letterpapertrue}}{ \geometry{a5paper,hmargin=10mm,tmargin=10mm,bmargin=4mm} }{ - % FIXME: Use geometry package. --rsteib \geometry{a5paper,hmargin=20mm,tmargin=10mm,bmargin=4mm} } @@ -111,13 +111,17 @@ \newcommand*{\Logo}[1]{\centerline{% \includegraphics[width=\logoscale\logowidth]{gnus-logo}}} +%% Contributions by: +%% 1995 Vladimir Alexiev +%% 2000 Felix Natter +%% 2001, 2002, 2003, 2005 \author. +%% Original Gnus manual 1994 Lars Magne Ingebrigtsen +%% Some material from Emacs Help Bindings feature (C-h b). +%% Gnus logo by Luis Fernandes. \newcommand{\Copyright}{% \begin{center} - Copyright \copyright\ 1995, 2002, 2003, 2004, - 2005, 2006 Free Software Foundation, Inc.\\* - Copyright \copyright\ 1995 Vladimir Alexiev - $<$vladimir@cs.ualberta.ca$>$.\\* - Copyright \copyright\ 2000 Felix Natter $<$fnatter@gmx.net$>$.\\* + Copyright \copyright\ 1995, 2000, 2002, 2003, 2004, + 2005, 2006, 2007 Free Software Foundation, Inc.\\* Copyright \copyright\ 2001, 2002, 2003, 2004, 2005 \author.\\* Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne Ingebrigtsen.\\* Index: gnus/texi/gnus.texi diff -u gnus/texi/gnus.texi:7.181 gnus/texi/gnus.texi:7.223 --- gnus/texi/gnus.texi:7.181 Sat Apr 22 03:42:18 2006 +++ gnus/texi/gnus.texi Tue May 1 17:16:55 2007 @@ -10,7 +10,7 @@ @copying Copyright @copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document @@ -52,7 +52,7 @@ \begin{document} % Adjust ../Makefile.in if you change the following line: -\newcommand{\gnusversionname}{No Gnus v0.4} +\newcommand{\gnusversionname}{No Gnus v0.5} \newcommand{\gnuschaptername}{} \newcommand{\gnussectionname}{} @@ -362,7 +362,7 @@ luck. @c Adjust ../Makefile.in if you change the following line: -This manual corresponds to No Gnus v0.4. +This manual corresponds to No Gnus v0.5. @end ifinfo @@ -944,11 +944,17 @@ @chapter Starting Gnus @cindex starting up +If you are haven't used Emacs much before using Gnus, read @ref{Emacs +for Heathens} first. + @kindex M-x gnus @findex gnus If your system administrator has set things up properly, starting Gnus and reading news is extremely easy---you just type @kbd{M-x gnus} in -your Emacs. +your Emacs. If not, you should customize the variable +@code{gnus-select-method} as described in @ref{Finding the News}. For a +minimal setup for posting should also customize the variables +@code{user-full-name} and @code{user-mail-address}. @findex gnus-other-frame @kindex M-x gnus-other-frame @@ -1727,6 +1733,15 @@ * Group Highlighting:: Having nice colors in the group buffer. @end menu +You can customize the Group Mode tool bar, see @kbd{M-x +customize-apropos RET gnus-group-tool-bar}. This feature is only +available in Emacs. + +The tool bar icons are now (de)activated correctly depending on the +cursor position. Therefore, moving around in the Group Buffer is +slower. You can disable this via the variable +@code{gnus-group-update-tool-bar}. Its default value depends on your +Emacs version. @node Group Line Specification @subsection Group Line Specification @@ -1806,8 +1821,15 @@ hysterical raisins, even the mail back ends, where the true number of unread messages might be available efficiently, use the same limited interface. To remove this restriction from Gnus means that the back -end interface has to be changed, which is not an easy job. If you -want to work on this, please contact the Gnus mailing list. +end interface has to be changed, which is not an easy job. + +The nnml backend (@pxref{Mail Spool}) has a feature called ``group +compaction'' which circumvents this deficiency: the idea is to +renumber all articles from 1, removing all gaps between numbers, hence +getting a correct total count. Other backends may support this in the +future. In order to keep your total article count relatively up to +date, you might want to compact your groups (or even directly your +server) from time to time. @xref{Misc Group Stuff}, @xref{Server Commands}. @item y Number of unread, unticked, non-dormant articles. @@ -2153,7 +2175,7 @@ automatically when entering a group with the @kbd{SPACE} command. Which article this is is controlled by the @code{gnus-auto-select-subject} variable. Valid values for this -variable is: +variable are: @table @code @@ -2509,6 +2531,10 @@ groups under point---@code{gnus-subscribe-newsgroup-method} is not consulted. +Changes from the group editing commands are stored in +@file{~/.newsrc.eld} (@code{gnus-startup-file}). An alternative is the +variable @code{gnus-parameters}, @xref{Group Parameters}. + @table @kbd @item G m @@ -2820,6 +2846,7 @@ @item auto-expire @cindex auto-expire +@cindex expiring mail If the group parameter has an element that looks like @code{(auto-expire . t)}, all articles read will be marked as expirable. For an alternative approach, @pxref{Expiring Mail}. @@ -2828,6 +2855,7 @@ @item total-expire @cindex total-expire +@cindex expiring mail If the group parameter has an element that looks like @code{(total-expire . t)}, all read articles will be put through the expiry process, even if they are not marked as expirable. Use with @@ -2957,6 +2985,15 @@ (signature "Funky Signature")) @end example +If you're using topics to organize your group buffer +(@pxref{Group Topics}), note that posting styles can also be set in +the topics parameters. Posting styles in topic parameters apply to all +groups in this topic. More precisely, the posting-style settings for a +group result from the hierarchical merging of all posting-style +entries in the parameters of this group and all the topics it belongs +to. + + @item post-method @cindex post-method If it is set, the value is used as the method for posting message @@ -3458,6 +3495,7 @@ @item C-c C-x @kindex C-c C-x (Group) @findex gnus-group-expire-articles +@cindex expiring mail Run all expirable articles in the current group through the expiry process (if any) (@code{gnus-group-expire-articles}). That is, delete all expirable articles in the group that have been around for a while. @@ -3466,6 +3504,7 @@ @item C-c C-M-x @kindex C-c C-M-x (Group) @findex gnus-group-expire-all-groups +@cindex expiring mail Run all expirable articles in all groups through the expiry process (@code{gnus-group-expire-all-groups}). @@ -3826,6 +3865,7 @@ @item C-c C-x @kindex C-c C-x (Topic) @findex gnus-topic-expire-articles +@cindex expiring mail Run all expirable articles in the current group or topic through the expiry process (if any) (@code{gnus-topic-expire-articles}). (@pxref{Expiring Mail}). @@ -4159,6 +4199,15 @@ in question. The corresponding back end must have a request-post method for this to work though. +@item G z +@kindex G z (Group) +@findex gnus-group-compact-group + +Compact the group under point (@code{gnus-group-compact-group}). +Currently implemented only in nnml (@pxref{Mail Spool}). This removes +gaps between article numbers, hence getting a correct total article +count. + @end table Variables for the group buffer: @@ -4517,6 +4566,10 @@ You can have as many summary buffers open as you wish. +You can customize the Summary Mode tool bar, see @kbd{M-x +customize-apropos RET gnus-summary-tool-bar}. This feature is only +available in Emacs. + @kindex v (Summary) @cindex keys, reserved for users (Summary) The key @kbd{v} is reserved for users. You can bind it key to some @@ -4630,7 +4683,7 @@ Article number. @item S Subject string. List identifiers stripped, -@code{gnus-list-identifies}. @xref{Article Hiding}. +@code{gnus-list-identifiers}. @xref{Article Hiding}. @item s Subject if the article is the root of the thread or the previous article had a different subject, @code{gnus-summary-same-subject} otherwise. @@ -6223,7 +6276,7 @@ used for marking articles in such a way that other commands will process these articles. For instance, if you process mark four articles and then use the @kbd{*} command, Gnus will enter these four -commands into the cache. For more information, +articles into the cache. For more information, @pxref{Process/Prefix}. @table @kbd @@ -6379,6 +6432,13 @@ (@code{gnus-summary-limit-to-recipient}). If given a prefix, exclude matching articles. +@item / S +@kindex / S (Summary) +@findex gnus-summary-limit-to-singletons +Limit the summary buffer to articles that aren't part of any displayed +threads (@code{gnus-summary-limit-to-singletons}). If given a prefix, +limit to articles that are part of displayed threads. + @item / x @kindex / x (Summary) @findex gnus-summary-limit-to-extra @@ -6413,9 +6473,9 @@ @item / n @kindex / n (Summary) @findex gnus-summary-limit-to-articles -Limit the summary buffer to the current article -(@code{gnus-summary-limit-to-articles}). Uses the process/prefix -convention (@pxref{Process/Prefix}). +With prefix @samp{n}, limit the summary buffer to the next @samp{n} +articles. If not given a prefix, use the process marked articles +instead. (@code{gnus-summary-limit-to-articles}). @item / w @kindex / w (Summary) @@ -6520,6 +6580,12 @@ prefix, reverse the limit. This command is quite slow since it requires selecting each article to find the matches. +@item / h +@kindex / h (Summary) +@findex gnus-summary-limit-to-headers +Like the previous command, only limit to headers instead +(@code{gnus-summary-limit-to-headers}). + @end table @@ -7468,7 +7534,7 @@ @item O m @kindex O m (Summary) @findex gnus-summary-save-article-mail -Save the current article in mail format +Save the current article in a Unix mail box (mbox) file (@code{gnus-summary-save-article-mail}). @item O r @@ -7547,7 +7613,7 @@ @vindex gnus-default-article-saver You can customize the @code{gnus-default-article-saver} variable to make -Gnus do what you want it to. You can use any of the six ready-made +Gnus do what you want it to. You can use any of the eight ready-made functions below, or you can create your own. @table @code @@ -7588,6 +7654,13 @@ @code{gnus-file-save-name} variable to get a file name to save the article in. The default is @code{gnus-numeric-save-name}. +@item gnus-summary-write-body-to-file +@findex gnus-summary-write-body-to-file +Write the article body straight to an ordinary file. The file is +overwritten if it exists. Uses the function in the +@code{gnus-file-save-name} variable to get a file name to save the +article in. The default is @code{gnus-numeric-save-name}. + @item gnus-summary-save-in-folder @findex gnus-summary-save-in-folder @findex gnus-folder-save-name @@ -7607,6 +7680,31 @@ reader to use this setting. @end table +The symbol of each function may have the following properties: + +@table @code +@item :decode +The value non-@code{nil} means save decoded articles. This is +meaningful only with @code{gnus-summary-save-in-file}, +@code{gnus-summary-save-body-in-file}, +@code{gnus-summary-write-to-file}, and +@code{gnus-summary-write-body-to-file}. + +@item :function +The value specifies an alternative function which appends, not +overwrites, articles to a file. This implies that when saving many +articles at a time, @code{gnus-prompt-before-saving} is bound to +@code{t} and all articles are saved in a single file. This is +meaningful only with @code{gnus-summary-write-to-file} and +@code{gnus-summary-write-body-to-file}. + +@item :headers +The value specifies the symbol of a variable of which the value +specifies headers to be saved. If it is omitted, +@code{gnus-save-all-headers} and @code{gnus-saved-headers} control what +headers should be saved. +@end table + @vindex gnus-article-save-directory All of these functions, except for the last one, will save the article in the @code{gnus-article-save-directory}, which is initialized from the @@ -9464,11 +9562,15 @@ @item gnus-article-emulate-mime @vindex gnus-article-emulate-mime +@cindex uuencode +@cindex yEnc There are other, non-@acronym{MIME} encoding methods used. The most common is @samp{uuencode}, but yEncode is also getting to be popular. If this variable is non-@code{nil}, Gnus will look in message bodies to see if it finds these encodings, and if so, it'll run them through the -Gnus @acronym{MIME} machinery. The default is @code{t}. +Gnus @acronym{MIME} machinery. The default is @code{t}. Only +single-part yEnc encoded attachments can be decoded. There's no support +for encoding in Gnus. @item gnus-unbuttonized-mime-types @vindex gnus-unbuttonized-mime-types @@ -10149,6 +10251,7 @@ @item B e @kindex B e (Summary) @findex gnus-summary-expire-articles +@cindex expiring mail Run all expirable articles in the current group through the expiry process (@code{gnus-summary-expire-articles}). That is, delete all expirable articles in the group that have been around for a while. @@ -10157,6 +10260,7 @@ @item B C-M-e @kindex B C-M-e (Summary) @findex gnus-summary-expire-articles-now +@cindex expiring mail Delete all the expirable articles in the group (@code{gnus-summary-expire-articles-now}). This means that @strong{all} articles eligible for expiry in the current group will @@ -10497,6 +10601,12 @@ Pull all dormant articles (for the current group) into the summary buffer (@code{gnus-summary-insert-dormant-articles}). +@item Y t +@kindex Y t (Summary) +@findex gnus-summary-insert-ticked-articles +Pull all ticked articles (for the current group) into the summary buffer +(@code{gnus-summary-insert-ticked-articles}). + @end table @@ -11082,15 +11192,15 @@ Remove the @code{To} header if it only contains the address identical to the current group's @code{to-list} parameter. @item cc-list -Remove the @code{CC} header if it only contains the address identical to +Remove the @code{Cc} header if it only contains the address identical to the current group's @code{to-list} parameter. @item date Remove the @code{Date} header if the article is less than three days old. @item long-to -Remove the @code{To} header if it is very long. +Remove the @code{To} and/or @code{Cc} header if it is very long. @item many-to -Remove all @code{To} headers if there are more than one. +Remove all @code{To} and/or @code{Cc} headers if there are more than one. @end table To include these three elements, you could say something like: @@ -11335,6 +11445,58 @@ type of the part. This variable is ignored if the value of the controlling variable is a predicate list, as described above. +@ifinfo +@c Avoid sort of redundant entries in the same section for the printed +@c manual, but add them in info to allow `i gnus-treat-foo-bar RET' or +@c `i foo-bar'. +@vindex gnus-treat-buttonize +@vindex gnus-treat-buttonize-head +@vindex gnus-treat-capitalize-sentences +@vindex gnus-treat-overstrike +@vindex gnus-treat-strip-cr +@vindex gnus-treat-strip-headers-in-body +@vindex gnus-treat-strip-leading-blank-lines +@vindex gnus-treat-strip-multiple-blank-lines +@vindex gnus-treat-strip-pem +@vindex gnus-treat-strip-trailing-blank-lines +@vindex gnus-treat-unsplit-urls +@vindex gnus-treat-wash-html +@vindex gnus-treat-date-english +@vindex gnus-treat-date-iso8601 +@vindex gnus-treat-date-lapsed +@vindex gnus-treat-date-local +@vindex gnus-treat-date-original +@vindex gnus-treat-date-user-defined +@vindex gnus-treat-date-ut +@vindex gnus-treat-from-picon +@vindex gnus-treat-mail-picon +@vindex gnus-treat-newsgroups-picon +@vindex gnus-treat-display-smileys +@vindex gnus-treat-body-boundary +@vindex gnus-treat-display-x-face +@vindex gnus-treat-display-face +@vindex gnus-treat-emphasize +@vindex gnus-treat-fill-article +@vindex gnus-treat-fill-long-lines +@vindex gnus-treat-hide-boring-headers +@vindex gnus-treat-hide-citation +@vindex gnus-treat-hide-citation-maybe +@vindex gnus-treat-hide-headers +@vindex gnus-treat-hide-signature +@vindex gnus-treat-strip-banner +@vindex gnus-treat-strip-list-identifiers +@vindex gnus-treat-highlight-citation +@vindex gnus-treat-highlight-headers +@vindex gnus-treat-highlight-signature +@vindex gnus-treat-play-sounds +@vindex gnus-treat-translate +@vindex gnus-treat-x-pgp-sig +@vindex gnus-treat-unfold-headers +@vindex gnus-treat-fold-headers +@vindex gnus-treat-fold-newsgroups +@vindex gnus-treat-leading-whitespace +@end ifinfo + The following treatment options are available. The easiest way to customize this is to examine the @code{gnus-article-treat} customization group. Values in parenthesis are suggested sensible values. Others are @@ -11385,41 +11547,63 @@ @xref{Smileys}. +@vindex gnus-treat-display-x-face @item gnus-treat-display-x-face (head) @xref{X-Face}. +@vindex gnus-treat-display-face @item gnus-treat-display-face (head) @xref{Face}. +@vindex gnus-treat-emphasize @item gnus-treat-emphasize (t, head, integer) +@vindex gnus-treat-fill-article @item gnus-treat-fill-article (t, integer) +@vindex gnus-treat-fill-long-lines @item gnus-treat-fill-long-lines (t, integer) +@vindex gnus-treat-hide-boring-headers @item gnus-treat-hide-boring-headers (head) +@vindex gnus-treat-hide-citation @item gnus-treat-hide-citation (t, integer) +@vindex gnus-treat-hide-citation-maybe @item gnus-treat-hide-citation-maybe (t, integer) +@vindex gnus-treat-hide-headers @item gnus-treat-hide-headers (head) +@vindex gnus-treat-hide-signature @item gnus-treat-hide-signature (t, last) +@vindex gnus-treat-strip-banner @item gnus-treat-strip-banner (t, last) +@vindex gnus-treat-strip-list-identifiers @item gnus-treat-strip-list-identifiers (head) @xref{Article Hiding}. +@vindex gnus-treat-highlight-citation @item gnus-treat-highlight-citation (t, integer) +@vindex gnus-treat-highlight-headers @item gnus-treat-highlight-headers (head) +@vindex gnus-treat-highlight-signature @item gnus-treat-highlight-signature (t, last, integer) @xref{Article Highlighting}. +@vindex gnus-treat-play-sounds @item gnus-treat-play-sounds +@vindex gnus-treat-translate @item gnus-treat-translate @item gnus-treat-ansi-sequences (t) +@vindex gnus-treat-x-pgp-sig @item gnus-treat-x-pgp-sig (head) +@vindex gnus-treat-unfold-headers @item gnus-treat-unfold-headers (head) +@vindex gnus-treat-fold-headers @item gnus-treat-fold-headers (head) +@vindex gnus-treat-fold-newsgroups @item gnus-treat-fold-newsgroups (head) +@vindex gnus-treat-leading-whitespace @item gnus-treat-leading-whitespace (head) @xref{Article Header}. @@ -11845,12 +12029,12 @@ @cindex User-Agent This variable controls which information should be exposed in the -User-Agent header. It can be one of the symbols @code{gnus} (show only -Gnus version), @code{emacs-gnus} (show only Emacs and Gnus versions), -@code{emacs-gnus-config} (same as @code{emacs-gnus} plus system -configuration), @code{emacs-gnus-type} (same as @code{emacs-gnus} plus -system type) or a custom string. If you set it to a string, be sure to -use a valid format, see RFC 2616. +User-Agent header. It can be a list of symbols or a string. Valid +symbols are @code{gnus} (show Gnus version) and @code{emacs} (show Emacs +version). In addition to the Emacs version, you can add @code{codename} +(show (S)XEmacs codename) or either @code{config} (show system +configuration) or @code{type} (show system type). If you set it to a +string, be sure to use a valid format, see RFC 2616. @end table @@ -11880,6 +12064,10 @@ Modify to suit your needs. +@vindex gnus-message-highlight-citation +If @code{gnus-message-highlight-citation} is t, different levels of +citations are highlighted like in Gnus article buffers also in message +mode buffers. @node Archived Messages @section Archived Messages @@ -12111,6 +12299,9 @@ @item @code{body} @end itemize +Note that the @code{signature-file} attribute honors the variable +@code{message-signature-directory}. + The attribute name can also be a string or a symbol. In that case, this will be used as a header name, and the value will be inserted in the headers of the article; if the value is @code{nil}, the header @@ -12172,7 +12363,8 @@ The @samp{nnml:.*} rule means that you use the @code{To} address as the @code{From} address in all your outgoing replies, which might be handy if you fill many roles. - +You may also use @code{message-alternative-emails} instead. +@xref{Message Headers, ,Message Headers, message, Message Manual}. @node Drafts @section Drafts @@ -12541,6 +12733,15 @@ (@code{gnus-server-regenerate-server}). This can be useful if you have a mail back end that has gotten out of sync. +@item z +@kindex z (Server) +@findex gnus-server-compact-server + +Compact all groups in the server under point +(@code{gnus-server-compact-server}). Currently implemented only in +nnml (@pxref{Mail Spool}). This removes gaps between article numbers, +hence getting a correct total article count. + @end table @@ -12627,7 +12828,7 @@ @lisp (setq gnus-select-method '(nntp "indirect" - (nntp-address "news.server.example") + (nntp-address "news.server.example") (nntp-via-user-name "intermediate_user_name") (nntp-via-address "intermediate.host.example") (nntp-via-rlogin-command "ssh") @@ -12839,8 +13040,8 @@ @vindex nntp-server-opened-hook @cindex @sc{mode reader} @cindex authinfo -@cindex authentification -@cindex nntp authentification +@cindex authentication +@cindex nntp authentication @findex nntp-send-authinfo @findex nntp-send-mode-reader is run after a connection has been made. It can be used to send @@ -13000,6 +13201,24 @@ in two categories: direct connection functions (four pre-made), and indirect ones (three pre-made). +@item nntp-never-echoes-commands +@vindex nntp-never-echoes-commands +Non-@code{nil} means the nntp server never echoes commands. It is +reported that some nntps server doesn't echo commands. So, you may want +to set this to non-@code{nil} in the method for such a server setting +@code{nntp-open-connection-function} to @code{nntp-open-ssl-stream} for +example. The default value is @code{nil}. Note that the +@code{nntp-open-connection-functions-never-echo-commands} variable +overrides the @code{nil} value of this variable. + +@item nntp-open-connection-functions-never-echo-commands +@vindex nntp-open-connection-functions-never-echo-commands +List of functions that never echo commands. Add or set a function which +you set to @code{nntp-open-connection-function} to this list if it does +not echo commands. Note that a non-@code{nil} value of the +@code{nntp-never-echoes-commands} variable overrides this variable. The +default value is @code{(nntp-open-network-stream)}. + @item nntp-prepare-post-hook @vindex nntp-prepare-post-hook A hook run just before posting an article. If there is no @@ -13613,7 +13832,7 @@ @vindex nnmail-mail-splitting-charset @vindex nnmail-mail-splitting-decodes -By default the splitting codes @acronym{MIME} decodes headers so you +By default, splitting @acronym{MIME}-decodes headers so you can match on non-@acronym{ASCII} strings. The @code{nnmail-mail-splitting-charset} variable specifies the default charset for decoding. The behavior can be turned off completely by @@ -13731,7 +13950,8 @@ rm -f $TMP; $MOVEMAIL $MAIL $TMP >/dev/null && cat $TMP @end example -Alter this script to fit find the @samp{movemail} you want to use. +Alter this script to fit the @samp{movemail} and temporary +file you want to use. @item directory @@ -13860,16 +14080,17 @@ @vindex pop3-movemail @vindex pop3-leave-mail-on-server If the @code{:program} and @code{:function} keywords aren't specified, -@code{pop3-movemail} will be used. If the -@code{pop3-leave-mail-on-server} is non-@code{nil} the mail is to be -left on the @acronym{POP} server after fetching when using -@code{pop3-movemail}. Note that POP servers maintain no state -information between sessions, so what the client believes is there and -what is actually there may not match up. If they do not, then the whole -thing can fall apart and leave you with a corrupt mailbox. - -Here are some examples. Fetch from the default @acronym{POP} server, -using the default user name, and default fetcher: +@code{pop3-movemail} will be used. If @code{pop3-leave-mail-on-server} +is non-@code{nil} the mail is to be left on the @acronym{POP} server +after fetching when using @code{pop3-movemail}. Note that POP servers +maintain no state information between sessions, so what the client +believes is there and what is actually there may not match up. If they +do not, then you may get duplicate mails or the whole thing can fall +apart and leave you with a corrupt mailbox. + +Here are some examples for getting mail from a @acronym{POP} server. +Fetch from the default @acronym{POP} server, using the default user +name, and default fetcher: @lisp (pop) @@ -14733,6 +14954,7 @@ @node Expiring Mail @subsection Expiring Mail @cindex article expiry +@cindex expiring mail Traditional mail readers have a tendency to remove mail articles when you mark them as read, in some way. Gnus takes a fundamentally @@ -15005,12 +15227,16 @@ @findex nnmail-remove-tabs Translate all @samp{TAB} characters into @samp{SPACE} characters. -@item nnmail-fix-eudora-headers -@findex nnmail-fix-eudora-headers +@item nnmail-ignore-broken-references +@findex nnmail-ignore-broken-references +@c @findex nnmail-fix-eudora-headers @cindex Eudora -Eudora produces broken @code{References} headers, but OK -@code{In-Reply-To} headers. This function will get rid of the -@code{References} headers. +@cindex Pegasus +Some mail user agents (e.g. Eudora and Pegasus) produce broken +@code{References} headers, but correct @code{In-Reply-To} headers. This +function will get rid of the @code{References} header if the headers +contain a line matching the regular expression +@code{nnmail-broken-references-mailers}. @end table @@ -15297,7 +15523,7 @@ files. This requires @code{auto-compression-mode} to be enabled (@pxref{Compressed Files, ,Compressed Files, emacs, The Emacs Manual}). If the value of @code{nnml-use-compressed-files} is a string, it is used -as the file extension specifying the comression program. You can set it +as the file extension specifying the compression program. You can set it to @samp{.bz2} if your Emacs supports it. A value of @code{t} is equivalent to @samp{.gz}. @@ -16671,7 +16897,7 @@ clients. (In other words, Gnus has two ``Tick'' marks and @acronym{IMAP} has only one.) -Probably the only reason for frobing this would be if you're trying +Probably the only reason for frobbing this would be if you're trying enable per-user persistent dormant flags, using something like: @lisp @@ -16687,6 +16913,7 @@ @item nnimap-expunge-search-string @cindex expunging @vindex nnimap-expunge-search-string +@cindex expiring @acronym{IMAP} mail This variable contain the @acronym{IMAP} search command sent to server when searching for articles eligible for expiring. The default is @@ -16698,6 +16925,10 @@ messages instead of the internal article date. See section 6.4.4 of RFC 2060 for more information on valid strings. +However, if @code{nnimap-search-uids-not-since-is-evil} +is true, this variable has no effect since the search logic +is reversed, as described below. + @item nnimap-authinfo-file @vindex nnimap-authinfo-file @@ -16723,6 +16954,47 @@ seem to need this under some circumstances; it was reported that Courier 1.7.1 did. +@item nnimap-nov-is-evil +@vindex nnimap-nov-is-evil +@cindex Courier @acronym{IMAP} server +@cindex @acronym{NOV} + +Never generate or use a local @acronym{NOV} database. Defaults to the +value of @code{gnus-agent}. + +Using a @acronym{NOV} database usually makes header fetching much +faster, but it uses the @code{UID SEARCH UID} command, which is very +slow on some servers (notably some versions of Courier). Since the Gnus +Agent caches the information in the @acronym{NOV} database without using +the slow command, this variable defaults to true if the Agent is in use, +and false otherwise. + +@item nnimap-search-uids-not-since-is-evil +@vindex nnimap-search-uids-not-since-is-evil +@cindex Courier @acronym{IMAP} server +@cindex expiring @acronym{IMAP} mail + +Avoid the @code{UID SEARCH UID @var{message numbers} NOT SINCE +@var{date}} command, which is slow on some @acronym{IMAP} servers +(notably, some versions of Courier). Instead, use @code{UID SEARCH SINCE +@var{date}} and prune the list of expirable articles within Gnus. + +When Gnus expires your mail (@pxref{Expiring Mail}), it starts with a +list of expirable articles and asks the IMAP server questions like ``Of +these articles, which ones are older than a week?'' While this seems +like a perfectly reasonable question, some IMAP servers take a long time +to answer it, since they seemingly go looking into every old article to +see if it is one of the expirable ones. Curiously, the question ``Of +@emph{all} articles, which ones are newer than a week?'' seems to be +much faster to answer, so setting this variable causes Gnus to ask this +question and figure out the answer to the real question itself. + +This problem can really sneak up on you: when you first configure Gnus, +everything works fine, but once you accumulate a couple thousand +messages, you start cursing Gnus for being so slow. On the other hand, +if you get a lot of email within a week, setting this variable will +cause a lot of network traffic between Gnus and the IMAP server. + @end table @menu @@ -16910,7 +17182,7 @@ @node Expiring in IMAP @subsection Expiring in IMAP -@cindex expiring imap mail +@cindex expiring @acronym{IMAP} mail Even though @code{nnimap} is not a proper @code{nnmail} derived back end, it supports most features in regular expiring (@pxref{Expiring @@ -16929,6 +17201,9 @@ your server must support permanent storage of client specific flags on messages. Most do, fortunately. +If expiring @acronym{IMAP} mail seems very slow, try setting the server +variable @code{nnimap-search-uids-not-since-is-evil}. + @table @code @item nnmail-expiry-wait @@ -19213,7 +19488,7 @@ @findex gnus-agent-expire-group @cindex agent expiry @cindex Gnus agent expiry -@cindex expiry +@cindex expiry, in Gnus agent The Agent back end, @code{nnagent}, doesn't handle expiry. Well, at least it doesn't handle it like other back ends. Instead, there are @@ -19509,20 +19784,20 @@ @file{~/.gnus.el} file to get started. @lisp -;;; @r{Define how Gnus is to fetch news. We do this over @acronym{NNTP}} -;;; @r{from your ISP's server.} +;; @r{Define how Gnus is to fetch news. We do this over @acronym{NNTP}} +;; @r{from your ISP's server.} (setq gnus-select-method '(nntp "news.your-isp.com")) -;;; @r{Define how Gnus is to read your mail. We read mail from} -;;; @r{your ISP's @acronym{POP} server.} +;; @r{Define how Gnus is to read your mail. We read mail from} +;; @r{your ISP's @acronym{POP} server.} (setq mail-sources '((pop :server "pop.your-isp.com"))) -;;; @r{Say how Gnus is to store the mail. We use nnml groups.} +;; @r{Say how Gnus is to store the mail. We use nnml groups.} (setq gnus-secondary-select-methods '((nnml ""))) -;;; @r{Make Gnus into an offline newsreader.} -;;; (gnus-agentize) ; @r{The obsolete setting.} -;;; (setq gnus-agent t) ; @r{Now the default.} +;; @r{Make Gnus into an offline newsreader.} +;; (gnus-agentize) ; @r{The obsolete setting.} +;; (setq gnus-agent t) ; @r{Now the default.} @end lisp That should be it, basically. Put that in your @file{~/.gnus.el} file, @@ -19560,7 +19835,7 @@ @example #!/bin/sh -emacs -batch -l ~/.emacs -l ~/.gnus.el gnus-agent-batch >/dev/null 2>&1 +emacs -batch -l ~/.emacs -l ~/.gnus.el -f gnus-agent-batch >/dev/null 2>&1 @end example @@ -20769,6 +21044,13 @@ See? Simple. +@vindex gnus-inhibit-slow-scoring +You can inhibit scoring the slow scoring on headers or body by setting +the variable @code{gnus-inhibit-slow-scoring}. If +@code{gnus-inhibit-slow-scoring} is regexp, slow scoring is inhibited if +the group matches the regexp. If it is t, slow scoring on it is +inhibited for all groups. + @node Scoring Tips @section Scoring Tips @@ -21138,7 +21420,7 @@ @example ((& ("from" "Lars Ingebrigtsen") - (1- ("from" "Reig Eigir Logge"))) + (1- ("from" "Reig Eigil Logge"))) -100000) @end example @@ -22604,8 +22886,8 @@ @section Image Enhancements XEmacs, as well as Emacs 21@footnote{Emacs 21 on MS Windows doesn't -support images yet.}, is able to display pictures and stuff, so Gnus has -taken advantage of that. +support images, Emacs 22 does.} and up, are able to display pictures and +stuff, so Gnus has taken advantage of that. @menu * X-Face:: Display a funky, teensy black-and-white image. @@ -22642,21 +22924,26 @@ has image support the default action is to display the face before the @code{From} header. If there's no native @code{X-Face} support, Gnus will try to convert the @code{X-Face} header using external programs -from the @code{pbmplus} package and friends. For XEmacs it's faster if -XEmacs has been compiled with @code{X-Face} support. The default action -under Emacs without image support is to fork off the @code{display} -program. +from the @code{pbmplus} package and friends, see below. For XEmacs it's +faster if XEmacs has been compiled with @code{X-Face} support. The +default action under Emacs without image support is to fork off the +@code{display} program. -On a GNU/Linux system, the @code{display} program is from the +On a GNU/Linux system, the @code{display} program is included in the ImageMagick package. For external conversion programs look for packages with names like @code{netpbm}, @code{libgr-progs} and @code{compface}. +On Windows, you may use the packages @code{netpbm} and @code{compface} +from @url{http://gnuwin32.sourceforge.net}. You need to add the +@code{bin} directory to your @code{PATH} environment variable. +@c In fact only the following DLLs and binaries seem to be required: +@c compface1.dll uncompface.exe libnetpbm10.dll icontopbm.exe -The variable that controls this is the -@code{gnus-article-x-face-command} variable. If this variable is a +The variable @code{gnus-article-x-face-command} controls which programs +are used to display the @code{X-Face} header. If this variable is a string, this string will be executed in a sub-shell. If it is a function, this function will be called with the face as the argument. -If the @code{gnus-article-x-face-too-ugly} (which is a regexp) matches -the @code{From} header, the face will not be shown. +If @code{gnus-article-x-face-too-ugly} (which is a regexp) matches the +@code{From} header, the face will not be shown. (Note: @code{x-face} is used in the variable/function names, not @code{xface}). @@ -23111,7 +23398,7 @@ analysis of spam works very well in most of the cases, but it can classify legitimate e-mail as spam in some cases. It takes time to run the analysis, the full message must be analyzed, and the user has -to store the database of spam analyses. Statistical analysis on the +to store the database of spam analysis. Statistical analysis on the server is gaining popularity. This has the advantage of letting the user Just Read Mail, but has the disadvantage that it's harder to tell the server that it has misclassified mail. @@ -23490,7 +23777,7 @@ group specified by the variable @code{gnus-spam-process-destinations}, or the group parameter @code{spam-process-destination}. If these variables are not set, the articles are left in their current group. -If an article cannot not be moved (e.g., with a read-only backend such +If an article cannot be moved (e.g., with a read-only backend such as @acronym{NNTP}), it is copied. If an article is moved to another group, it is processed again when @@ -23826,9 +24113,6 @@ (gnus-registry-initialize) (spam-initialize) -;; @r{I like @kbd{C-s} for marking spam} -(define-key gnus-summary-mode-map "\C-s" 'gnus-summary-mark-as-spam) - (setq spam-log-to-registry t ; @r{for spam autodetection} spam-use-BBDB t @@ -24417,7 +24701,7 @@ @end defvar -@defvar spam-spamassassin-path +@defvar spam-spamassassin-program This variable points to the SpamAssassin executable. If you have @code{spamd} running, you can set this variable to the @code{spamc} @@ -24462,7 +24746,7 @@ the default value of @samp{spam}. @end defvar -@defvar spam-ifile-database-path +@defvar spam-ifile-database This is the filename for the ifile database. It is not specified by default, so ifile will use its own default database name. @@ -24581,7 +24865,7 @@ @defvar spam-spamoracle-database By default, SpamOracle uses the file @file{~/.spamoracle.db} as a database to -store its analyses. This is controlled by the variable +store its analysis. This is controlled by the variable @code{spam-spamoracle-database} which defaults to @code{nil}. That means the default SpamOracle database will be used. In case you want your database to live somewhere special, set @@ -24855,10 +25139,10 @@ @end defun Usually you would call @code{spam-stat-process-spam-directory} on a -directory such as @file{~/Mail/mail/spam} (this usually corresponds -the the group @samp{nnml:mail.spam}), and you would call +directory such as @file{~/Mail/mail/spam} (this usually corresponds to +the group @samp{nnml:mail.spam}), and you would call @code{spam-stat-process-non-spam-directory} on a directory such as -@file{~/Mail/mail/misc} (this usually corresponds the the group +@file{~/Mail/mail/misc} (this usually corresponds to the group @samp{nnml:mail.misc}). When you are using @acronym{IMAP}, you won't have the mails available @@ -25072,7 +25356,7 @@ @subsection Dired @cindex dired -@code{gnus-dired-minor-mode} provided some useful functions for dired +@code{gnus-dired-minor-mode} provides some useful functions for dired buffers. It is enabled with @lisp (add-hook 'dired-mode-hook 'turn-on-gnus-dired-mode) @@ -25081,6 +25365,7 @@ @table @kbd @item C-c C-m C-a @findex gnus-dired-attach +@cindex attachments, selection via dired Send dired's marked files as an attachment (@code{gnus-dired-attach}). You will be prompted for a message buffer. @@ -26668,23 +26953,10 @@ @itemize @bullet -@item -@kbd{F} (@code{gnus-article-followup-with-original}) and @kbd{R} -(@code{gnus-article-reply-with-original}) only yank the text in the -region if the region is active. - -@item -@code{gnus-group-read-ephemeral-group} can be called interactively, -using @kbd{G M}. - -@item -In draft groups, @kbd{e} is now bound to @code{gnus-draft-edit-message}. -Use @kbd{B w} for @code{gnus-summary-edit-article} instead. - -@item -The revised Gnus @acronym{FAQ} is included in the manual, -@xref{Frequently Asked Questions}. +@item Installation changes +@c *********************** +@itemize @bullet @item Upgrading from previous (stable) version if you have used Oort. @@ -26698,40 +26970,102 @@ isn't save in general. @item -Article Buttons +Lisp files are now installed in @file{.../site-lisp/gnus/} by default. +It defaulted to @file{.../site-lisp/} formerly. In addition to this, +the new installer issues a warning if other Gnus installations which +will shadow the latest one are detected. You can then remove those +shadows manually or remove them using @code{make +remove-installed-shadows}. -More buttons for URLs, mail addresses, Message-IDs, Info links, man -pages and Emacs or Gnus related references. @xref{Article Buttons}. The -variables @code{gnus-button-@var{*}-level} can be used to control the -appearance of all article buttons. @xref{Article Button Levels}. +@item +New @file{make.bat} for compiling and installing Gnus under MS Windows + +Use @file{make.bat} if you want to install Gnus under MS Windows, the +first argument to the batch-program should be the directory where +@file{xemacs.exe} respectively @file{emacs.exe} is located, iff you want +to install Gnus after compiling it, give @file{make.bat} @code{/copy} as +the second parameter. + +@file{make.bat} has been rewritten from scratch, it now features +automatic recognition of XEmacs and GNU Emacs, generates +@file{gnus-load.el}, checks if errors occur while compilation and +generation of info files and reports them at the end of the build +process. It now uses @code{makeinfo} if it is available and falls +back to @file{infohack.el} otherwise. @file{make.bat} should now +install all files which are necessary to run Gnus and be generally a +complete replacement for the @code{configure; make; make install} +cycle used under Unix systems. + +The new @file{make.bat} makes @file{make-x.bat} and @file{xemacs.mak} +superfluous, so they have been removed. @item -Dired integration +@file{~/News/overview/} not used. -@code{gnus-dired-minor-mode} (see @ref{Other modes}) installs key -bindings in dired buffers to send a file as an attachment, open a file -using the appropriate mailcap entry, and print a file using the mailcap -entry. +As a result of the following change, the @file{~/News/overview/} +directory is not used any more. You can safely delete the entire +hierarchy. +@c FIXME: `gnus-load' is mentioned in README, which is not included in +@c CVS. We should find a better place for this item. @item -Gnus can display RSS newsfeeds as a newsgroup. @xref{RSS}. +@code{(require 'gnus-load)} + +If you use a stand-alone Gnus distribution, you'd better add +@code{(require 'gnus-load)} into your @file{~/.emacs} after adding the Gnus +lisp directory into load-path. + +File @file{gnus-load.el} contains autoload commands, functions and variables, +some of which may not be included in distributions of Emacsen. + +@end itemize + +@item New packages and libraries within Gnus +@c ***************************************** + +@itemize @bullet @item -Single-part yenc encoded attachments can be decoded. +The revised Gnus @acronym{FAQ} is included in the manual, +@xref{Frequently Asked Questions}. @item -Picons +@acronym{TLS} wrapper shipped with Gnus -The picons code has been reimplemented to work in GNU Emacs---some of -the previous options have been removed or renamed. +@acronym{TLS}/@acronym{SSL} is now supported in @acronym{IMAP} and +@acronym{NNTP} via @file{tls.el} and GNUTLS. The old +@acronym{TLS}/@acronym{SSL} support via (external third party) +@file{ssl.el} and OpenSSL still works. -Picons are small ``personal icons'' representing users, domain and -newsgroups, which can be displayed in the Article buffer. -@xref{Picons}. +@item +Improved anti-spam features. + +Gnus is now able to take out spam from your mail and news streams +using a wide variety of programs and filter rules. Among the supported +methods are RBL blocklists, bogofilter and white/blacklists. Hooks +for easy use of external packages such as SpamAssassin and Hashcash +are also new. @ref{Thwarting Email Spam} and @ref{Spam Package}. +@c FIXME: @xref{Spam Package}?. Should this be under Misc? @item -If the new option @code{gnus-treat-body-boundary} is non-@code{nil}, a -boundary line is drawn at the end of the headers. +Gnus supports server-side mail filtering using Sieve. + +Sieve rules can be added as Group Parameters for groups, and the +complete Sieve script is generated using @kbd{D g} from the Group +buffer, and then uploaded to the server using @kbd{C-c C-l} in the +generated Sieve buffer. @xref{Sieve Commands}, and the new Sieve +manual @ref{Top, , Top, sieve, Emacs Sieve}. + +@end itemize + +@item Changes in group mode +@c ************************ + +@itemize @bullet + +@item +@code{gnus-group-read-ephemeral-group} can be called interactively, +using @kbd{G M}. @item Retrieval of charters and control messages @@ -26740,19 +27074,94 @@ control messages (@kbd{H C}). @item -Delayed articles +The new variable @code{gnus-parameters} can be used to set group parameters. -You can delay the sending of a message with @kbd{C-c C-j} in the Message -buffer. The messages are delivered at specified time. This is useful -for sending yourself reminders. @xref{Delayed Articles}. +Earlier this was done only via @kbd{G p} (or @kbd{G c}), which stored +the parameters in @file{~/.newsrc.eld}, but via this variable you can +enjoy the powers of customize, and simplified backups since you set the +variable in @file{~/.gnus.el} instead of @file{~/.newsrc.eld}. The +variable maps regular expressions matching group names to group +parameters, a'la: +@lisp +(setq gnus-parameters + '(("mail\\..*" + (gnus-show-threads nil) + (gnus-use-scoring nil)) + ("^nnimap:\\(foo.bar\\)$" + (to-group . "\\1")))) +@end lisp @item -If @code{auto-compression-mode} is enabled, attachments are automatically -decompressed when activated. +Unread count correct in nnimap groups. + +The estimated number of unread articles in the group buffer should now +be correct for nnimap groups. This is achieved by calling +@code{nnimap-fixup-unread-after-getting-new-news} from the +@code{gnus-setup-news-hook} (called on startup) and +@code{gnus-after-getting-new-news-hook}. (called after getting new +mail). If you have modified those variables from the default, you may +want to add @code{nnimap-fixup-unread-after-getting-new-news} again. If +you were happy with the estimate and want to save some (minimal) time +when getting new mail, remove the function. @item -If the new option @code{nnml-use-compressed-files} is non-@code{nil}, -the nnml back end allows compressed message files. +Group names are treated as UTF-8 by default. + +This is supposedly what USEFOR wanted to migrate to. See +@code{gnus-group-name-charset-group-alist} and +@code{gnus-group-name-charset-method-alist} for customization. + +@item +@code{gnus-group-charset-alist} and +@code{gnus-group-ignored-charsets-alist}. + +The regexps in these variables are compared with full group names +instead of real group names in 5.8. Users who customize these +variables should change those regexps accordingly. For example: +@lisp +("^han\\>" euc-kr) -> ("\\(^\\|:\\)han\\>" euc-kr) +@end lisp + +@end itemize + +@item Changes in summary and article mode +@c ************************************** + +@itemize @bullet + +@item +@kbd{F} (@code{gnus-article-followup-with-original}) and @kbd{R} +(@code{gnus-article-reply-with-original}) only yank the text in the +region if the region is active. + +@item +In draft groups, @kbd{e} is now bound to @code{gnus-draft-edit-message}. +Use @kbd{B w} for @code{gnus-summary-edit-article} instead. + +@item +Article Buttons + +More buttons for URLs, mail addresses, Message-IDs, Info links, man +pages and Emacs or Gnus related references. @xref{Article Buttons}. The +variables @code{gnus-button-@var{*}-level} can be used to control the +appearance of all article buttons. @xref{Article Button Levels}. + +@item +Single-part yenc encoded attachments can be decoded. + +@item +Picons + +The picons code has been reimplemented to work in GNU Emacs---some of +the previous options have been removed or renamed. + +Picons are small ``personal icons'' representing users, domain and +newsgroups, which can be displayed in the Article buffer. +@xref{Picons}. + +@item +If the new option @code{gnus-treat-body-boundary} is non-@code{nil}, a +boundary line is drawn at the end of the headers. @item Signed article headers (X-PGP-Sig) can be verified with @kbd{W p}. @@ -26778,13 +27187,6 @@ opposed to old but unread messages). @item -The new option @code{gnus-gcc-mark-as-read} automatically marks -Gcc articles as read. - -@item -The nndoc back end now supports mailman digests and exim bounces. - -@item Gnus supports RFC 2369 mailing list headers, and adds a number of related commands in mailing list groups. @xref{Mailing List}. @@ -26793,55 +27195,11 @@ in English. @xref{Article Date}. @item -The envelope sender address can be customized when using Sendmail. -@xref{Mail Variables, Mail Variables,, message, Message Manual}. - -@item diffs are automatically highlighted in groups matching @code{mm-uu-diff-groups-regexp} @item -@acronym{TLS} wrapper shipped with Gnus - -@acronym{TLS}/@acronym{SSL} is now supported in @acronym{IMAP} and -@acronym{NNTP} via @file{tls.el} and GNUTLS. The old -@acronym{TLS}/@acronym{SSL} support via (external third party) -@file{ssl.el} and OpenSSL still works. - -@item -New @file{make.bat} for compiling and installing Gnus under MS Windows - -Use @file{make.bat} if you want to install Gnus under MS Windows, the -first argument to the batch-program should be the directory where -@file{xemacs.exe} respectively @file{emacs.exe} is located, iff you want -to install Gnus after compiling it, give @file{make.bat} @code{/copy} as -the second parameter. - -@file{make.bat} has been rewritten from scratch, it now features -automatic recognition of XEmacs and GNU Emacs, generates -@file{gnus-load.el}, checks if errors occur while compilation and -generation of info files and reports them at the end of the build -process. It now uses @code{makeinfo} if it is available and falls -back to @file{infohack.el} otherwise. @file{make.bat} should now -install all files which are necessary to run Gnus and be generally a -complete replacement for the @code{configure; make; make install} -cycle used under Unix systems. - -The new @file{make.bat} makes @file{make-x.bat} superfluous, so it has -been removed. - -@item -Support for non-@acronym{ASCII} domain names - -Message supports non-@acronym{ASCII} domain names in From:, To: and -Cc: and will query you whether to perform encoding when you try to -send a message. The variable @code{message-use-idna} controls this. -Gnus will also decode non-@acronym{ASCII} domain names in From:, To: -and Cc: when you view a message. The variable @code{gnus-use-idna} -controls this. - -@item -Better handling of Microsoft citation styles +Better handling of Microsoft citation styles Gnus now tries to recognize the mangled header block that some Microsoft mailers use to indicate that the rest of the message is a citation, even @@ -26849,6 +27207,10 @@ @code{gnus-cite-unsightly-citation-regexp} matches the start of these citations. +The new command @kbd{W Y f} +(@code{gnus-article-outlook-deuglify-article}) allows deuglifying broken +Outlook (Express) articles. + @item @code{gnus-article-skip-boring} @@ -26862,31 +27224,117 @@ message cited below. @item -The format spec @code{%C} for positioning point has changed to @code{%*}. +Smileys (@samp{:-)}, @samp{;-)} etc) are now displayed graphically in +Emacs too. + +Put @code{(setq gnus-treat-display-smileys nil)} in @file{~/.gnus.el} to +disable it. @item -The new variable @code{gnus-parameters} can be used to set group parameters. +Face headers handling. @xref{Face}. -Earlier this was done only via @kbd{G p} (or @kbd{G c}), which stored -the parameters in @file{~/.newsrc.eld}, but via this variable you can -enjoy the powers of customize, and simplified backups since you set the -variable in @file{~/.gnus.el} instead of @file{~/.newsrc.eld}. The -variable maps regular expressions matching group names to group -parameters, a'la: -@lisp -(setq gnus-parameters - '(("mail\\..*" - (gnus-show-threads nil) - (gnus-use-scoring nil)) - ("^nnimap:\\(foo.bar\\)$" - (to-group . "\\1")))) -@end lisp +@item +In the summary buffer, the new command @kbd{/ N} inserts new messages +and @kbd{/ o} inserts old messages. @item -Smileys (@samp{:-)}, @samp{;-)} etc) are now iconized for Emacs too. +Gnus decodes morse encoded messages if you press @kbd{W m}. -Put @code{(setq gnus-treat-display-smileys nil)} in @file{~/.gnus.el} to -disable it. +@item +@code{gnus-summary-line-format} + +The default value changed to @samp{%U%R%z%I%(%[%4L: %-23,23f%]%) +%s\n}. Moreover @code{gnus-extra-headers}, +@code{nnmail-extra-headers} and @code{gnus-ignored-from-addresses} +changed their default so that the users name will be replaced by the +recipient's name or the group name posting to for @acronym{NNTP} +groups. + +@item +Deleting of attachments. + +The command @code{gnus-mime-save-part-and-strip} (bound to @kbd{C-o} +on @acronym{MIME} buttons) saves a part and replaces the part with an +external one. @code{gnus-mime-delete-part} (bound to @kbd{d} on +@acronym{MIME} buttons) removes a part. It works only on back ends +that support editing. + +@item +@code{gnus-default-charset} + +The default value is determined from the +@code{current-language-environment} variable, instead of +@code{iso-8859-1}. Also the @samp{.*} item in +@code{gnus-group-charset-alist} is removed. + +@item +Printing capabilities are enhanced. + +Gnus supports Muttprint natively with @kbd{O P} from the Summary and +Article buffers. Also, each individual @acronym{MIME} part can be +printed using @kbd{p} on the @acronym{MIME} button. + +@item +Extended format specs. + +Format spec @samp{%&user-date;} is added into +@code{gnus-summary-line-format-alist}. Also, user defined extended +format specs are supported. The extended format specs look like +@samp{%u&foo;}, which invokes function +@code{gnus-user-format-function-@var{foo}}. Because @samp{&} is used as the +escape character, old user defined format @samp{%u&} is no longer supported. + +@item +@kbd{/ *} (@code{gnus-summary-limit-include-cached}) is rewritten. +@c FIXME: Was this a user-visible change? + +It was aliased to @kbd{Y c} +(@code{gnus-summary-insert-cached-articles}). The new function filters +out other articles. + +@item +Some limiting commands accept a @kbd{C-u} prefix to negate the match. + +If @kbd{C-u} is used on subject, author or extra headers, i.e., @kbd{/ +s}, @kbd{/ a}, and @kbd{/ x} +(@code{gnus-summary-limit-to-@{subject,author,extra@}}) respectively, the +result will be to display all articles that do not match the expression. + +@item +Gnus inlines external parts (message/external). + +@end itemize + +@item Changes in Message mode and related Gnus features +@c **************************************************** + +@itemize @bullet + +@item +Delayed articles + +You can delay the sending of a message with @kbd{C-c C-j} in the Message +buffer. The messages are delivered at specified time. This is useful +for sending yourself reminders. @xref{Delayed Articles}. + +@item +If the new option @code{nnml-use-compressed-files} is non-@code{nil}, +the nnml back end allows compressed message files. + +@item +The new option @code{gnus-gcc-mark-as-read} automatically marks +Gcc articles as read. + +@item +Externalizing of attachments + +If @code{gnus-gcc-externalize-attachments} or +@code{message-fcc-externalize-attachments} is non-@code{nil}, attach +local files as external parts. + +@item +The envelope sender address can be customized when using Sendmail. +@xref{Mail Variables, Mail Variables,, message, Message Manual}. @item Gnus no longer generate the Sender: header automatically. @@ -26917,39 +27365,7 @@ @code{nil}. @item -Improved anti-spam features. - -Gnus is now able to take out spam from your mail and news streams -using a wide variety of programs and filter rules. Among the supported -methods are RBL blocklists, bogofilter and white/blacklists. Hooks -for easy use of external packages such as SpamAssassin and Hashcash -are also new. @xref{Thwarting Email Spam}. - -@item -Easy inclusion of X-Faces headers. - -@item -Face headers handling. - -@item -In the summary buffer, the new command @kbd{/ N} inserts new messages -and @kbd{/ o} inserts old messages. - -@item -Gnus decodes morse encoded messages if you press @kbd{W m}. - -@item -Unread count correct in nnimap groups. - -The estimated number of unread articles in the group buffer should now -be correct for nnimap groups. This is achieved by calling -@code{nnimap-fixup-unread-after-getting-new-news} from the -@code{gnus-setup-news-hook} (called on startup) and -@code{gnus-after-getting-new-news-hook}. (called after getting new -mail). If you have modified those variables from the default, you may -want to add @code{nnimap-fixup-unread-after-getting-new-news} again. If -you were happy with the estimate and want to save some (minimal) time -when getting new mail, remove the function. +Easy inclusion of X-Faces headers. @xref{X-Face}. @item Group Carbon Copy (GCC) quoting @@ -26966,64 +27382,6 @@ was inserted directly. @item -@file{~/News/overview/} not used. - -As a result of the following change, the @file{~/News/overview/} -directory is not used any more. You can safely delete the entire -hierarchy. - -@item -@code{gnus-agent} - -The Gnus Agent has seen a major updated and is now enabled by default, -and all nntp and nnimap servers from @code{gnus-select-method} and -@code{gnus-secondary-select-method} are agentized by default. Earlier -only the server in @code{gnus-select-method} was agentized by the -default, and the agent was disabled by default. When the agent is -enabled, headers are now also retrieved from the Agent cache instead -of the back ends when possible. Earlier this only happened in the -unplugged state. You can enroll or remove servers with @kbd{J a} and -@kbd{J r} in the server buffer. Gnus will not download articles into -the Agent cache, unless you instruct it to do so, though, by using -@kbd{J u} or @kbd{J s} from the Group buffer. You revert to the old -behavior of having the Agent disabled with @code{(setq gnus-agent -nil)}. Note that putting @code{(gnus-agentize)} in @file{~/.gnus.el} -is not needed any more. - -@item -@code{gnus-summary-line-format} - -The default value changed to @samp{%U%R%z%I%(%[%4L: %-23,23f%]%) -%s\n}. Moreover @code{gnus-extra-headers}, -@code{nnmail-extra-headers} and @code{gnus-ignored-from-addresses} -changed their default so that the users name will be replaced by the -recipient's name or the group name posting to for @acronym{NNTP} -groups. - -@item -@file{deuglify.el} (@code{gnus-article-outlook-deuglify-article}) - -A new file from Raymond Scholz @email{rscholz@@zonix.de} for deuglifying -broken Outlook (Express) articles. - -@c FIXME: `gnus-load' is mentioned in README, which is not included in -@c CVS. We should find a better place for this item. -@item -@code{(require 'gnus-load)} - -If you use a stand-alone Gnus distribution, you'd better add -@code{(require 'gnus-load)} into your @file{~/.emacs} after adding the Gnus -lisp directory into load-path. - -File @file{gnus-load.el} contains autoload commands, functions and variables, -some of which may not be included in distributions of Emacsen. - -@item -@code{gnus-slave-unplugged} - -A new command which starts Gnus offline in slave mode. - -@item @code{message-insinuate-rmail} Adding @code{(message-insinuate-rmail)} and @code{(setq @@ -27041,27 +27399,6 @@ @end lisp @item -Externalizing and deleting of attachments. - -If @code{gnus-gcc-externalize-attachments} or -@code{message-fcc-externalize-attachments} is non-@code{nil}, attach -local files as external parts. - -The command @code{gnus-mime-save-part-and-strip} (bound to @kbd{C-o} -on @acronym{MIME} buttons) saves a part and replaces the part with an -external one. @code{gnus-mime-delete-part} (bound to @kbd{d} on -@acronym{MIME} buttons) removes a part. It works only on back ends -that support editing. - -@item -@code{gnus-default-charset} - -The default value is determined from the -@code{current-language-environment} variable, instead of -@code{iso-8859-1}. Also the @samp{.*} item in -@code{gnus-group-charset-alist} is removed. - -@item @code{gnus-posting-styles} Add a new format of match like @@ -27083,13 +27420,6 @@ need add those two headers too. @item -Gnus reads the @acronym{NOV} and articles in the Agent if plugged. - -If one reads an article while plugged, and the article already exists -in the Agent, it won't get downloaded once more. @code{(setq -gnus-agent-cache nil)} reverts to the old behavior. - -@item Gnus supports the ``format=flowed'' (RFC 2646) parameter. On composing messages, it is enabled by @code{use-hard-newlines}. Decoding format=flowed was present but not documented in earlier @@ -27098,7 +27428,9 @@ @item The option @code{mm-fill-flowed} can be used to disable treatment of ``format=flowed'' messages. Also, flowed text is disabled when sending -inline PGP signed messages. (New in Gnus 5.10.7) +inline PGP signed messages. @xref{Flowed text, , Flowed text, +emacs-mime, The Emacs MIME Manual}. (New in Gnus 5.10.7) +@c This entry is also present in the node "No Gnus". @item Gnus supports the generation of RFC 2298 Disposition Notification requests. @@ -27106,18 +27438,6 @@ This is invoked with the @kbd{C-c M-n} key binding from message mode. @item -Gnus supports Maildir groups. - -Gnus includes a new back end @file{nnmaildir.el}. @xref{Maildir}. - -@item -Printing capabilities are enhanced. - -Gnus supports Muttprint natively with @kbd{O P} from the Summary and -Article buffers. Also, each individual @acronym{MIME} part can be -printed using @kbd{p} on the @acronym{MIME} button. - -@item Message supports the Importance: (RFC 2156) header. In the message buffer, @kbd{C-c C-f C-i} or @kbd{C-c C-u} cycles through @@ -27136,45 +27456,66 @@ The behavior can be changed by customizing @code{message-insert-canlock}. @item -Gnus supports server-side mail filtering using Sieve. +Gnus supports @acronym{PGP} (RFC 1991/2440), @acronym{PGP/MIME} (RFC +2015/3156) and @acronym{S/MIME} (RFC 2630-2633). -Sieve rules can be added as Group Parameters for groups, and the -complete Sieve script is generated using @kbd{D g} from the Group -buffer, and then uploaded to the server using @kbd{C-c C-l} in the -generated Sieve buffer. @xref{Sieve Commands}, and the new Sieve -manual @ref{Top, , Top, sieve, Emacs Sieve}. +It needs an external @acronym{S/MIME} and OpenPGP implementation, but no +additional Lisp libraries. This add several menu items to the +Attachments menu, and @kbd{C-c RET} key bindings, when composing +messages. This also obsoletes @code{gnus-article-hide-pgp-hook}. @item -Extended format specs. +@acronym{MML} (Mime compose) prefix changed from @kbd{M-m} to @kbd{C-c +C-m}. -Format spec @samp{%&user-date;} is added into -@code{gnus-summary-line-format-alist}. Also, user defined extended -format specs are supported. The extended format specs look like -@samp{%u&foo;}, which invokes function -@code{gnus-user-format-function-@var{foo}}. Because @samp{&} is used as the -escape character, old user defined format @samp{%u&} is no longer supported. +This change was made to avoid conflict with the standard binding of +@code{back-to-indentation}, which is also useful in message mode. @item -@kbd{/ *} (@code{gnus-summary-limit-include-cached}) is rewritten. +The default for @code{message-forward-show-mml} changed to the symbol +@code{best}. -It was aliased to @kbd{Y c} -(@code{gnus-summary-insert-cached-articles}). The new function filters -out other articles. +The behavior for the @code{best} value is to show @acronym{MML} (i.e., +convert to @acronym{MIME}) when appropriate. @acronym{MML} will not be +used when forwarding signed or encrypted messages, as the conversion +invalidate the digital signature. @item -Some limiting commands accept a @kbd{C-u} prefix to negate the match. +If @code{auto-compression-mode} is enabled, attachments are automatically +decompressed when activated. +@c FIXME: Does this affect article or message mode? -If @kbd{C-u} is used on subject, author or extra headers, i.e., @kbd{/ -s}, @kbd{/ a}, and @kbd{/ x} -(@code{gnus-summary-limit-to-@{subject,author,extra@}}) respectively, the -result will be to display all articles that do not match the expression. +@item +Support for non-@acronym{ASCII} domain names +Message supports non-@acronym{ASCII} domain names in From:, To: and +Cc: and will query you whether to perform encoding when you try to +send a message. The variable @code{message-use-idna} controls this. +Gnus will also decode non-@acronym{ASCII} domain names in From:, To: +and Cc: when you view a message. The variable @code{gnus-use-idna} +controls this. + +@item You can now drag and drop attachments to the Message buffer. +See @code{mml-dnd-protocol-alist} and @code{mml-dnd-attach-options}. +@xref{MIME, ,MIME, message, Message Manual}. +@c New in 5.10.9 / 5.11 + +@end itemize + +@item Changes in back ends +@c *********************** + +@itemize @bullet @item -Group names are treated as UTF-8 by default. +Gnus can display RSS newsfeeds as a newsgroup. @xref{RSS}. -This is supposedly what USEFOR wanted to migrate to. See -@code{gnus-group-name-charset-group-alist} and -@code{gnus-group-name-charset-method-alist} for customization. +@item +The nndoc back end now supports mailman digests and exim bounces. + +@item +Gnus supports Maildir groups. + +Gnus includes a new back end @file{nnmaildir.el}. @xref{Maildir}. @item The nnml and nnfolder back ends store marks for each groups. @@ -27191,6 +27532,13 @@ The new server variables @code{nnml-marks-is-evil} and @code{nnfolder-marks-is-evil} can be used to disable this feature. +@end itemize + +@item Appearance +@c ************* + +@itemize @bullet + @item The menu bar item (in Group and Summary buffer) named ``Misc'' has been renamed to ``Gnus''. @@ -27202,42 +27550,65 @@ message, Message Manual}). @item -@code{gnus-group-charset-alist} and -@code{gnus-group-ignored-charsets-alist}. +The tool bars have been updated to use GNOME icons in Group, Summary and +Message mode. You can also customize the tool bars. This is a new +feature in Gnus 5.10.9. (Only for Emacs, not in XEmacs.) + +@item The tool bar icons are now (de)activated correctly +in the group buffer, see the variable @code{gnus-group-update-tool-bar}. +Its default value depends on your Emacs version. This is a new feature +in Gnus 5.10.9. +@end itemize -The regexps in these variables are compared with full group names -instead of real group names in 5.8. Users who customize these -variables should change those regexps accordingly. For example: -@lisp -("^han\\>" euc-kr) -> ("\\(^\\|:\\)han\\>" euc-kr) -@end lisp + +@item Miscellaneous changes +@c ************************ + +@itemize @bullet @item -Gnus supports @acronym{PGP} (RFC 1991/2440), @acronym{PGP/MIME} (RFC -2015/3156) and @acronym{S/MIME} (RFC 2630-2633). +@code{gnus-agent} -It needs an external @acronym{S/MIME} and OpenPGP implementation, but no -additional Lisp libraries. This add several menu items to the -Attachments menu, and @kbd{C-c RET} key bindings, when composing -messages. This also obsoletes @code{gnus-article-hide-pgp-hook}. +The Gnus Agent has seen a major updated and is now enabled by default, +and all nntp and nnimap servers from @code{gnus-select-method} and +@code{gnus-secondary-select-method} are agentized by default. Earlier +only the server in @code{gnus-select-method} was agentized by the +default, and the agent was disabled by default. When the agent is +enabled, headers are now also retrieved from the Agent cache instead +of the back ends when possible. Earlier this only happened in the +unplugged state. You can enroll or remove servers with @kbd{J a} and +@kbd{J r} in the server buffer. Gnus will not download articles into +the Agent cache, unless you instruct it to do so, though, by using +@kbd{J u} or @kbd{J s} from the Group buffer. You revert to the old +behavior of having the Agent disabled with @code{(setq gnus-agent +nil)}. Note that putting @code{(gnus-agentize)} in @file{~/.gnus.el} +is not needed any more. @item -Gnus inlines external parts (message/external). +Gnus reads the @acronym{NOV} and articles in the Agent if plugged. + +If one reads an article while plugged, and the article already exists +in the Agent, it won't get downloaded once more. @code{(setq +gnus-agent-cache nil)} reverts to the old behavior. @item -@acronym{MML} (Mime compose) prefix changed from @kbd{M-m} to @kbd{C-c -C-m}. +Dired integration -This change was made to avoid conflict with the standard binding of -@code{back-to-indentation}, which is also useful in message mode. +@code{gnus-dired-minor-mode} (see @ref{Other modes}) installs key +bindings in dired buffers to send a file as an attachment, open a file +using the appropriate mailcap entry, and print a file using the mailcap +entry. @item -The default for @code{message-forward-show-mml} changed to symbol @code{best}. +The format spec @code{%C} for positioning point has changed to @code{%*}. + +@item +@code{gnus-slave-unplugged} + +A new command which starts Gnus offline in slave mode. + +@end itemize -The behavior for the @code{best} value is to show @acronym{MML} (i.e., -convert to @acronym{MIME}) when appropriate. @acronym{MML} will not be -used when forwarding signed or encrypted messages, as the conversion -invalidate the digital signature. @end itemize @node No Gnus @@ -27552,7 +27923,7 @@ specified by RFC 1153. @item splitting -@cindex splitting, terminolgy +@cindex splitting, terminology @cindex mail sorting @cindex mail filtering (splitting) The action of sorting your emails according to certain rules. Sometimes Index: gnus/texi/message.texi diff -u gnus/texi/message.texi:7.35 gnus/texi/message.texi:7.48 --- gnus/texi/message.texi:7.35 Fri Apr 14 17:44:42 2006 +++ gnus/texi/message.texi Wed Apr 11 17:16:20 2007 @@ -9,7 +9,7 @@ This file documents Message, the Emacs message composition mode. Copyright @copyright{} 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -2004, 2005, 2006 Free Software Foundation, Inc. +2004, 2005, 2006, 2007 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document @@ -70,7 +70,7 @@ @c Adjust ../Makefile.in if you change the following lines: Message is distributed with Gnus. The Gnus distribution @c -corresponding to this manual is No Gnus v0.4. +corresponding to this manual is No Gnus v0.6. @node Interface @@ -97,6 +97,9 @@ * Mailing Lists:: Send mail to mailing lists. @end menu +You can customize the Message Mode tool bar, see @kbd{M-x +customize-apropos RET message-tool-bar}. This feature is only available +in Emacs. @node New Mail Message @section New Mail Message @@ -175,7 +178,8 @@ @vindex message-dont-reply-to-names Addresses that match the @code{message-dont-reply-to-names} regular -expression will be removed from the @code{Cc} header. +expression (or list of regular expressions) will be removed from the +@code{Cc} header. A value of @code{nil} means exclude your name only. @vindex message-wide-reply-confirm-recipients If @code{message-wide-reply-confirm-recipients} is non-@code{nil} you @@ -693,7 +697,7 @@ it is not a member of @samp{Newsgroups}, and insert a note in the body. If @code{message-cross-post-default} is @code{nil} or if this command is called with a prefix-argument, only the @samp{FollowUp-To} header will -be set but the the target newsgroup will not be added to the +be set but the target newsgroup will not be added to the @samp{Newsgroups} header. The function to insert a note is controlled by the @code{message-cross-post-note-function} variable. @@ -821,10 +825,12 @@ automatically add the @code{Content-Type} and @code{Content-Transfer-Encoding} headers. +@findex mml-attach +@kindex C-c C-a The most typical thing users want to use the multipart things in @acronym{MIME} for is to add ``attachments'' to mail they send out. -This can be done with the @kbd{C-c C-a} command, which will prompt for -a file name and a @acronym{MIME} type. +This can be done with the @kbd{C-c C-a} command (@kbd{M-x mml-attach}), +which will prompt for a file name and a @acronym{MIME} type. @vindex mml-dnd-protocol-alist @vindex mml-dnd-attach-options @@ -888,11 +894,21 @@ Using the @acronym{MML} language, Message is able to create digitally signed and digitally encrypted messages. Message (or rather @acronym{MML}) currently support @acronym{PGP} (RFC 1991), -@acronym{PGP/MIME} (RFC 2015/3156) and @acronym{S/MIME}. Instructing -@acronym{MML} to perform security operations on a @acronym{MIME} part is -done using the @kbd{C-c C-m s} key map for signing and the @kbd{C-c C-m -c} key map for encryption, as follows. +@acronym{PGP/MIME} (RFC 2015/3156) and @acronym{S/MIME}. +@menu +* Signing and encryption:: Signing and encrypting commands. +* Using S/MIME:: Using S/MIME +* Using PGP/MIME:: Using PGP/MIME +* PGP Compatibility:: Compatibility with older implementations +@end menu + +@node Signing and encryption +@subsection Signing and encrypting commands + +Instructing @acronym{MML} to perform security operations on a +@acronym{MIME} part is done using the @kbd{C-c C-m s} key map for +signing and the @kbd{C-c C-m c} key map for encryption, as follows. @table @kbd @item C-c C-m s s @@ -975,6 +991,7 @@ other properly. Thus, we now describe what external libraries or programs are required to make things work, and some small general hints. +@node Using S/MIME @subsection Using S/MIME @emph{Note!} This section assume you have a basic familiarity with @@ -1037,6 +1054,7 @@ you are on a secure single user machine) simply press @code{RET} at the passphrase prompt. +@node Using PGP/MIME @subsection Using PGP/MIME @acronym{PGP/MIME} requires an external OpenPGP implementation, such @@ -1044,7 +1062,48 @@ implementations such as PGP 2.x and PGP 5.x are also supported. One Emacs interface to the PGP implementations, PGG (@pxref{Top, ,PGG, pgg, PGG Manual}), is included, but Mailcrypt and Florian Weimer's -@code{gpg.el} are also supported. +@code{gpg.el} are also supported. @xref{PGP Compatibility}. + +@cindex gpg-agent +Message internally calls GnuPG (the @command{gpg} command) to perform +data encryption, and in certain cases (decrypting or signing for +example), @command{gpg} requires user's passphrase. Currently the +recommended way to supply your passphrase to @command{gpg} is to use the +@command{gpg-agent} program. + +To use @command{gpg-agent} in Emacs, you need to run the following +command from the shell before starting Emacs. + +@example +eval `gpg-agent --daemon` +@end example + +This will invoke @command{gpg-agent} and set the environment variable +@code{GPG_AGENT_INFO} to allow @command{gpg} to communicate with it. +It might be good idea to put this command in your @file{.xsession} or +@file{.bash_profile}. @xref{Invoking GPG-AGENT, , , gnupg, Using the +GNU Privacy Guard}. + +Once your @command{gpg-agent} is set up, it will ask you for a +passphrase as needed for @command{gpg}. Under the X Window System, +you will see a new passphrase input dialog appear. The dialog is +provided by PIN Entry (the @command{pinentry} command), and as of +version 0.7.2, @command{pinentry} cannot cooperate with Emacs on a +single tty. So, if you are using a text console, you may need to put +a passphrase into gpg-agent's cache beforehand. The following command +does the trick. + +@example +gpg --use-agent --sign < /dev/null > /dev/null +@end example + +The Lisp variable @code{pgg-gpg-use-agent} controls whether to use +@command{gpg-agent}. See also @xref{Caching passphrase, , , pgg, The +PGG Manual}. + + +@node PGP Compatibility +@subsection Compatibility with older implementations @vindex gpg-temp-directory Note, if you are using the @code{gpg.el} you must make sure that the @@ -1490,9 +1549,10 @@ @item message-generate-hashcash @vindex message-generate-hashcash -Boolean variable that indicate whether @samp{X-Hashcash} headers +Variable that indicates whether @samp{X-Hashcash} headers should be computed for the message. @xref{Hashcash, ,Hashcash,gnus, -The Gnus Manual}. +The Gnus Manual}. If @code{opportunistic}, only generate the headers +when it doesn't lead to the user having to wait. @end table @@ -1704,56 +1764,73 @@ Valid checks are: @table @code -@item subject-cmsg -Check the subject for commands. -@item sender -@cindex Sender -Insert a new @code{Sender} header if the @code{From} header looks odd. -@item multiple-headers -Check for the existence of multiple equal headers. -@item sendsys -@cindex sendsys -Check for the existence of version and sendsys commands. -@item message-id -Check whether the @code{Message-ID} looks ok. -@item from -Check whether the @code{From} header seems nice. -@item long-lines -@cindex long lines -Check for too long lines. -@item control-chars -Check for invalid characters. -@item size -Check for excessive size. -@item new-text -Check whether there is any new text in the messages. -@item signature -Check the length of the signature. @item approved @cindex approved Check whether the article has an @code{Approved} header, which is something only moderators should include. +@item continuation-headers +Check whether there are continuation header lines that don't begin with +whitespace. +@item control-chars +Check for invalid characters. @item empty Check whether the article is empty. -@item invisible-text -Check whether there is any invisible text in the buffer. -@item empty-headers -Check whether any of the headers are empty. @item existing-newsgroups Check whether the newsgroups mentioned in the @code{Newsgroups} and @code{Followup-To} headers exist. -@item valid-newsgroups -Check whether the @code{Newsgroups} and @code{Followup-to} headers -are valid syntactically. +@item from +Check whether the @code{From} header seems nice. +@item illegible-text +Check whether there is any non-printable character in the body. +@item invisible-text +Check whether there is any invisible text in the buffer. +@item long-header-lines +Check for too long header lines. +@item long-lines +@cindex long lines +Check for too long lines in the body. +@item message-id +Check whether the @code{Message-ID} looks syntactically ok. +@item multiple-headers +Check for the existence of multiple equal headers. +@item new-text +Check whether there is any new text in the messages. +@item newsgroups +Check whether the @code{Newsgroups} header exists and is not empty. +@item quoting-style +Check whether text follows last quoted portion. @item repeated-newsgroups Check whether the @code{Newsgroups} and @code{Followup-to} headers contains repeated group names. +@item reply-to +Check whether the @code{Reply-To} header looks ok. +@item sender +@cindex Sender +Insert a new @code{Sender} header if the @code{From} header looks odd. +@item sendsys +@cindex sendsys +Check for the existence of version and sendsys commands. +@item shoot +Check whether the domain part of the @code{Message-ID} header looks ok. @item shorten-followup-to Check whether to add a @code{Followup-to} header to shorten the number of groups to post to. +@item signature +Check the length of the signature. +@item size +Check for excessive size. +@item subject +Check whether the @code{Subject} header exists and is not empty. +@item subject-cmsg +Check the subject for commands. +@item valid-newsgroups +Check whether the @code{Newsgroups} and @code{Followup-to} headers +are valid syntactically. @end table -All these conditions are checked by default. +All these conditions are checked by default, except for @code{sender} +for which the check is disabled by default if +@code{message-insert-canlock} is non-@code{nil} (@pxref{Canceling News}). @item message-ignored-news-headers @vindex message-ignored-news-headers @@ -1811,6 +1888,9 @@ Hallvard B Furuseth writes: @end example +@c FIXME: Add `message-insert-formated-citation-line' and +@c `message-citation-line-format' + Point will be at the beginning of the body of the message when this function is called. @@ -1892,8 +1972,18 @@ @item message-signature-file @vindex message-signature-file File containing the signature to be inserted at the end of the buffer. +If a path is specified, the value of +@code{message-signature-directory} is ignored, even if set. The default is @file{~/.signature}. +@item message-signature-directory +@vindex message-signature-directory +Name of directory containing signature files. Comes in handy if you +have many such files, handled via Gnus posting styles for instance. +If @code{nil} (the default), @code{message-signature-file} is expected +to specify the directory if needed. + + @item message-signature-insert-empty-line @vindex message-signature-insert-empty-line If @code{t} (the default value) an empty line is inserted before the @@ -1928,6 +2018,13 @@ Emacs MIME Manual}, for details on the @sc{mule}-to-@acronym{MIME} translation process. +@item message-fill-column +@vindex message-fill-column +@cindex auto-fill +Local value for the column beyond which automatic line-wrapping should +happen for message buffers. If non-nil (the default), also turn on +auto-fill in message buffers. + @item message-signature-separator @vindex message-signature-separator Regexp matching the signature separator. It is @samp{^-- *$} by @@ -2124,10 +2221,36 @@ @table @code @item message-generate-new-buffers @vindex message-generate-new-buffers -If non-@code{nil}, generate new buffers. The default is @code{t}. If -this is a function, call that function with three parameters: The type, -the to address and the group name. (Any of these may be @code{nil}.) -The function should return the new buffer name. +Controls whether to create a new message buffer to compose a message. +Valid values include: + +@table @code +@item nil +Generate the buffer name in the Message way (e.g., *mail*, *news*, *mail +to whom*, *news on group*, etc.) and continue editing in the existing +buffer of that name. If there is no such buffer, it will be newly +created. + +@item unique +@item t +Create the new buffer with the name generated in the Message way. This +is the default. + +@item unsent +Similar to @code{unique} but the buffer name begins with "*unsent ". + +@item standard +Similar to @code{nil} but the buffer name is simpler like *mail +message*. +@end table +@table @var +@item function +If this is a function, call that function with three parameters: The +type, the To address and the group name (any of these may be +@code{nil}). The function should return the new buffer name. +@end table + +The default value is @code{unique}. @item message-max-buffers @vindex message-max-buffers Index: gnus/texi/pgg.texi diff -u gnus/texi/pgg.texi:7.13 gnus/texi/pgg.texi:7.20 --- gnus/texi/pgg.texi:7.13 Thu Apr 27 00:27:14 2006 +++ gnus/texi/pgg.texi Sat Mar 31 11:48:16 2007 @@ -8,8 +8,8 @@ @copying This file describes PGG, an Emacs interface to various PGP implementations. -Copyright @copyright{} 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -Copyright @copyright{} 2001 Daiki Ueno. +Copyright @copyright{} 2001, 2003, 2004, 2005, 2006, 2007 Free Software +Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document @@ -17,7 +17,7 @@ any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU -Free Documentation License''. +Free Documentation License.'' @end quotation @end copying @@ -74,10 +74,19 @@ This document assumes that you have already obtained and installed them and that you are familiar with its basic functions. -By default, PGG uses GnuPG, but Pretty Good Privacy version 2 or version -5 are also supported. If you are new to such a system, I recommend that -you should look over the GNU Privacy Handbook (GPH) which is available -at @uref{http://www.gnupg.org/gph/}. +By default, PGG uses GnuPG. If you are new to such a system, I +recommend that you should look over the GNU Privacy Handbook (GPH) +which is available at @uref{http://www.gnupg.org/documentation/}. + +When using GnuPG, we recommend the use of the @code{gpg-agent} +program, which is distributed with versions 2.0 and later of GnuPG. +This is a daemon to manage private keys independently from any +protocol, and provides the most secure way to input and cache your +passphrases (@pxref{Caching passphrase}). By default, PGG will +attempt to use @code{gpg-agent} if it is running. @xref{Invoking +GPG-AGENT,,,gnupg,Using the GNU Privacy Guard}. + +PGG also supports Pretty Good Privacy version 2 or version 5. @node How to use @chapter How to use @@ -220,8 +229,61 @@ @node Caching passphrase @section Caching passphrase -PGG uses a simple passphrase caching mechanism, which is enabled by -default. +When using GnuPG (gpg) as the PGP scheme, we recommend using a program +called @code{gpg-agent} for entering and caching +passphrases@footnote{Actually, @code{gpg-agent} does not cache +passphrases but private keys. On the other hand, from a user's point +of view, this technical difference isn't visible.}. + +@defvar pgg-gpg-use-agent +If non-@code{nil}, attempt to use @code{gpg-agent} whenever possible. +The default is @code{t}. If @code{gpg-agent} is not running, or GnuPG +is not the current PGP scheme, PGG's own passphrase-caching mechanism +is used (see below). +@end defvar + +To use @code{gpg-agent} with PGG, you must first ensure that +@code{gpg-agent} is running. For example, if you are running in the X +Window System, you can do this by putting the following line in your +@file{.xsession} file: + +@smallexample +eval "$(gpg-agent --daemon)" +@end smallexample + +For more details on invoking @code{gpg-agent}, @xref{Invoking +GPG-AGENT,,,gnupg,Using the GNU Privacy Guard}. + +Whenever you perform a PGG operation that requires a GnuPG passphrase, +GnuPG will contact @code{gpg-agent}, which prompts you for the +passphrase. Furthermore, @code{gpg-agent} ``caches'' the result, so +that subsequent uses will not require you to enter the passphrase +again. (This cache usually expires after a certain time has passed; +you can change this using the @code{--default-cache-ttl} option when +invoking @code{gpg-agent}.) + +If you are running in a X Window System environment, @code{gpg-agent} +prompts for a passphrase by opening a graphical window. However, if +you are running Emacs on a text terminal, @code{gpg-agent} has trouble +receiving input from the terminal, since it is being sent to Emacs. +One workaround for this problem is to run @code{gpg-agent} on a +different terminal from Emacs, with the @code{--keep-tty} option; this +tells @code{gpg-agent} use its own terminal to prompt for passphrases. + +When @code{gpg-agent} is not being used, PGG prompts for a passphrase +through Emacs. It also has its own passphrase caching mechanism, +which is controlled by the variable @code{pgg-cache-passphrase} (see +below). + +There is a security risk in handling passphrases through PGG rather +than @code{gpg-agent}. When you enter your passphrase into an Emacs +prompt, it is temporarily stored as a cleartext string in the memory +of the Emacs executable. If the executable memory is swapped to disk, +the root user can, in theory, extract the passphrase from the +swapfile. Furthermore, the swapfile containing the cleartext +passphrase might remain on the disk after the system is discarded or +stolen. @code{gpg-agent} avoids this problem by using certain tricks, +such as memory locking, which have not been implemented in Emacs. @defvar pgg-cache-passphrase If non-@code{nil}, store passphrases. The default value of this @@ -234,12 +296,12 @@ Elapsed time for expiration in seconds. @end defvar -@defvar pgg-gpg-use-agent -When using GnuPG (gpg) as PGP scheme you can use @code{gpg-agent} for -caching@footnote{Actually @code{gpg-agent} does not cache passphrases -but private keys. On the other hand, from a users point of view this -technical difference isn't visible.}. If non-@code{nil} try to use a -running @code{gpg-agent}. It defaults to @code{nil}. +If your passphrase contains non-ASCII characters, you might need to +specify the coding system to be used to encode your passphrases, since +GnuPG treats them as a byte sequence, not as a character sequence. + +@defvar pgg-passphrase-coding-system +Coding system used to encode passphrase. @end defvar @node Default user identity Index: gnus/texi/sieve.texi diff -u gnus/texi/sieve.texi:7.9 gnus/texi/sieve.texi:7.10 --- gnus/texi/sieve.texi:7.9 Tue Apr 18 19:30:16 2006 +++ gnus/texi/sieve.texi Wed Jan 24 08:15:38 2007 @@ -9,8 +9,8 @@ @copying This file documents the Emacs Sieve package, for server-side mail filtering. -Copyright @copyright{} 2001, 2002, 2003, 2004, 2005, 2006 Free -Software Foundation, Inc. +Copyright @copyright{} 2001, 2002, 2003, 2004, 2005, 2006, 2007 +Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document