+2004-10-26 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nnspool.el (nnspool-spool-directory): Use news-path if the
+ news-directory variable is not bound.
+
+ * gnus-start.el (gnus-check-reasonable-setup): Use an alternative
+ function instead of display-warning if it is not available.
+
+2004-10-26 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-agent.el (gnus-agent-expire-group-1): Fix last merge from
+ v5-10: Use `point-at-bol'.
+
+2004-10-26 Simon Josefsson <jas@extundo.com>
+
+ * hashcash.el: Fix URL in comment, reported by Cheng Gao
+ <chenggao@gmail.com>.
+
+2004-10-25 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * html2text.el (html2text-buffer-head): Removed. Use `goto-char'
+ instead.
+
2004-10-25 Teodor Zlatanov <tzz@lifelogs.com>
* nnimap.el (nnimap-remove-server-from-buffer-alist): new function
* nnimap.el (nnimap-open-connection): use
netrc-machine-user-or-password
+2004-10-17 Richard M. Stallman <rms@gnu.org>
+
+ * gnus-registry.el (gnus-registry-unload-hook):
+ Set as a variable with add-hook.
+
+ * nnspool.el (nnspool-spool-directory): Use news-directory instead
+ of news-path.
+
+ * spam-stat.el (spam-stat-unload-hook): Set as a variable w/ add-hook.
+
+ * spam.el: Delete duplicate `provide'.
+ (spam-unload-hook): Set as a variable with add-hook.
+
+2004-10-15 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * pop3.el (pop3-leave-mail-on-server): Describe possible problems
+ in the doc string.
+
+ * message.el (message-ignored-news-headers)
+ (message-ignored-supersedes-headers)
+ (message-ignored-resent-headers)
+ (message-forward-ignored-headers): Improve custom type.
+
2004-10-13 Katsumi Yamaoka <yamaoka@jpl.org>
* message.el (message-tokenize-header): Fix 2004-09-06 change
2004-03-04 Kevin Greiner <kgreiner@xpediantsolutions.com>
- * gnus-agent.el (gnus-agent-file-header-cache): Removed.
+ * gnus-agent.el (gnus-agent-file-header-cache): Removed.
(gnus-agent-possibly-alter-active): Avoid null in numeric
comparison.
(gnus-agent-set-local): Refuse to save null in local object table.
gnus-agent-article-alist))))
(when regenerated
- (gnus-agent-update-files-total-fetched-for group nil)))
+ (gnus-agent-update-files-total-fetched-for group nil)))
(gnus-message 5 "")
regenerated)))
(remove-hook 'gnus-summary-prepare-hook 'gnus-registry-register-message-ids))
+(add-hook 'gnus-registry-unload-hook 'gnus-registry-unload-hook)
+
(when gnus-registry-install
(gnus-registry-install-hooks)
(gnus-registry-read))
(defun gnus-check-reasonable-setup ()
;; Check whether nnml and nnfolder share a directory.
- (let ((actives nil))
+ (let ((display-warn
+ (if (boundp 'display-warning)
+ 'display-warning
+ (lambda (type message)
+ (if noninteractive
+ (message "Warning (%s): %s" type message)
+ (let (window)
+ (with-current-buffer (get-buffer-create "*Warnings*")
+ (goto-char (point-max))
+ (unless (bolp)
+ (insert "\n"))
+ (insert (format "Warning (%s): %s\n" type message))
+ (setq window (display-buffer (current-buffer)))
+ (set-window-start
+ window
+ (prog2
+ (forward-line (- 1 (window-height window)))
+ (point)
+ (goto-char (point-max))))))))))
+ method active actives match)
(dolist (server gnus-server-alist)
- (let* ((method (gnus-server-to-method server))
- (active (intern (format "%s-active-file" (car method))))
- match)
- (when (and (member (car method) '(nnml nnfolder))
- (gnus-server-opened method)
- (boundp active))
- (when (setq match (assoc (symbol-value active) actives))
- (display-warning
- :warning (format "%s and %s share the same active file %s"
- (car method)
- (cadr match)
- (car match))))
- (push (list (symbol-value active) method) actives))))))
+ (setq method (gnus-server-to-method server)
+ active (intern (format "%s-active-file" (car method))))
+ (when (and (member (car method) '(nnml nnfolder))
+ (gnus-server-opened method)
+ (boundp active))
+ (when (setq match (assoc (symbol-value active) actives))
+ (funcall display-warn 'gnus-server
+ (format "%s and %s share the same active file %s"
+ (car method)
+ (cadr match)
+ (car match))))
+ (push (list (symbol-value active) method) actives)))))
(provide 'gnus-start)
;;; Commentary:
-;; The hashcash binary is at http://www.cypherspace.org/hashcash/
+;; The hashcash binary is at http://www.hashcash.org/.
;;
;; Call mail-add-payment to add a hashcash payment to a mail message
;; in the current buffer.
;; <Utility functions>
;;
-(defun html2text-buffer-head ()
- (if (string= mode-name "Article")
- (beginning-of-buffer)
- (beginning-of-buffer)))
(defun html2text-replace-string (from-string to-string p1 p2)
(goto-char p1)
"This _tries_ to fix up the paragraphs - this is done in quite a ad-hook
fashion, quite close to pure guess-work. It does work in some cases though."
(interactive)
- (html2text-buffer-head)
+ (goto-char (point-min))
(replace-regexp "^<br>$" "")
;; Removing lonely <br> on a single line, if they are left intact we
;; dont have any paragraphs at all.
- (html2text-buffer-head)
+ (goto-char (point-min))
(while (not (eobp))
(let ((p1 (point)))
(forward-paragraph 1)
See the documentation for that variable."
(interactive)
(dolist (tag tag-list)
- (html2text-buffer-head)
- (while (re-search-forward (format "</?%s[^>]*>" tag) (point-max) t)
+ (goto-char (point-min))
+ (while (re-search-forward (format "\\(</?%s[^>]*>\\)" tag) (point-max) t)
(delete-region (match-beginning 0) (match-end 0)))))
(defun html2text-format-tags ()
(dolist (tag-and-function html2text-format-tag-list)
(let ((tag (car tag-and-function))
(function (cdr tag-and-function)))
- (html2text-buffer-head)
- (while (re-search-forward (format "<%s\\( [^>]*\\)?>" tag)
+ (goto-char (point-min))
+ (while (re-search-forward (format "\\(<%s\\( [^>]*\\)?>\\)" tag)
(point-max) t)
(let ((p1)
(p2 (point))
"See the variable \"html2text-replace-list\" for documentation"
(interactive)
(dolist (e html2text-replace-list)
- (html2text-buffer-head)
+ (goto-char (point-min))
(let ((old-string (car e))
(new-string (cdr e)))
(html2text-replace-string old-string new-string (point-min) (point-max)))
(dolist (tag-and-function html2text-format-single-element-list)
(let ((tag (car tag-and-function))
(function (cdr tag-and-function)))
- (html2text-buffer-head)
- (while (re-search-forward (format "<%s\\( [^>]*\\)?>" tag)
+ (goto-char (point-min))
+ (while (re-search-forward (format "\\(<%s\\( [^>]*\\)?>\\)" tag)
(point-max) t)
(let ((p1)
(p2 (point)))
:group 'message-news
:group 'message-headers
:link '(custom-manual "(message)Message Headers")
- :type 'regexp)
+ :type '(repeat :value-to-internal (lambda (widget value)
+ (custom-split-regexp-maybe value))
+ :match (lambda (widget value)
+ (or (stringp value)
+ (widget-editable-list-match widget value)))
+ regexp))
(defcustom message-ignored-mail-headers
"^[GF]cc:\\|^Resent-Fcc:\\|^Xref:\\|^X-Draft-From:\\|^X-Gnus-Agent-Meta-Information:"
any confusion."
:group 'message-interface
:link '(custom-manual "(message)Superseding")
- :type 'regexp)
+ :type '(repeat :value-to-internal (lambda (widget value)
+ (custom-split-regexp-maybe value))
+ :match (lambda (widget value)
+ (or (stringp value)
+ (widget-editable-list-match widget value)))
+ regexp))
(defcustom message-supersede-setup-function
'message-supersede-setup-for-mime-edit
"*All headers that match this regexp will be deleted when resending a message."
:group 'message-interface
:link '(custom-manual "(message)Resending")
- :type 'regexp)
+ :type '(repeat :value-to-internal (lambda (widget value)
+ (custom-split-regexp-maybe value))
+ :match (lambda (widget value)
+ (or (stringp value)
+ (widget-editable-list-match widget value)))
+ regexp))
(defcustom message-forward-ignored-headers "^Content-Transfer-Encoding:\\|^X-Gnus"
"*All headers that match this regexp will be deleted when forwarding a message."
:version "21.1"
:group 'message-forwarding
- :type '(choice (const :tag "None" nil)
+ :type '(repeat :value-to-internal (lambda (widget value)
+ (custom-split-regexp-maybe value))
+ :match (lambda (widget value)
+ (or (stringp value)
+ (widget-editable-list-match widget value)))
regexp))
(defcustom message-ignored-cited-headers "."
"Switches for nnspool-request-post to pass to `inews' for posting news.
If you are using Cnews, you probably should set this variable to nil.")
-(defvoo nnspool-spool-directory (file-name-as-directory news-path)
+(defvoo nnspool-spool-directory
+ (file-name-as-directory (if (boundp 'news-directory)
+ (symbol-value 'news-directory)
+ news-path))
"Local news spool directory.")
(defvoo nnspool-nov-directory (concat nnspool-spool-directory "over.view/")
:group 'pop3)
(defcustom pop3-leave-mail-on-server nil
- "*Non-nil if the mail is to be left on the POP server after fetching."
+ "*Non-nil if the mail is to be left on the POP server after fetching.
+
+If the `pop3-leave-mail-on-server' is non-`nil' the mail is to be
+left 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."
:version "21.4" ;; Oort Gnus
:type 'boolean
:group 'pop3)
(remove-hook 'gnus-select-article-hook
'spam-stat-store-gnus-article-buffer))
+(add-hook 'spam-stat-unload-hook 'spam-stat-unload-hook)
+
(provide 'spam-stat)
;;; spam-stat.el ends here
(remove-hook 'gnus-get-new-news-hook 'spam-setup-widening)
(remove-hook 'gnus-summary-prepare-hook 'spam-find-spam))
+(add-hook 'spam-unload-hook 'spam-unload-hook)
+
(when spam-install-hooks
(spam-initialize))
;;}}}
+2004-10-26 Simon Josefsson <jas@extundo.com>
+
+ * gnus.texi (Hashcash): Fix URL. Add pref to spam section.
+ (Anti-spam Hashcash Payments): No need to load hashcash.el now.
+
+2004-10-15 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (New Features): Add 5.11.
+
+ * message.texi (Resending): Remove wrong default value.
+
+ * gnus.texi (Mail Source Specifiers): Describe possible problems
+ of `pop3-leave-mail-on-server'. Add `pop3-movemail' and
+ `pop3-leave-mail-on-server' to the index.
+
2004-10-15 Reiner Steib <Reiner.Steib@gmx.de>
* gnus.texi (Adaptive Scoring): Added gnus-adaptive-pretty-print.
* Red Gnus:: \e$B;0HVL\$N:G>e$N$b$N\e(B---Gnus 5.4/5.5
* Quassia Gnus:: 2 \e$B$+$1$k\e(B 2 \e$B$O\e(B 4\e$B!"$b$7$/$O\e(B Gnus 5.6/5.7
* Pterodactyl Gnus:: \e$B8^HVL\!"\e(BP \e$B$G;O$^$k!"$b$7$/$O\e(B Gnus 5.8/5.9 \e$B$H$7$FCN$i$l$F$$$k$b$N\e(B
-* Oort Gnus:: \e$B5pBg$J!#1s$/MZ$+$J!#\e(BGnus 5.10\e$B!#\e(B
+* Oort Gnus:: \e$B5pBg$J!#1s$/MZ$+$J!#\e(BGnus 5.10/5.11\e$B!#\e(B
* No Gnus:: Lars \e$B$5$s!"D>$7$F\e(B!
Customization
\e$B$9!#%G%#%U%)%k%H$O\e(B @code{nil} \e$B$G$9!#\e(B
@end table
+@vindex pop3-movemail
+@vindex pop3-leave-mail-on-server
@code{:program} \e$B$H\e(B @code{:function} \e$B%-!<%o!<%I$,;XDj$5$l$F$$$J$$$H!"\e(B
-@code{pop3-movemail} \e$B$,;HMQ$5$l$^$9!#\e(B
+@code{pop3-movemail} \e$B$,;HMQ$5$l$^$9!#\e(B@code{pop3-movemail} \e$B$r;H$&>l9g!"\e(B
@code{pop3-leave-mail-on-server} \e$B$,Hs\e(B-@code{nil} \e$B$@$C$?$i!"%a!<%k$O<hF@\e(B
-\e$B8e$G$b\e(B POP \e$B%5!<%P!<$K;D$5$l$^$9!#\e(B
+\e$B8e$G$b\e(B @acronym{POP} \e$B%5!<%P!<$K;D$5$l$^$9!#\e(B@acronym{POP} \e$B%5!<%P!<$O%;%C\e(B
+\e$B%7%g%sCf$N>uBV$N>pJs$r0];}$7$^$;$s!#%/%i%$%"%s%H$,?.Mj$G$-$k>pJs$O%/%i%$\e(B
+\e$B%"%s%H$=$N$b$N$K$"$j$^$9$,!"<B:]$K$=$3$K$"$k$b$N$O@5$7$/$J$$$+$b$7$l$J$$\e(B
+\e$B$3$H$KCm0U$7$F2<$5$$!#$=$l$i$,@5$7$/>pJs$r0];}$7$J$$>l9g$O!"$9$Y$F$,Jx2u\e(B
+\e$B$7$F!"$"$J$?$O2u$l$?%a!<%k%\%C%/%9$H$H$b$KCV$-5n$j$K$J$k2DG=@-$,$"$j$^$9!#\e(B
\e$B$3$l$O$$$/$D$+$NNc$G$9!#=i4|MxMQ<TL>$G!"=i4|\e(B @acronym{POP} \e$B%5!<%P!<$+$i\e(B
\e$B<hF@$7!"=i4|<hF@J}K!$r;HMQ$7$^$9\e(B:
\e$B$N\e(B hashcash \e$B%/%C%-!<$O\e(B @samp{X-Hashcash:} \e$B%X%C%@!<$KA^F~$5$l$^$9!#$b$C$H\e(B
\e$B>\$7$$$3$H!"$=$7$F$3$N5!G=$r;H$&$?$a$K%$%s%9%H!<%k$9$kI,MW$,$"$k30It%"%W\e(B
\e$B%j%1!<%7%g%s$N\e(B @code{hashcash} \e$B$K$D$$$F\e(B
-\e$B$O\e(B @uref{http://www.cypherspace.org/~adam/hashcash/} \e$B$r;2>H$7$F2<$5$$!#\e(B
-\e$B$5$i$J$k>pJs$,\e(B @uref{http://www.camram.org/} \e$B$G8+$D$+$k$G$7$g$&!#\e(B
+\e$B$O\e(B @uref{http://www.hashcash.org/} \e$B$r;2>H$7$F2<$5$$!#$5$i$J$k>pJs\e(B
+\e$B$,\e(B @uref{http://www.camram.org/} \e$B$G8+$D$+$k$G$7$g$&!#\e(B
\e$BAw?.$9$k%a%C%;!<%8$N$=$l$>$l$K$D$$$F\e(B hashcash \e$B$r@8@.$5$;$h$&$H;W$&$J$i!"\e(B
\e$B0J2<$N$h$&$K\e(B @code{message-generate-hashcash} (@pxref{Mail Headers,,Mail
\e$B$N\e(B @code{mail-check-payment} \e$B4X?t$r;H$C$F2<$5$$!#F~$C$F$-$?%a!<%k\e(B
\e$B$N\e(B hashcash \e$B%/%C%-!<$r3NG'$7!"$=$l$K$h$C$F%a!<%k$r_I2a$9$k$?$a$K!"\e(B
@code{spam-use-hashcash} \e$B%P%C%/%(%s%I$G\e(B @code{spam.el} \e$B$r;H$&$3$H$b$G$-\e(B
-\e$B$^$9!#\e(B
+\e$B$^$9\e(B (@pxref{Anti-spam Hashcash Payments})\e$B!#\e(B
@node Filtering Spam Using The Spam ELisp Package
@subsection Spam ELisp \e$B%Q%C%1!<%8$r;H$C$?\e(B Spam \e$B$N_I2a\e(B
@code{spam-use-whitelist} (@pxref{Blacklists and Whitelists}) \e$B$K;w$F$$$^\e(B
\e$B$9$,!"Aw?.<T$N%"%I%l%9$NBe$o$j$K!"7iGr$J%a%C%;!<%8$N$?$a$N\e(B hashcash \e$B$N\e(B
-\e$B0u\e(B (tokens) \e$B$r;H$$$^$9!#\e(B@code{spam-use-hashcash} \e$B$,@5$7$/F/$/$h$&$K$9$k\e(B
-\e$B$?$a$K!"\e(B@file{hashcash.el} \e$B$rFI$_9~$s$G$*$+$J$1$l$P$J$j$^$;$s!#\e(B
-Hashcash \e$B0u$,L5$$%a%C%;!<%8$O<!$N\e(B spam-\e$BJ,3d\e(B (spam-split) \e$B5,B'$KAw$i$l$^\e(B
-\e$B$9!#$3$l$O\e(B hashcash \e$B0u$,8+Ev$?$i$J$$%a%C%;!<%8$O\e(B spam \e$B$H$b\e(B ham \e$B$H$b8+$J\e(B
-\e$B$5$l$J$$$3$H$r0UL#$9$k!"L@<(E*$J_I2a4o$G$9!#\e(B
+\e$B0u\e(B (tokens) \e$B$r;H$$$^$9!#\e(BHashcash \e$B0u$,L5$$%a%C%;!<%8$O<!$N\e(B spam-\e$BJ,\e(B
+\e$B3d\e(B (spam-split) \e$B5,B'$KAw$i$l$^$9!#$3$l$O\e(B hashcash \e$B0u$,8+Ev$?$i$J$$%a%C%;!<\e(B
+\e$B%8$O\e(B spam \e$B$H$b\e(B ham \e$B$H$b8+$J$5$l$J$$$3$H$r0UL#$9$k!"L@<(E*$J_I2a4o$G$9!#\e(B
@end defvar
* Red Gnus:: \e$B;0HVL\$N:G>e$N$b$N\e(B---Gnus 5.4/5.5
* Quassia Gnus:: 2 \e$B$+$1$k\e(B 2 \e$B$O\e(B 4\e$B!"$b$7$/$O\e(B Gnus 5.6/5.7
* Pterodactyl Gnus:: \e$B8^HVL\!"\e(BP \e$B$G;O$^$k!"$b$7$/$O\e(B Gnus 5.8/5.9 \e$B$H$7$FCN$i$l$F$$$k$b$N\e(B
-* Oort Gnus:: \e$B5pBg$J!#1s$/MZ$+$J!#\e(BGnus 5.10\e$B!#\e(B
+* Oort Gnus:: \e$B5pBg$J!#1s$/MZ$+$J!#\e(BGnus 5.10/5.11\e$B!#\e(B
* No Gnus:: Lars \e$B$5$s!"D>$7$F\e(B!
@end menu
* Red Gnus:: Third time best---Gnus 5.4/5.5.
* Quassia Gnus:: Two times two is four, or Gnus 5.6/5.7.
* Pterodactyl Gnus:: Pentad also starts with P, AKA Gnus 5.8/5.9.
-* Oort Gnus:: It's big. It's far out. Gnus 5.10.
+* Oort Gnus:: It's big. It's far out. Gnus 5.10/5.11.
* No Gnus:: Lars, FIXME!
Customization
@end table
+@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 POP server after fetching.
+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:
@cindex X-Hashcash
The ``something costly'' is to burn CPU time, more specifically to
compute a hash collision up to a certain number of bits. The
-resulting hashcash cookie is inserted in a @samp{X-Hashcash:}
-header. For more details, and for the external application
-@code{hashcash} you need to install to use this feature, see
-@uref{http://www.cypherspace.org/~adam/hashcash/}. Even more
-information can be found at @uref{http://www.camram.org/}.
+resulting hashcash cookie is inserted in a @samp{X-Hashcash:} header.
+For more details, and for the external application @code{hashcash} you
+need to install to use this feature, see
+@uref{http://www.hashcash.org/}. Even more information can be found
+at @uref{http://www.camram.org/}.
If you wish to generate hashcash for each message you send, you can
customize @code{message-generate-hashcash} (@pxref{Mail Headers, ,Mail
in a message, use the @code{mail-check-payment} function in the
@code{hashcash.el} library. You can also use the @code{spam.el}
package with the @code{spam-use-hashcash} backend to validate hashcash
-cookies in incoming mail and filter mail accordingly.
+cookies in incoming mail and filter mail accordingly (@pxref{Anti-spam
+Hashcash Payments}).
@node Filtering Spam Using The Spam ELisp Package
@subsection Filtering Spam Using The Spam ELisp Package
Similar to @code{spam-use-whitelist} (@pxref{Blacklists and
Whitelists}), but uses hashcash tokens for whitelisting messages
-instead of the sender address. You must have the @code{hashcash.el}
-package loaded for @code{spam-use-hashcash} to work properly.
-Messages without a hashcash payment token will be sent to the next
-spam-split rule. This is an explicit filter, meaning that unless a
-hashcash token is found, the messages are not assumed to be spam or
-ham.
+instead of the sender address. Messages without a hashcash payment
+token will be sent to the next spam-split rule. This is an explicit
+filter, meaning that unless a hashcash token is found, the messages
+are not assumed to be spam or ham.
@end defvar
* Red Gnus:: Third time best---Gnus 5.4/5.5.
* Quassia Gnus:: Two times two is four, or Gnus 5.6/5.7.
* Pterodactyl Gnus:: Pentad also starts with P, AKA Gnus 5.8/5.9.
-* Oort Gnus:: It's big. It's far out. Gnus 5.10.
+* Oort Gnus:: It's big. It's far out. Gnus 5.10/5.11.
* No Gnus:: Lars, FIXME!
@end menu
@vindex message-ignored-resent-headers
\e$B@55,I=8=\e(B @code{message-ignored-resent-headers} \e$B$K9gCW$9$k%X%C%@!<$O%a%C\e(B
-\e$B%;!<%8$rAw$kA0$K<h$j=|$+$l$^$9!#=i4|CM$O\e(B @code{^Return-receipt} \e$B$G$9!#\e(B
+\e$B%;!<%8$rAw$kA0$K<h$j=|$+$l$^$9!#\e(B
@node Bouncing
@section \e$B<:GT\e(B
@vindex message-ignored-resent-headers
Headers that match the @code{message-ignored-resent-headers} regexp will
-be removed before sending the message. The default is
-@samp{^Return-receipt}.
+be removed before sending the message.
@node Bouncing